diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@Param("devcode") String devcode); } diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class new file mode 100644 index 0000000..0813269 --- /dev/null +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class new file mode 100644 index 0000000..0813269 --- /dev/null +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/target/classes/com/casic/dao/DataGasMapper.class b/target/classes/com/casic/dao/DataGasMapper.class new file mode 100644 index 0000000..b9404b1 --- /dev/null +++ b/target/classes/com/casic/dao/DataGasMapper.class Binary files differ diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class new file mode 100644 index 0000000..0813269 --- /dev/null +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/target/classes/com/casic/dao/DataGasMapper.class b/target/classes/com/casic/dao/DataGasMapper.class new file mode 100644 index 0000000..b9404b1 --- /dev/null +++ b/target/classes/com/casic/dao/DataGasMapper.class Binary files differ diff --git a/target/classes/com/casic/dao/DeviceMapper.class b/target/classes/com/casic/dao/DeviceMapper.class new file mode 100644 index 0000000..a2d1f17 --- /dev/null +++ b/target/classes/com/casic/dao/DeviceMapper.class Binary files differ diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class new file mode 100644 index 0000000..0813269 --- /dev/null +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/target/classes/com/casic/dao/DataGasMapper.class b/target/classes/com/casic/dao/DataGasMapper.class new file mode 100644 index 0000000..b9404b1 --- /dev/null +++ b/target/classes/com/casic/dao/DataGasMapper.class Binary files differ diff --git a/target/classes/com/casic/dao/DeviceMapper.class b/target/classes/com/casic/dao/DeviceMapper.class new file mode 100644 index 0000000..a2d1f17 --- /dev/null +++ b/target/classes/com/casic/dao/DeviceMapper.class Binary files differ diff --git a/target/classes/com/casic/service/DeviceService.class b/target/classes/com/casic/service/DeviceService.class new file mode 100644 index 0000000..e74c3d1 --- /dev/null +++ b/target/classes/com/casic/service/DeviceService.class Binary files differ diff --git a/pom.xml b/pom.xml index 74d7bd1..4db133b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.casic.sensor sensor-transfer 1.0-SNAPSHOT - war + jar UTF-8 @@ -61,10 +61,6 @@ 3.4.3 - - org.postgresql - postgresql - org.projectlombok @@ -85,6 +81,12 @@ 1.2.73 + + xyz.downgoon + snowflake + 1.0.0 + + @@ -120,4 +122,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/build/bin/start.bat b/src/main/build/bin/start.bat new file mode 100644 index 0000000..d858fb2 --- /dev/null +++ b/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/src/main/build/bin/start.sh b/src/main/build/bin/start.sh new file mode 100644 index 0000000..e14c4c7 --- /dev/null +++ b/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java index c55e37d..0887f1f 100644 --- a/src/main/java/com/casic/CasicApplication.java +++ b/src/main/java/com/casic/CasicApplication.java @@ -3,8 +3,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; /** diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 653db64..6152cb6 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -1,15 +1,21 @@ package com.casic.controller; -import com.casic.model.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; import com.casic.service.DeviceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +@Slf4j @RestController -@RequestMapping("/device") +@RequestMapping("/casic") public class DeviceController { @@ -24,9 +30,11 @@ return deviceService.testMysql(); } - @PostMapping("/online") - public ResponseData DeviceOnline(@RequestBody DeviceOnlineParam onlineParam) { - return deviceService.onlineStatusByImei(onlineParam.getEventType(),onlineParam.getImei()); + @PostMapping("/data/gas") + public ResponseData saveDataGas(@RequestBody Map receiveData) { + log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + return deviceService.saveDataGas(receiveData); } + } diff --git a/src/main/java/com/casic/controller/DeviceDataController.java b/src/main/java/com/casic/controller/DeviceDataController.java deleted file mode 100644 index e5351c9..0000000 --- a/src/main/java/com/casic/controller/DeviceDataController.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RequestMapping("/data") -@RestController -public class DeviceDataController { - - private final DeviceDataService dataService; - - public DeviceDataController(DeviceDataService dataService) { - 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); - } - -} 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..fde1818 --- /dev/null +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -0,0 +1,36 @@ +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); + + + @Update(" UPDATE alarm_records\n" + + " SET STATUS='3'\n" + + " WHERE DEVCODE = #{devcode}\n" + + " AND STATUS='1'") + Integer clearAlarm(@Param("devcode") String devcode); + +} diff --git a/src/main/java/com/casic/dao/DataGasMapper.java b/src/main/java/com/casic/dao/DataGasMapper.java index 47e7cce..8a064f2 100644 --- a/src/main/java/com/casic/dao/DataGasMapper.java +++ b/src/main/java/com/casic/dao/DataGasMapper.java @@ -1,9 +1,36 @@ 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 level,high_value " + + "FROM alarm_level " + + "WHERE device_type=#{deviceType} ") + List> getAlarmLevelList(@Param("deviceType") Long deviceType); + + @Select("SELECT devcode " + + "FROM data_gas_dector " + + "WHERE devcode=#{devcode} " + + "AND (EXTRACT(epoch FROM CAST(now() AS TIMESTAMPTZ))-EXTRACT(epoch FROM CAST(logtime AS TIMESTAMPTZ)))/60.0 < ${minutes} "+ + "ORDER BY logtime DESC " + + "LIMIT 1") + String getLastData(@Param("minutes") String minutes, + @Param("devcode") String devcode); + + @Select("SELECT alarm_content " + + "FROM base_alarm_content_type " + + "WHERE device_type=#{deviceType}") + String getGasMsgContent(@Param("deviceType")Long deviceType); + + } diff --git a/src/main/java/com/casic/dao/DeviceMapper.java b/src/main/java/com/casic/dao/DeviceMapper.java index a550aa3..73b574e 100644 --- a/src/main/java/com/casic/dao/DeviceMapper.java +++ b/src/main/java/com/casic/dao/DeviceMapper.java @@ -1,23 +1,15 @@ package com.casic.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import java.util.HashMap; +import java.util.Map; @Mapper -public interface DeviceMapper { +public interface DeviceMapper extends BaseMapper { - /** - * @param status 设备在线状态 1-0 - * @param imei 设备唯一识别编号 - * @return - */ - @Update("UPDATE bus_device " + - "SET ONLINE_STATE=#{status} " + - "WHERE DEVCODE=#{imei} ") - Integer onlineStatusByImei(@Param("status") String status, - @Param("imei") String imei); + Map getWellCode(@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..5131821 --- /dev/null +++ b/src/main/java/com/casic/dao/impl/AlarmJobDao.java @@ -0,0 +1,59 @@ +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 xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class AlarmJobDao { + + private static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMdd"); + + private static Snowflake snowflake = new Snowflake(0, 2); +// private static final Sn + + @Resource + private AlarmJobMapper alarmJobMapper; + + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setId(snowflake.nextId()); + 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(StringUtils.isEmpty(fix)?"0":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..8a0f764 --- /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") + 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..88b0b26 --- /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") + 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..3d7ac72 --- /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") +public class DataGasDector { + /** + * 主键 + */ + @TableId(value = "ID") + private Long 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/DataReportParam.java b/src/main/java/com/casic/model/DataReportParam.java deleted file mode 100644 index 082814c..0000000 --- a/src/main/java/com/casic/model/DataReportParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.Map; - -/** - * @author cz - * @date 2022-7-1 - */ -@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; -} diff --git a/src/main/java/com/casic/model/DeviceOnlineParam.java b/src/main/java/com/casic/model/DeviceOnlineParam.java deleted file mode 100644 index b92e44d..0000000 --- a/src/main/java/com/casic/model/DeviceOnlineParam.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.model; - -import lombok.Data; - -/** - * @author cz - * @date 2022-07-01 - */ -@Data -public class DeviceOnlineParam { - /** - * 毫秒值 - */ - private String timestamp; - /** - * Ctwing租户id - */ - private String tenantId; - /** - * 通信协议 - */ - private String protocol; - /** - * 产品id - */ - private String productId; - /** - * 消息类型 - */ - private String messageType; - /** - * 事件类型 1上线 0下线 - */ - private String eventType; - /** - * 设备ID - */ - private String deviceId; - /** - * 设备编号 - */ - private String imei; -} diff --git a/src/main/java/com/casic/model/HeartbeatParam.java b/src/main/java/com/casic/model/HeartbeatParam.java deleted file mode 100644 index 8ff029d..0000000 --- a/src/main/java/com/casic/model/HeartbeatParam.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -/** - * @author cz - * @date 2022-7-1 - */ -@Data -public class HeartbeatParam { - - /** - * 终端型号 - */ - private String terminal_type; - /** - * 软件版本 - */ - private String software_version; - /** - * 信号与干扰加噪声比 - */ - private String sinr; - /** - * 参考信号接收功率 - */ - private String rsrp; - /** - * 物理小区标识 - */ - private String pci; - /** - * 厂家名称 - */ - private String manufacturer_name; - /** - * 心跳周期 - */ - private String heartbeat_time; - /** - * 硬件版本 - */ - private String hardware_version; - /** - * 无线信号覆盖等级 - */ - private String ecl; - /** - * 小区位置信息 - */ - private String cell_id; - /** - * 电池电压 - */ - private String battery_voltage; - /** - * 电池电量 - */ - private String battery_value; - /** - * IMSI - */ - @JsonProperty(value = "IMSI",required = true) - private String IMSI; - /** - * imei - */ - @JsonProperty(value = "IMEI",required = true) - private String IMEI; - /** - * ICCID - */ - private String ICCID; -} diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java deleted file mode 100644 index d883fe4..0000000 --- a/src/main/java/com/casic/service/DeviceDataService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.service; - -import com.casic.model.DataReportParam; -import com.casic.model.HeartbeatParam; -import com.casic.model.ResponseData; - -/** - * @author cz - * @date 2022 - */ -public interface DeviceDataService { - - /** - * - * @param dataReportParam - * @return - */ - ResponseData DeviceDataCommit(DataReportParam dataReportParam); - - /** - * - * @param heartbeatParam - * @return - */ - ResponseData heartBeatSave(HeartbeatParam heartbeatParam); - -} diff --git a/src/main/java/com/casic/service/DeviceService.java b/src/main/java/com/casic/service/DeviceService.java index 6d21bf4..76bf9a0 100644 --- a/src/main/java/com/casic/service/DeviceService.java +++ b/src/main/java/com/casic/service/DeviceService.java @@ -1,16 +1,19 @@ package com.casic.service; -import com.casic.model.*; +import com.casic.model.ReceiveDataParam; +import com.casic.model.ResponseData; + +import java.util.Map; public interface DeviceService { ResponseData testMysql(); /** - * 设备状态更新 + * 设备数据上报 * - * @param + * @param receiveData * @return */ - ResponseData onlineStatusByImei(String status,String imei); + ResponseData saveDataGas(Map receiveData); } diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java deleted file mode 100644 index 93f0685..0000000 --- a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.impl.DeviceDataMapper; -import com.casic.model.*; -import com.casic.service.DeviceDataService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Service; - -/** - * @author cz - * @date 2022-6-20 - */ -@Slf4j -@Service -public class DeviceDataServiceImpl implements DeviceDataService { - - @Autowired - DeviceDataMapper deviceDataMapper; - - /** - * @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; - } - - /** - * @param heartbeatParam - * @return - */ - public ResponseData heartBeatSave(HeartbeatParam heartbeatParam) { - ResponseData responseData = new ResponseData(); - try { - deviceDataMapper.editDeviceData(heartbeatParam); - 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; - } -} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 687dc72..4591d50 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,41 +1,193 @@ package com.casic.service.impl; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DataGasMapper; import com.casic.dao.DeviceMapper; +import com.casic.dao.impl.AlarmJobDao; +import com.casic.entity.AlarmJob; +import com.casic.entity.AlarmRecords; +import com.casic.entity.DataGasDector; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.DeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import xyz.downgoon.snowflake.Snowflake; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Slf4j @Service public class DeviceServiceImpl implements DeviceService { - @Autowired - private DeviceMapper deviceData; + @Value("${casic.device.gas-dector.enable-local}") + private Boolean enableLocal; + @Value("${casic.device.gas-dector.type}") + private Long deviceType; + @Resource + private DataGasMapper dataGasMapper; + @Resource + private AlarmRecordsMapper alarmRecordsMapper; + @Resource + private DeviceMapper deviceMapper; + @Autowired + private AlarmJobDao alarmJobDao; + private static Snowflake snowflake = new Snowflake(0, 2); + + @Override public ResponseData testMysql() { ResponseData responseData = new ResponseData(); responseData.setMessage("保存成功"); -// HashMap alarmMsg = deviceDataDao.getAlarmMsg(); responseData.setCode(1); -// responseData.setData(alarmMsg); return responseData; } - public ResponseData onlineStatusByImei(String status, String imei) { + /** + * 处理上线/下线 + * 数据上报 + */ + @Override + public ResponseData saveDataGas(Map receiveData) { ResponseData responseData = new ResponseData(); try { - deviceData.onlineStatusByImei(status, imei); - 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); + Map payloadData; + if (receiveData.containsKey("payload")) { + payloadData = (Map) receiveData.get("payload"); + }else{ + payloadData=receiveData; + } + this.flagSelectProcessor("eventType", payloadData, () -> gasStatusUpdate(payloadData)) + .flagSelectProcessor("gas_sample_value", payloadData, () -> dealNormalData(receiveData)); + responseData.setCode(200); + responseData.setMessage("保存成功"); + } catch (Exception dex) { + log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + responseData.setCode(500); + responseData.setMessage("保存异常"); } return responseData; } + + + private DeviceServiceImpl flagSelectProcessor(String flagField, Map contentMap, Supplier cse) { + if (contentMap.containsKey(flagField)) { + cse.get(); + } + return this; + } + + /** + * 设备心跳数据保存 + * + * @param receiveData + * @return + */ + private Boolean gasStatusUpdate(Map receiveData) { + Long lonTimetemp = Long.valueOf(receiveData.get("timestamp").toString()); + String onlindeStatus = receiveData.get("eventType").toString(); + String devcode = receiveData.get("imei").toString(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("devcode", devcode); + queryWrapper.eq("valid", 1); + Device device = new Device(); + if (!StringUtils.isEmpty(onlindeStatus)) { + device.setOnlineState(onlindeStatus); + Date logTime = new Date(); + logTime.setTime(lonTimetemp); + device.setLogtime(logTime); + deviceMapper.update(device, queryWrapper); + return true; + } + return false; + } + + public Boolean dealNormalData(Map receiveData) { + String devcode = receiveData.get("IMEI").toString(); + if (!StringUtils.isEmpty(devcode)) { + Map deviceMap = deviceMapper.getWellCode(devcode); + //保存数据,无论是否有设备在库内 + DataGasDector dataGasDector = this.saveNormalData(receiveData, deviceMap); + if (ObjectUtils.isEmpty(deviceMap)) { + log.info("没有该设备编号录入" + devcode); + if (enableLocal) { + return true; + } + } + //自动消除报警 + this.alarmRecordsMapper.clearAlarm(devcode); + this.dataTaskJudge(deviceMap, dataGasDector); + return true; + } + return false; + } + + private DataGasDector saveNormalData(Map receiveData, Map deviceMap) { + DataGasDector dataGasDector = new DataGasDector(); + dataGasDector.setId(snowflake.nextId()); + dataGasDector.setDevcode(receiveData.get("IMEI").toString()); + dataGasDector.setWellCode(!ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? deviceMap.get("wellCode").toString() : ""); + dataGasDector.setLogtime(new Date()); + if (!ObjectUtils.isEmpty(receiveData) && receiveData.containsKey("timestamp")) { + dataGasDector.setUptime(new Date(Long.valueOf(receiveData.get("timestamp").toString()))); + } else { + dataGasDector.setUptime(new Date()); + } + Map gascontent = (Map)receiveData.get("payload"); + if (!ObjectUtils.isEmpty(gascontent)) { + if (gascontent.containsKey("gas_sample_value")) { + dataGasDector.setStrength(gascontent.get("gas_sample_value").toString()); + } + } + dataGasMapper.insert(dataGasDector); + return dataGasDector; + } + + /** + * 报警存库 + */ + private void dataTaskJudge(Map deviceMap, DataGasDector dataGasDector) { + List> alarmLevelList = dataGasMapper.getAlarmLevelList(deviceType); + String wellCode = dataGasDector.getWellCode(); + Long deviceId = !ObjectUtils.isEmpty(deviceMap) && deviceMap.containsKey("wellCode") ? Long.valueOf(String.valueOf(deviceMap.get("deviceId"))) : -1; + final String gasMsgContent = dataGasMapper.getGasMsgContent(deviceType); + for (Map alarmLevelMap : alarmLevelList) { + if (Float.valueOf(dataGasDector.getStrength()) > Float.valueOf(String.valueOf(alarmLevelMap.get("high_value")))) { + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setId(snowflake.nextId()); + alarmRecord.setDeviceId(deviceId); + alarmRecord.setDevcode(dataGasDector.getDevcode()); + alarmRecord.setWellCode(wellCode); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent(gasMsgContent); + alarmRecord.setAlarmValue(dataGasDector.getStrength()); + alarmRecord.setAlarmTime(new Date()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmLevel(Integer.valueOf(alarmLevelMap.get("level").toString())); + alarmRecord.setAlarmMessage(gasMsgContent); + String jobId = alarmRecordsMapper.isOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + // 超出报警阈值 生成一条报警消息 + if (!StringUtils.isEmpty(jobId)) { + alarmRecordsMapper.updateOldAlarmRecord(dataGasDector.getDevcode(), gasMsgContent); + alarmRecord.setJobId(Long.valueOf(jobId)); + } else { + AlarmJob alarmJob = alarmJobDao.saveData(dataGasDector.getStrength(), wellCode, "RQZD", "1"); + alarmRecord.setJobId(alarmJob.getId()); + } + alarmRecordsMapper.insert(alarmRecord); + break; + } + } + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fac2afe..4807974 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,12 +1,12 @@ server: - port: 11556 + port: 5907 ################### 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 + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true username: root - password: Casic203 + password: Casic203! session: store-type: redis redis: @@ -17,21 +17,7 @@ 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-postgre.yml b/src/main/resources/application-postgre.yml deleted file mode 100644 index 2b7f69c..0000000 --- a/src/main/resources/application-postgre.yml +++ /dev/null @@ -1,62 +0,0 @@ -server: - port: 11556 -################### spring配置 ################### -spring: - datasource: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - 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 - redis-config: - host: 127.0.0.1 - port: 6379 - password: - 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 -smartcity: - config: - export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ - #export-path: D:\export\ - image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ - config-path: D:\workspace\server\well\2.0\casic-smartcity\casic-web\src\main\resources\config\temp\ - download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ - device: - redis: - invalid-time: 86400 - host: 127.0.0.1 - port: 6379 - password: ew5T4K3#203lwh - config-prefix: 'Casic:' - getui: - appId: H9jSTE2bAt8QWq2K2GNOB3 - appKey: bhPeCutJVdAyOasevQFtN9 - masterSecret: lChudND74A89WRiHLkedb5 -logging: - level.root: info - level.com.casic: info - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86411e6..4038629 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -21,16 +21,9 @@ # 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: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml new file mode 100644 index 0000000..5c64ca8 --- /dev/null +++ b/target/classes/application-dev.yml @@ -0,0 +1,26 @@ +server: + port: 11520 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/smartwell_gdt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true + username: root + 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: +#flowable数据源和多数据源配置 +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..4038629 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,29 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +casic: + device: + gas-dector: + type: 10 + minutes: 60 + enable-local: false \ No newline at end of file diff --git a/target/classes/com/casic/CasicApplication.class b/target/classes/com/casic/CasicApplication.class new file mode 100644 index 0000000..afd2693 --- /dev/null +++ b/target/classes/com/casic/CasicApplication.class Binary files differ diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class new file mode 100644 index 0000000..0813269 --- /dev/null +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/target/classes/com/casic/dao/DataGasMapper.class b/target/classes/com/casic/dao/DataGasMapper.class new file mode 100644 index 0000000..b9404b1 --- /dev/null +++ b/target/classes/com/casic/dao/DataGasMapper.class Binary files differ diff --git a/target/classes/com/casic/dao/DeviceMapper.class b/target/classes/com/casic/dao/DeviceMapper.class new file mode 100644 index 0000000..a2d1f17 --- /dev/null +++ b/target/classes/com/casic/dao/DeviceMapper.class Binary files differ diff --git a/target/classes/com/casic/service/DeviceService.class b/target/classes/com/casic/service/DeviceService.class new file mode 100644 index 0000000..e74c3d1 --- /dev/null +++ b/target/classes/com/casic/service/DeviceService.class Binary files differ diff --git a/target/classes/com/casic/service/impl/DeviceServiceImpl.class b/target/classes/com/casic/service/impl/DeviceServiceImpl.class new file mode 100644 index 0000000..44bf167 --- /dev/null +++ b/target/classes/com/casic/service/impl/DeviceServiceImpl.class Binary files differ