diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java index 6a56a43..a4239a6 100644 --- a/src/main/java/com/casic/service/impl/ScreenDataManger.java +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -5,8 +5,8 @@ import com.casic.dao.spantilt.TiltDataMapper; import com.casic.model.ResponseData; import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -16,32 +16,22 @@ @Slf4j @Service +@AllArgsConstructor public class ScreenDataManger implements ScreenDataService { - @Autowired - private InstalledDeviceBuilder installedDeviceBuilder; - @Autowired - private KindsAlarmBulider kindsAlarmBulider; - @Autowired - private HealthIndicatorsBuilder healthIndicatorsBuilder; - @Autowired - private DeptTimeSpanBuilder deptTimeSpanBuilder; - @Autowired - private OperationalStatusBuilder operStatusBuilder; + private final DeviceBuilder deviceBuilder; + private final AlarmBulider alarmBulider; + private final HealthIndexBuilder healthIndexBuilder; + private final DeptTimeSpanBuilder deptTimeSpanBuilder; + private final OperationalBuilder operationalBuilder; private final SmartwellDataMapper smartwellDataMapper; private final CmsDataMapper cmsDataMapper; private final TiltDataMapper tiltDataMapper; - public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - public Object getInstalledDevice(String beginTime, String endTime) { List> installedDeviceList = null; try { - installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + installedDeviceList = deviceBuilder.InstalledDeviceManger(); } catch (DataAccessException dex) { log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -51,7 +41,7 @@ public Object getKindsAlarmRate(String beginTime, String endTime) { List> rateDeviceList = null; try { - rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + rateDeviceList = alarmBulider.alarmTypeManger(beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -68,10 +58,10 @@ return recordsRoadList; } - public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { - Map healthRoadIndtorMap = null; + public Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime) { + List> healthRoadIndtorMap = null; try { - healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + healthRoadIndtorMap = healthIndexBuilder.healthRoadIndicatorProvider(isSort, limitNum, beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -91,9 +81,9 @@ public Object getHealthIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.healthIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -101,9 +91,9 @@ public Object getDeptIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.deptIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -123,7 +113,7 @@ } ); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return alarmDeviceList; } @@ -132,13 +122,13 @@ ResponseData responseData = new ResponseData(); try { - List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + List> operaStatusList = operationalBuilder.OperationalStatusProvider(beginTime, endTime); responseData.setSuccess(true); responseData.setCode(200); responseData.setMessage("查询成功"); responseData.setData(operaStatusList); } catch (DataAccessException dex) { - log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); responseData.setCode(500); responseData.setMessage("查询异常"); } @@ -166,5 +156,33 @@ return rateDeviceList; } + public Object getAlarmNum() { + List> alarmNumList = null; + try { + alarmNumList = alarmBulider.alarmsByDay(); + } catch (DataAccessException dex) { + log.error("主题:七天报警出现数据异常,异常信息{}", dex); + } + return alarmNumList; + } + public Object getJobByDay(String beginTime, String endTime) { + List> jobList = null; + try { + jobList = alarmBulider.jobsByDeptManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:30天工单数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return jobList; + } + + public Object getDeviceNum(String beginTime, String endTime) { + List> deviceNumList = null; + try { + deviceNumList = deviceBuilder.DeviceNumMangger(); + } catch (DataAccessException dex) { + log.error("主题:各权属单位设备数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deviceNumList; + } } diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java index 6a56a43..a4239a6 100644 --- a/src/main/java/com/casic/service/impl/ScreenDataManger.java +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -5,8 +5,8 @@ import com.casic.dao.spantilt.TiltDataMapper; import com.casic.model.ResponseData; import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -16,32 +16,22 @@ @Slf4j @Service +@AllArgsConstructor public class ScreenDataManger implements ScreenDataService { - @Autowired - private InstalledDeviceBuilder installedDeviceBuilder; - @Autowired - private KindsAlarmBulider kindsAlarmBulider; - @Autowired - private HealthIndicatorsBuilder healthIndicatorsBuilder; - @Autowired - private DeptTimeSpanBuilder deptTimeSpanBuilder; - @Autowired - private OperationalStatusBuilder operStatusBuilder; + private final DeviceBuilder deviceBuilder; + private final AlarmBulider alarmBulider; + private final HealthIndexBuilder healthIndexBuilder; + private final DeptTimeSpanBuilder deptTimeSpanBuilder; + private final OperationalBuilder operationalBuilder; private final SmartwellDataMapper smartwellDataMapper; private final CmsDataMapper cmsDataMapper; private final TiltDataMapper tiltDataMapper; - public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - public Object getInstalledDevice(String beginTime, String endTime) { List> installedDeviceList = null; try { - installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + installedDeviceList = deviceBuilder.InstalledDeviceManger(); } catch (DataAccessException dex) { log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -51,7 +41,7 @@ public Object getKindsAlarmRate(String beginTime, String endTime) { List> rateDeviceList = null; try { - rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + rateDeviceList = alarmBulider.alarmTypeManger(beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -68,10 +58,10 @@ return recordsRoadList; } - public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { - Map healthRoadIndtorMap = null; + public Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime) { + List> healthRoadIndtorMap = null; try { - healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + healthRoadIndtorMap = healthIndexBuilder.healthRoadIndicatorProvider(isSort, limitNum, beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -91,9 +81,9 @@ public Object getHealthIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.healthIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -101,9 +91,9 @@ public Object getDeptIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.deptIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -123,7 +113,7 @@ } ); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return alarmDeviceList; } @@ -132,13 +122,13 @@ ResponseData responseData = new ResponseData(); try { - List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + List> operaStatusList = operationalBuilder.OperationalStatusProvider(beginTime, endTime); responseData.setSuccess(true); responseData.setCode(200); responseData.setMessage("查询成功"); responseData.setData(operaStatusList); } catch (DataAccessException dex) { - log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); responseData.setCode(500); responseData.setMessage("查询异常"); } @@ -166,5 +156,33 @@ return rateDeviceList; } + public Object getAlarmNum() { + List> alarmNumList = null; + try { + alarmNumList = alarmBulider.alarmsByDay(); + } catch (DataAccessException dex) { + log.error("主题:七天报警出现数据异常,异常信息{}", dex); + } + return alarmNumList; + } + public Object getJobByDay(String beginTime, String endTime) { + List> jobList = null; + try { + jobList = alarmBulider.jobsByDeptManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:30天工单数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return jobList; + } + + public Object getDeviceNum(String beginTime, String endTime) { + List> deviceNumList = null; + try { + deviceNumList = deviceBuilder.DeviceNumMangger(); + } catch (DataAccessException dex) { + log.error("主题:各权属单位设备数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deviceNumList; + } } diff --git a/src/main/java/com/casic/util/FormatUtil.java b/src/main/java/com/casic/util/FormatUtil.java new file mode 100644 index 0000000..5bae0a0 --- /dev/null +++ b/src/main/java/com/casic/util/FormatUtil.java @@ -0,0 +1,10 @@ +package com.casic.util; + +import java.text.DecimalFormat; + +public class FormatUtil { + + public static DecimalFormat DF = new DecimalFormat("0.00%"); + public static DecimalFormat DF2 = new DecimalFormat("0.00"); + +} diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java index 6a56a43..a4239a6 100644 --- a/src/main/java/com/casic/service/impl/ScreenDataManger.java +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -5,8 +5,8 @@ import com.casic.dao.spantilt.TiltDataMapper; import com.casic.model.ResponseData; import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -16,32 +16,22 @@ @Slf4j @Service +@AllArgsConstructor public class ScreenDataManger implements ScreenDataService { - @Autowired - private InstalledDeviceBuilder installedDeviceBuilder; - @Autowired - private KindsAlarmBulider kindsAlarmBulider; - @Autowired - private HealthIndicatorsBuilder healthIndicatorsBuilder; - @Autowired - private DeptTimeSpanBuilder deptTimeSpanBuilder; - @Autowired - private OperationalStatusBuilder operStatusBuilder; + private final DeviceBuilder deviceBuilder; + private final AlarmBulider alarmBulider; + private final HealthIndexBuilder healthIndexBuilder; + private final DeptTimeSpanBuilder deptTimeSpanBuilder; + private final OperationalBuilder operationalBuilder; private final SmartwellDataMapper smartwellDataMapper; private final CmsDataMapper cmsDataMapper; private final TiltDataMapper tiltDataMapper; - public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - public Object getInstalledDevice(String beginTime, String endTime) { List> installedDeviceList = null; try { - installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + installedDeviceList = deviceBuilder.InstalledDeviceManger(); } catch (DataAccessException dex) { log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -51,7 +41,7 @@ public Object getKindsAlarmRate(String beginTime, String endTime) { List> rateDeviceList = null; try { - rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + rateDeviceList = alarmBulider.alarmTypeManger(beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -68,10 +58,10 @@ return recordsRoadList; } - public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { - Map healthRoadIndtorMap = null; + public Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime) { + List> healthRoadIndtorMap = null; try { - healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + healthRoadIndtorMap = healthIndexBuilder.healthRoadIndicatorProvider(isSort, limitNum, beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -91,9 +81,9 @@ public Object getHealthIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.healthIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -101,9 +91,9 @@ public Object getDeptIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.deptIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -123,7 +113,7 @@ } ); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return alarmDeviceList; } @@ -132,13 +122,13 @@ ResponseData responseData = new ResponseData(); try { - List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + List> operaStatusList = operationalBuilder.OperationalStatusProvider(beginTime, endTime); responseData.setSuccess(true); responseData.setCode(200); responseData.setMessage("查询成功"); responseData.setData(operaStatusList); } catch (DataAccessException dex) { - log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); responseData.setCode(500); responseData.setMessage("查询异常"); } @@ -166,5 +156,33 @@ return rateDeviceList; } + public Object getAlarmNum() { + List> alarmNumList = null; + try { + alarmNumList = alarmBulider.alarmsByDay(); + } catch (DataAccessException dex) { + log.error("主题:七天报警出现数据异常,异常信息{}", dex); + } + return alarmNumList; + } + public Object getJobByDay(String beginTime, String endTime) { + List> jobList = null; + try { + jobList = alarmBulider.jobsByDeptManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:30天工单数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return jobList; + } + + public Object getDeviceNum(String beginTime, String endTime) { + List> deviceNumList = null; + try { + deviceNumList = deviceBuilder.DeviceNumMangger(); + } catch (DataAccessException dex) { + log.error("主题:各权属单位设备数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deviceNumList; + } } diff --git a/src/main/java/com/casic/util/FormatUtil.java b/src/main/java/com/casic/util/FormatUtil.java new file mode 100644 index 0000000..5bae0a0 --- /dev/null +++ b/src/main/java/com/casic/util/FormatUtil.java @@ -0,0 +1,10 @@ +package com.casic.util; + +import java.text.DecimalFormat; + +public class FormatUtil { + + public static DecimalFormat DF = new DecimalFormat("0.00%"); + public static DecimalFormat DF2 = new DecimalFormat("0.00"); + +} diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml deleted file mode 100644 index 4fee268..0000000 --- a/src/main/resources/application-prod.yml +++ /dev/null @@ -1,43 +0,0 @@ -server: - port: 11312 -################### spring配置 ################### -spring: - datasource: - smartwell: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - username: postgres - password: Casic203 - cms: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms - username: postgres - password: Casic203 - span_tilt: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&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 - # session: - # store-type: redis -#flowable数据源和多数据源配置 -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - #kaptcha-open: false #是否开启登录时验证码 (true/false) - db: - init: - enable: false - spring-session-open: false #开启spring session -logging: - level.root: error - level.com.casic: error - file: - path: logs/ - name: missiles.log \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java index 6a56a43..a4239a6 100644 --- a/src/main/java/com/casic/service/impl/ScreenDataManger.java +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -5,8 +5,8 @@ import com.casic.dao.spantilt.TiltDataMapper; import com.casic.model.ResponseData; import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -16,32 +16,22 @@ @Slf4j @Service +@AllArgsConstructor public class ScreenDataManger implements ScreenDataService { - @Autowired - private InstalledDeviceBuilder installedDeviceBuilder; - @Autowired - private KindsAlarmBulider kindsAlarmBulider; - @Autowired - private HealthIndicatorsBuilder healthIndicatorsBuilder; - @Autowired - private DeptTimeSpanBuilder deptTimeSpanBuilder; - @Autowired - private OperationalStatusBuilder operStatusBuilder; + private final DeviceBuilder deviceBuilder; + private final AlarmBulider alarmBulider; + private final HealthIndexBuilder healthIndexBuilder; + private final DeptTimeSpanBuilder deptTimeSpanBuilder; + private final OperationalBuilder operationalBuilder; private final SmartwellDataMapper smartwellDataMapper; private final CmsDataMapper cmsDataMapper; private final TiltDataMapper tiltDataMapper; - public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - public Object getInstalledDevice(String beginTime, String endTime) { List> installedDeviceList = null; try { - installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + installedDeviceList = deviceBuilder.InstalledDeviceManger(); } catch (DataAccessException dex) { log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -51,7 +41,7 @@ public Object getKindsAlarmRate(String beginTime, String endTime) { List> rateDeviceList = null; try { - rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + rateDeviceList = alarmBulider.alarmTypeManger(beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -68,10 +58,10 @@ return recordsRoadList; } - public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { - Map healthRoadIndtorMap = null; + public Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime) { + List> healthRoadIndtorMap = null; try { - healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + healthRoadIndtorMap = healthIndexBuilder.healthRoadIndicatorProvider(isSort, limitNum, beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -91,9 +81,9 @@ public Object getHealthIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.healthIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -101,9 +91,9 @@ public Object getDeptIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.deptIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -123,7 +113,7 @@ } ); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return alarmDeviceList; } @@ -132,13 +122,13 @@ ResponseData responseData = new ResponseData(); try { - List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + List> operaStatusList = operationalBuilder.OperationalStatusProvider(beginTime, endTime); responseData.setSuccess(true); responseData.setCode(200); responseData.setMessage("查询成功"); responseData.setData(operaStatusList); } catch (DataAccessException dex) { - log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); responseData.setCode(500); responseData.setMessage("查询异常"); } @@ -166,5 +156,33 @@ return rateDeviceList; } + public Object getAlarmNum() { + List> alarmNumList = null; + try { + alarmNumList = alarmBulider.alarmsByDay(); + } catch (DataAccessException dex) { + log.error("主题:七天报警出现数据异常,异常信息{}", dex); + } + return alarmNumList; + } + public Object getJobByDay(String beginTime, String endTime) { + List> jobList = null; + try { + jobList = alarmBulider.jobsByDeptManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:30天工单数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return jobList; + } + + public Object getDeviceNum(String beginTime, String endTime) { + List> deviceNumList = null; + try { + deviceNumList = deviceBuilder.DeviceNumMangger(); + } catch (DataAccessException dex) { + log.error("主题:各权属单位设备数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deviceNumList; + } } diff --git a/src/main/java/com/casic/util/FormatUtil.java b/src/main/java/com/casic/util/FormatUtil.java new file mode 100644 index 0000000..5bae0a0 --- /dev/null +++ b/src/main/java/com/casic/util/FormatUtil.java @@ -0,0 +1,10 @@ +package com.casic.util; + +import java.text.DecimalFormat; + +public class FormatUtil { + + public static DecimalFormat DF = new DecimalFormat("0.00%"); + public static DecimalFormat DF2 = new DecimalFormat("0.00"); + +} diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml deleted file mode 100644 index 4fee268..0000000 --- a/src/main/resources/application-prod.yml +++ /dev/null @@ -1,43 +0,0 @@ -server: - port: 11312 -################### spring配置 ################### -spring: - datasource: - smartwell: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - username: postgres - password: Casic203 - cms: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms - username: postgres - password: Casic203 - span_tilt: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&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 - # session: - # store-type: redis -#flowable数据源和多数据源配置 -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - #kaptcha-open: false #是否开启登录时验证码 (true/false) - db: - init: - enable: false - spring-session-open: false #开启spring session -logging: - level.root: error - level.com.casic: error - 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 971553a..f5397df 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,42 +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语句,调试用 - call-setters-on-nulls: true - mapper-locations: classpath:mapper/*.xml -mybatis: - mapper-locations: classpath:mapper/*.xml - configuration: - # 配置结果集属性为空时 是否映射返回结果 - call-setters-on-nulls: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 -#mybatis-plus: -# 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 - device-types: 1,4,101,12 - 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 +########################################################## +################## 所有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语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +casic: + config: + device-types: 1,4,101,12 + deptId: 1559096734123003906 + alarmDay: 3 \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java index 9b727c0..4b7cdb1 100644 --- a/src/main/java/com/casic/config/DeviceTypesConfig.java +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -8,7 +8,12 @@ @Configuration("DeviceTypesConfig") public class DeviceTypesConfig { - @Value("${casic.device-types}") + @Value("${casic.config.device-types}") private String deviceTypes; + @Value("${casic.config.deptId}") + private Long topDeptId; + + @Value("${casic.config.alarmDay}") + private Integer alarmDay; } diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java index 04f8d97..1a5e4e5 100644 --- a/src/main/java/com/casic/controller/ScreenDataController.java +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -1,210 +1,60 @@ -package com.casic.controller; - -import com.casic.service.ScreenDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/whale/eye") -public class ScreenDataController { - private final ScreenDataService screenDataService; - - public ScreenDataController(ScreenDataService screenDataService) { - this.screenDataService = screenDataService; - } - - /** - * 动态显示已安装设备的类型和个数 - */ - @RequestMapping("/installed-device") - public Object getInstalledDevice(String beginTime, String endTime) { - return screenDataService.getInstalledDevice(beginTime, endTime); - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/line-length") - public Object getLineLength(String beginTime, String endTime) { -// return screenDataService.getLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - " \"deptName\":\"圣井燃气\",\n" + - " \"totalLength\":440\n" + - " },\n" + - " {\n" + - " \"deptName\":\"华气燃气\",\n" + - " \"totalLength\":810\n" + - " },\n" + - " {\n" + - " \"typeName\":\"中燃燃气\",\n" + - " \"totalLength\":500\n" + - " },\n" + - " {\n" + - " \"typeName\":\"正和燃气\",\n" + - " \"totalLength\":520\n" + - " },\n" + - " {\n" + - " \"typeName\":\"华罚燃气\",\n" + - " \"totalLength\":630\n" + - " }\n" + - " ]"; - } - - /** - * 统计汇总各管线权属单位下的燃气管线总长度 - */ - @RequestMapping("/alarm-rate") - public Object getKindsAlarmRate(String beginTime, String endTime) { - return screenDataService.getKindsAlarmRate(beginTime, endTime); - } - - /** - * 分类汇总燃气管线监管人员的类型和数量 - */ - @RequestMapping("/staff") - public Object getObvserStaff(String beginTime, String endTime) { -// return screenDataService.getObvserStaff(beginTime, endTime); - return "{\n" + - " \t\"总人数\":2022,\n" + - "\t\"staffDataList\":[\n" + - " {\n" + - "\t\t\"岗位名称\":\"管理人员\",\n" + - "\t\t\"总计\":72\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"运维人员\",\n" + - "\t\t\"总计\":874\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"施工人员\",\n" + - "\t\t\"总计\":456\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"统计人员\",\n" + - "\t\t\"总计\":745\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"技术人员\",\n" + - "\t\t\"总计\":455\n" + - " },\n" + - " {\n" + - "\t\t\"岗位名称\":\"监管人员\",\n" + - "\t\t\"总计\":644\n" + - " }]\n" + - " }"; - } - - /** - * 以道路的维度来统计汇总燃气管线的长度和权属单位 - */ - @RequestMapping("/road-line-length") - public Object getRoadLineLength(String beginTime, String endTime) { -// return screenDataService.getRoadLineLength(beginTime, endTime); - return "[\n" + - " {\n" + - "\t\t\"所属道路\":\"双山西街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"圣井燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"世纪大道\",\n" + - "\t\t\"管线长度/km\":54,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"桃水大街\",\n" + - "\t\t\"管线长度/km\":32,\n" + - "\t\t\"权属单位\":\"中燃燃气\"\n" + - " },\n" + - " {\n" + - "\t\t\"所属道路\":\"鲁态大街\",\n" + - "\t\t\"管线长度/km\":41,\n" + - "\t\t\"权属单位\":\"正和燃气\"\n" + - " }\n" + - "]"; - } - - /** - * 以道路的维度来统计燃气管线监控中的报警情况 - */ - @RequestMapping("/road-alarm") - public Object getAlarmRecordsByRoad(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); - } - -// /** -// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/list") -// public Object getDeviceList(String beginTime, String endTime) { -// return screenDataService.getDeviceList(beginTime,endTime); -// } -// -// /** -// * 包括设备基本信息、燃气数据值、告警情况 -// */ -// @RequestMapping("/well/Info") -// public Object getDeviceInfo(String wellCode,String deviceType) { -// return screenDataService.getDeviceInfo(wellCode,deviceType); -// } - - /** - * 管网健康指数 - * 场站健康指数 - */ - @RequestMapping("/health-indicator") - public Object getDeviceIndicator(String beginTime, String endTime) { - return screenDataService.getHealthIndicator(beginTime, endTime); - } - - @RequestMapping("/dept-indicator") - public Object getDeptIndicator(String beginTime, String endTime) { - return screenDataService.getDeptIndicator(beginTime, endTime); - } - - /** - * 显示云台的报警信息 - */ - @RequestMapping("/station-alarm") - public Object getAlarmRecordsByStation(String beginTime, String endTime) { - return screenDataService.getAlarmRecordsByStation(beginTime, endTime); - } - - /** - * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) - */ - @RequestMapping("/road-indicator") - public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); - } - - @RequestMapping("/time-span") - public Object getDeptTimeSpan(String beginTime, String endTime) { - return screenDataService.getDeptTimeSpan(beginTime, endTime); - } - - /** - * 道路巡检运维情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/inspect-road") - public Object getInspectRoad(String beginTime, String endTime) { - return screenDataService.getInspectRoad(beginTime, endTime); - } - - /** - * 运维完成情况 - * - * @param beginTime - * @param endTime - * @return - */ - @RequestMapping("/operational-status") - public Object getOperationalStatus(String beginTime, String endTime) { - return screenDataService.getOperationalStatus(beginTime, endTime); - } -} +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + + /** + * 显示各类报警设备比例 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + + /** + *7日报警统计、曲线趋势 + */ + @RequestMapping("/alarm-num") + public Object getAlarmNum() { + return screenDataService.getAlarmNum(); + } + + + /** + * 各类设备的工单信息 + */ + @RequestMapping("/job-day") + public Object getJobByDay(String beginTime, String endTime) { + return screenDataService.getJobByDay(beginTime, endTime); + } + + +} diff --git a/src/main/java/com/casic/controller/ScreenDeviceController.java b/src/main/java/com/casic/controller/ScreenDeviceController.java new file mode 100644 index 0000000..479685d --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDeviceController.java @@ -0,0 +1,84 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/whale/eye") +public class ScreenDeviceController { + private final ScreenDataService screenDataService; + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 各权属单位设备数量统计 + */ + @RequestMapping("/device-num") + public Object getDeviceNum(String beginTime, String endTime) { + return screenDataService.getDeviceNum(beginTime, endTime); + } + + + /** + * 云台监控 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + + + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java index 0294b14..e30516a 100644 --- a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -28,9 +28,9 @@ List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); - Integer countRoadNumber(); + List> countRoadNumber(); - List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> countAlarmRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); @@ -40,4 +40,11 @@ List> getDeptNameList(); + List> getDeptIds(@Param("deptId")Long deptId); + + List> jobsByDeptId(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmsByDay(@Param("alarmDay")Integer alarmDay); + + List> getDeviceList(); } diff --git a/src/main/java/com/casic/model/User.java b/src/main/java/com/casic/model/User.java new file mode 100644 index 0000000..2fd56fa --- /dev/null +++ b/src/main/java/com/casic/model/User.java @@ -0,0 +1,48 @@ +package com.casic.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.security.Timestamp; +import java.util.Date; + +@Data +@TableName("sys_user") +public class User { + private Long id; + private String avatar; + + private String account; + + private String password; + private String salt; + + private String name; + @JSONField( + format = "yyyy-MM-dd" + ) + private Date birthday; + private Integer sex; + private String email; + private String phone; + private String roleId; + private Long deptId; + private String status; + private Integer version; + private String loginIp; + private String loginMac; + private BigDecimal positionLng; + private BigDecimal positionLat; + private String attr1; + private Timestamp lastTime; + private String syncId; + private String syncName; + private String syncPwd; + private String syncDeptid; + private Integer isSync; + private String delFlag; + private String operation; + private String deptname; +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java index b4dd026..1b8e9b3 100644 --- a/src/main/java/com/casic/service/ScreenDataService.java +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -7,7 +7,7 @@ Object getAlarmRecordsByStation(String beginTime, String endTime); - Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime); Object getDeptTimeSpan(String beginTime, String endTime); @@ -23,5 +23,10 @@ Object getInspectRoad(String beginTime, String endTime); + Object getAlarmNum(); + + Object getJobByDay(String beginTime, String endTime); + + Object getDeviceNum(String beginTime, String endTime); } diff --git a/src/main/java/com/casic/service/impl/AlarmBulider.java b/src/main/java/com/casic/service/impl/AlarmBulider.java new file mode 100644 index 0000000..35db535 --- /dev/null +++ b/src/main/java/com/casic/service/impl/AlarmBulider.java @@ -0,0 +1,137 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AlarmBulider { + + @Resource + private SmartwellDataMapper smartwellDataMapper; + @Resource + private TiltDataMapper tiltDataMapper; + @Autowired + private DeviceTypesConfig deviceTypesConfig; + + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap, deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + public List> jobsByDeptManger(String beginTime, String endTime) { + + List> jobDeptList = smartwellDataMapper.jobsByDeptId(beginTime, endTime); + Map> jobDeptMap = jobDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> e) + ); + return this.jobsByDept(jobDeptMap); + } + + public List> alarmsByDay() { + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); + List> mapList = new ArrayList<>(); + try { + List> alarmsList = smartwellDataMapper.countAlarmsByDay(deviceTypesConfig.getAlarmDay()); + Map alarmsMap=alarmsList.stream().collect( + Collectors.toMap(e->String.valueOf(e.get("alarmtimedate")),e->String.valueOf(e.get("count"))) + ); + Calendar beginDate = Calendar.getInstance(); + beginDate.setTime(new Date()); + beginDate.add(Calendar.DAY_OF_MONTH, 0-deviceTypesConfig.getAlarmDay()); + Calendar endDate = Calendar.getInstance(); + endDate.setTime(new Date()); + while (beginDate.getTime().compareTo(endDate.getTime()) <= 0) { + String tmp = sdf1.format(beginDate.getTime()); + Map dataMap = new HashMap(); + dataMap.put("date", sdf2.format(beginDate.getTime())); + dataMap.put("alarmCount",alarmsMap.containsKey(sdf1.format(beginDate.getTime()))?alarmsMap.get(sdf1.format(beginDate.getTime())):"0"); + mapList.add(dataMap); + beginDate.add(Calendar.DAY_OF_MONTH, 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mapList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap, String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType) ? Integer.valueOf(deviceCountMap.get(deviceType)) : 0; + Integer alarmCount = alarmCountMap.containsKey(deviceType) ? Integer.valueOf(alarmCountMap.get(deviceType)) : 0; + rateDeviceMap.put("rate", totalAlarm == 0 ? "0.00%" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : FormatUtil.DF.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } + + private List> jobsByDept(Map> jobDeptMap) { + List> mapList = new ArrayList<>(); + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + deptMapList.forEach( + deptMap -> { + String deptId=String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptId", deptId); + map.put("deptName", deptMap.get("name")); + if (jobDeptMap.containsKey(deptMap.get("id"))) { + map.putAll(jobDeptMap.get(deptMap.get("id"))); + } else { + map.put("beforeGet", 0); + map.put("beforeConfirm", 0); + map.put("inHandle", 0); + map.put("over", 0); + map.put("cancel", 0); + } + mapList.add(map); + } + ); + return mapList; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java index 661018b..67db05e 100644 --- a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @@ -13,14 +15,10 @@ import java.util.stream.Collectors; @Service +@AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00"); - - public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - } public List> deptTimeSpanProvider(String beginTime, String endTime) { Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); @@ -79,7 +77,7 @@ } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); - deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; diff --git a/src/main/java/com/casic/service/impl/DeviceBuilder.java b/src/main/java/com/casic/service/impl/DeviceBuilder.java new file mode 100644 index 0000000..9a5b3cc --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +@AllArgsConstructor +public class DeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + public List> DeviceNumMangger() { + List> deptMapList = smartwellDataMapper.getDeptIds(deviceTypesConfig.getTopDeptId()); + List> deviceList = smartwellDataMapper.getDeviceList(); + Map typeNameMap = smartwellDeviceType(); + return this.getDeviceNumList(deviceList,deptMapList,typeNameMap); + } + + private List> getDeviceNumList(List> deviceList, + List> deptMapList, Map typeNameMap){ + List> deviceNumList = new ArrayList<>(); + Map> deptDeviceMap = deviceList.stream() + .collect(Collectors.groupingBy(e -> String.valueOf(e.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count"))))); + List deviceTypeList = Arrays.asList(deviceTypesConfig.getDeviceTypes().split(",")); + deptMapList.forEach( + deptMap -> { + String deptId = String.valueOf(deptMap.get("id")); + if (ObjectUtils.isEmpty(deptId) || "04".equals(deptMap.get("type"))) { + return; + } + Map map = new HashMap<>(); + map.put("deptName", deptMap.get("name")); + if (deptDeviceMap.containsKey(deptId)) { + Map deviceMap = deptDeviceMap.get(deptId); + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), deviceMap.containsKey(deviceType) ? deviceMap.get(deviceType) : "0") + ); + } else { + deviceTypeList.forEach( + deviceType -> map.put(typeNameMap.get(deviceType), "0") + ); + } + deviceNumList.add(map); + }); + return deviceNumList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } + + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndexBuilder.java b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java new file mode 100644 index 0000000..4f49392 --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndexBuilder.java @@ -0,0 +1,109 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class HealthIndexBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public List> healthRoadIndicatorProvider(String isSort, String limitNum, String beginTime, String endTime) { + return this.smartwellHealthRoadIndicator(isSort, limitNum, beginTime, endTime); + } + + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", FormatUtil.DF.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + private List> smartwellHealthRoadIndicator(String isSort, String limitNum, String beginTime, String endTime) { + List> smartwellHealthList = new ArrayList(); + List> roadNumberList = this.smartwellDataMapper.countRoadNumber(); + List> alarmRoadList = this.smartwellDataMapper.countAlarmRoad(beginTime, endTime); + Map alarmRoadMap = alarmRoadList.stream() + .collect(Collectors.toMap( e->String.valueOf(e.get("road")),e ->String.valueOf(e.get("count")))); + roadNumberList.forEach( + roadMap->{ + Map wellHealthMap = new HashMap(); + wellHealthMap.put("typeName", roadMap.get("road")); + Integer totalRoad = Integer.valueOf(String.valueOf(roadMap.get("count"))); + Integer alarmRoad = alarmRoadMap.containsKey(roadMap.get("road").toString()) ? Integer.valueOf(String.valueOf(alarmRoadMap.get(roadMap.get("road").toString()))) : 0; + wellHealthMap.put("count", FormatUtil.DF2.format(Double.valueOf((double)(totalRoad - alarmRoad)) * 100.0D / (double)totalRoad)); + smartwellHealthList.add(wellHealthMap); + } + ); + if (!StringUtils.isEmpty(isSort)) { + List> sortlist = smartwellHealthList.stream().sorted((e1, e2) -> + Double.valueOf(String.valueOf(e1.get("count"))).compareTo(Double.valueOf(String.valueOf(e2.get("count"))))).collect(Collectors.toList()); + List> limitSortlist = sortlist.subList(0, StringUtils.isEmpty(limitNum) ? sortlist.size() : Integer.valueOf(limitNum)); + return limitSortlist; + } else { + return smartwellHealthList; + } + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", FormatUtil.DF.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java deleted file mode 100644 index ffd0f1b..0000000 --- a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.service.impl; - -import com.alibaba.druid.util.StringUtils; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Service -public class HealthIndicatorsBuilder { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - - - public List> healthIndicatorProvider(String beginTime, String endTime) { - List> healthIndictorList = new ArrayList<>(); - healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); - healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); - return healthIndictorList; - } - - - public List> deptIndicatorProvider(String beginTime, String endTime) { - List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); - List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); - List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); - return deptIndicatorList; - } - - public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { - return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); - } - - private Map smartwellHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); - Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); - smartwellHealth.put("typeName", "管网健康指数"); - smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map tiltHealthIndicator(String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer deviceNumber = tiltDataMapper.countColudDevice(); - Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); - smartwellHealth.put("typeName", "场站健康指数"); - smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); - return smartwellHealth; - } - - private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { - Map smartwellHealth = new HashMap<>(); - Integer roadNumber = smartwellDataMapper.countRoadNumber(); - Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); - smartwellHealth.put("typeName", "道路健康指数"); - smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); - return smartwellHealth; - } - - private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { - Map alarmDeptMap = alarmDeptList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) - ); - List> deptNameList = smartwellDataMapper.getDeptNameList(); - Map deptNameMap = deptNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) - ); - List> deptIndicatorList = new ArrayList<>(); - deviceDeptNumberList.forEach( - deptNameNumberMap -> { - Map deptIndicatorMap = new HashMap<>(); - int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); - String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); - int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); - deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); - deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); - deptIndicatorList.add(deptIndicatorMap); - } - ); - return deptIndicatorList; - } -} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java deleted file mode 100644 index 8b1209d..0000000 --- a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.cms.CmsDataMapper; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 - */ -@Service -public class InstalledDeviceBuilder { - - private final DeviceTypesConfig deviceTypesConfig; - private final SmartwellDataMapper smartwellDataMapper; - private final CmsDataMapper cmsDataMapper; - private final TiltDataMapper tiltDataMapper; - - public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, - TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig = deviceTypesConfig; - } - - public List> InstalledDeviceManger() { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - List> installedDeviceList = new ArrayList<>(); - cmsInstalledDevice(installedDeviceList); - tiltInstalledDevice(installedDeviceList); - smartwellInstalledDevice(installedDeviceList, deviceTypeList); - return installedDeviceList; - } - - private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); - installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); - installedDeviceList.add(installedDeviceMap); - } - } - - private void cmsInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); - installedDeviceMap.put("typeName", "电子标识器"); - installedDeviceList.add(installedDeviceMap); - } - - private void tiltInstalledDevice(List> installedDeviceList) { - Map installedDeviceMap = new HashMap<>(); - installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); - installedDeviceMap.put("typeName", "云台"); - installedDeviceList.add(installedDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java deleted file mode 100644 index 82df147..0000000 --- a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.service.impl; - -import com.casic.config.DeviceTypesConfig; -import com.casic.dao.smartwell.SmartwellDataMapper; -import com.casic.dao.spantilt.TiltDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Component -public class KindsAlarmBulider { - - private final SmartwellDataMapper smartwellDataMapper; - private final TiltDataMapper tiltDataMapper; - private final DeviceTypesConfig deviceTypesConfig; - - private final DecimalFormat df = new DecimalFormat("0.00%"); - - public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { - this.smartwellDataMapper = smartwellDataMapper; - this.tiltDataMapper = tiltDataMapper; - this.deviceTypesConfig=deviceTypesConfig; - } - - public List> alarmTypeManger(String beginTime, String endTime) { - String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); - Map typeNameMap = smartwellDeviceType(); - List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); - calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); - return rateDeviceList; - } - - private Map smartwellDeviceType() { - List> typeNameList = smartwellDataMapper.getTypeName(); - Map typeNameMap = typeNameList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); - return typeNameMap; - } - - private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { - List> rateDeviceList = new ArrayList<>(); - List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); - Map alarmCountMap = alarmCountList.stream().collect( - Collectors.toMap( - e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) - ) - ); - List> deviceCountList = smartwellDataMapper.countDeviceByType(); - Map deviceCountMap = deviceCountList.stream().collect( - Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); - for (String deviceType : deviceTypeList) { - Map rateDeviceMap = new HashMap<>(); - Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; - Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; - rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); - rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); - rateDeviceList.add(rateDeviceMap); - } - return rateDeviceList; - } - - private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { - Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); - Integer totalAlarm = tiltDataMapper.countColudDevice(); - Map rateDeviceMap = new HashMap<>(); - rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); - rateDeviceMap.put("typeName", "云台"); - rateDeviceList.add(rateDeviceMap); - } -} diff --git a/src/main/java/com/casic/service/impl/OperationalBuilder.java b/src/main/java/com/casic/service/impl/OperationalBuilder.java new file mode 100644 index 0000000..fdea5f5 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalBuilder.java @@ -0,0 +1,57 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.util.FormatUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@AllArgsConstructor +public class OperationalBuilder { + private final CmsDataMapper cmsDataMapper; + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", FormatUtil.DF.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java deleted file mode 100644 index 1946ee3..0000000 --- a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.casic.service.impl; - -import com.casic.dao.cms.CmsDataMapper; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class OperationalStatusBuilder { - - private final DecimalFormat df = new DecimalFormat("0.00%"); - private final CmsDataMapper cmsDataMapper; - - public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { - this.cmsDataMapper = cmsDataMapper; - } - - public List> OperationalStatusProvider(String beginTime, String endTime) { - List> operaStatusList = getWorkOrder(beginTime,endTime); - operaStatusList.add(getTask(beginTime,endTime)); - operaStatusList.add(getEvent(beginTime,endTime)); - return operaStatusList; - } - - private Map getTask(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); - Map taskMap = new HashMap<>(); - taskMap.put("type", "运维任务"); - taskMap.put("count", String.valueOf(initTask)); - return taskMap; - } - - private List> getWorkOrder(String beginTime, String endTime) { - List> operaStatusList = new ArrayList<>(); - Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); - Map workPageMap = new HashMap<>(); - workPageMap.put("type", "运维工单"); - workPageMap.put("count", String.valueOf(initTask)); - Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); - Map completeMap = new HashMap<>(); - completeMap.put("type", "运维完结"); - completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); - operaStatusList.add(completeMap); - operaStatusList.add(workPageMap); - return operaStatusList; - } - - private Map getEvent(String beginTime, String endTime) { - Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); - Map eventMap = new HashMap<>(); - eventMap.put("type", "运维事件"); - eventMap.put("count", String.valueOf(initTask)); - return eventMap; - } - -} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java index 6a56a43..a4239a6 100644 --- a/src/main/java/com/casic/service/impl/ScreenDataManger.java +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -5,8 +5,8 @@ import com.casic.dao.spantilt.TiltDataMapper; import com.casic.model.ResponseData; import com.casic.service.ScreenDataService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -16,32 +16,22 @@ @Slf4j @Service +@AllArgsConstructor public class ScreenDataManger implements ScreenDataService { - @Autowired - private InstalledDeviceBuilder installedDeviceBuilder; - @Autowired - private KindsAlarmBulider kindsAlarmBulider; - @Autowired - private HealthIndicatorsBuilder healthIndicatorsBuilder; - @Autowired - private DeptTimeSpanBuilder deptTimeSpanBuilder; - @Autowired - private OperationalStatusBuilder operStatusBuilder; + private final DeviceBuilder deviceBuilder; + private final AlarmBulider alarmBulider; + private final HealthIndexBuilder healthIndexBuilder; + private final DeptTimeSpanBuilder deptTimeSpanBuilder; + private final OperationalBuilder operationalBuilder; private final SmartwellDataMapper smartwellDataMapper; private final CmsDataMapper cmsDataMapper; private final TiltDataMapper tiltDataMapper; - public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { - this.smartwellDataMapper = smartwellDataMapper; - this.cmsDataMapper = cmsDataMapper; - this.tiltDataMapper = tiltDataMapper; - } - public Object getInstalledDevice(String beginTime, String endTime) { List> installedDeviceList = null; try { - installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + installedDeviceList = deviceBuilder.InstalledDeviceManger(); } catch (DataAccessException dex) { log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -51,7 +41,7 @@ public Object getKindsAlarmRate(String beginTime, String endTime) { List> rateDeviceList = null; try { - rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + rateDeviceList = alarmBulider.alarmTypeManger(beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -68,10 +58,10 @@ return recordsRoadList; } - public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { - Map healthRoadIndtorMap = null; + public Object getHealthIndicatorByRoad(String isSort, String limitNum, String beginTime, String endTime) { + List> healthRoadIndtorMap = null; try { - healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + healthRoadIndtorMap = healthIndexBuilder.healthRoadIndicatorProvider(isSort, limitNum, beginTime, endTime); } catch (DataAccessException dex) { log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } @@ -91,9 +81,9 @@ public Object getHealthIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.healthIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -101,9 +91,9 @@ public Object getDeptIndicator(String beginTime, String endTime) { List> healthIndictorList = null; try { - healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + healthIndictorList = healthIndexBuilder.deptIndicatorProvider(beginTime, endTime); } catch (DataAccessException dex) { - log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return healthIndictorList; } @@ -123,7 +113,7 @@ } ); } catch (DataAccessException dex) { - log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); } return alarmDeviceList; } @@ -132,13 +122,13 @@ ResponseData responseData = new ResponseData(); try { - List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + List> operaStatusList = operationalBuilder.OperationalStatusProvider(beginTime, endTime); responseData.setSuccess(true); responseData.setCode(200); responseData.setMessage("查询成功"); responseData.setData(operaStatusList); } catch (DataAccessException dex) { - log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); responseData.setCode(500); responseData.setMessage("查询异常"); } @@ -166,5 +156,33 @@ return rateDeviceList; } + public Object getAlarmNum() { + List> alarmNumList = null; + try { + alarmNumList = alarmBulider.alarmsByDay(); + } catch (DataAccessException dex) { + log.error("主题:七天报警出现数据异常,异常信息{}", dex); + } + return alarmNumList; + } + public Object getJobByDay(String beginTime, String endTime) { + List> jobList = null; + try { + jobList = alarmBulider.jobsByDeptManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:30天工单数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return jobList; + } + + public Object getDeviceNum(String beginTime, String endTime) { + List> deviceNumList = null; + try { + deviceNumList = deviceBuilder.DeviceNumMangger(); + } catch (DataAccessException dex) { + log.error("主题:各权属单位设备数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deviceNumList; + } } diff --git a/src/main/java/com/casic/util/FormatUtil.java b/src/main/java/com/casic/util/FormatUtil.java new file mode 100644 index 0000000..5bae0a0 --- /dev/null +++ b/src/main/java/com/casic/util/FormatUtil.java @@ -0,0 +1,10 @@ +package com.casic.util; + +import java.text.DecimalFormat; + +public class FormatUtil { + + public static DecimalFormat DF = new DecimalFormat("0.00%"); + public static DecimalFormat DF2 = new DecimalFormat("0.00"); + +} diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml deleted file mode 100644 index 4fee268..0000000 --- a/src/main/resources/application-prod.yml +++ /dev/null @@ -1,43 +0,0 @@ -server: - port: 11312 -################### spring配置 ################### -spring: - datasource: - smartwell: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell - username: postgres - password: Casic203 - cms: - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms - username: postgres - password: Casic203 - span_tilt: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&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 - # session: - # store-type: redis -#flowable数据源和多数据源配置 -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - #kaptcha-open: false #是否开启登录时验证码 (true/false) - db: - init: - enable: false - spring-session-open: false #开启spring session -logging: - level.root: error - level.com.casic: error - 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 971553a..f5397df 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,42 +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语句,调试用 - call-setters-on-nulls: true - mapper-locations: classpath:mapper/*.xml -mybatis: - mapper-locations: classpath:mapper/*.xml - configuration: - # 配置结果集属性为空时 是否映射返回结果 - call-setters-on-nulls: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 -#mybatis-plus: -# 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 - device-types: 1,4,101,12 - 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 +########################################################## +################## 所有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语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +casic: + config: + device-types: 1,4,101,12 + deptId: 1559096734123003906 + alarmDay: 3 \ No newline at end of file diff --git a/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml index 085ed49..da9a860 100644 --- a/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml +++ b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml @@ -47,7 +47,7 @@ FROM bus_well_info bwi LEFT JOIN alarm_records ar ON ar.WELL_CODE=bwi.WELL_CODE WHERE bwi.VALID='1' - AND bwi.road is not null + AND bwi.road is not null AND ar.UPTIME = ]]> TO_CHAR(#{beginTime},'yyyy-MM-dd HH24:mi:ss') @@ -85,7 +85,7 @@ - + SELECT count(bwi.WELL_CODE) AS count,bwi.road FROM bus_well_info bwi - LEFT JOIN bus_device_well bdw ON bdw.well_id=bwi.id - LEFT JOIN bus_device bd ON bdw.device_id=bd.id - LEFT JOIN alarm_records ar ON bd.devcode=ar.devcode + JOIN bus_device_well bdw ON bdw.well_id=bwi.id + JOIN bus_device bd ON bdw.device_id=bd.id + JOIN (SELECT DISTINCT(devcode) + from alarm_records) ar ON bd.devcode = ar.devcode WHERE bwi.valid='1' AND bdw.valid='1' + AND road is NOT NULL AND ar.UPTIME = ]]> TO_CHAR(#{beginTime},'yyyy-MM-dd HH24:mi:ss') @@ -126,19 +128,16 @@ AND ar.UPTIME TO_CHAR(#{endTime},'yyyy-MM-dd HH24:mi:ss') - GROUP BY bwi.rode - - order by COUNT(*) DESC - limitNum - + GROUP BY bwi.road - + SELECT count(bwi.WELL_CODE) AS count,bwi.road FROM bus_well_info bwi - LEFT JOIN bus_device_well bdw ON bdw.well_id=bwi.id - LEFT JOIN bus_device bd ON bdw.device_id=bd.id - WHERE bwi.valid='1' AND bdw.valid='1' + JOIN bus_device_well bdw ON bdw.well_id=bwi.id + JOIN bus_device bd ON bdw.device_id=bd.id + WHERE bwi.valid='1' AND bdw.valid='1' AND road is NOT NULL + GROUP BY bwi.road + + + + + + + \ No newline at end of file