diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..77fcf1a 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,30 +1,47 @@ server: - port: 8083 + port: 5906 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://36.133.189.112:3000/smartwell_sx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: Casic203 -jms: - pub-sub-domain: true + password: sxroot + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: # store-type: redis -# redis: -# host: 111.198.10.15 -# port: 11412 -# password: ew5T4K3#203lwh -# serializer: org.springframework.data.redis.serializer.StringRedisSerializer -# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + casic: - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: /**/** #flowable数据源和多数据源配置 db: init: enable: false + #图片下载本地地址 + file: + uploadPath: D:\tmp\ + commponentType: disk + logging: level.root: info level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file + level.org.springframework.web: info + +#后续配置根据实际部署deviceType表修改 +statistics: + deviceGroup: + #管网 + 1: ["8", "11"] + #窨井 + 2: ["1", "2", "3"] + #监控 +# 3: ["0"] + settledEnterprise: 100 \ No newline at end of file diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..77fcf1a 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,30 +1,47 @@ server: - port: 8083 + port: 5906 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://36.133.189.112:3000/smartwell_sx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: Casic203 -jms: - pub-sub-domain: true + password: sxroot + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: # store-type: redis -# redis: -# host: 111.198.10.15 -# port: 11412 -# password: ew5T4K3#203lwh -# serializer: org.springframework.data.redis.serializer.StringRedisSerializer -# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + casic: - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: /**/** #flowable数据源和多数据源配置 db: init: enable: false + #图片下载本地地址 + file: + uploadPath: D:\tmp\ + commponentType: disk + logging: level.root: info level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file + level.org.springframework.web: info + +#后续配置根据实际部署deviceType表修改 +statistics: + deviceGroup: + #管网 + 1: ["8", "11"] + #窨井 + 2: ["1", "2", "3"] + #监控 +# 3: ["0"] + settledEnterprise: 100 \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..fa91a4a 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -1,12 +1,11 @@ server: - port: 8085 -# context-path: /callcenter/api + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://111.198.10.15:11102/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203 + password: Casic203! initial-size: 2 min-idle: 1 jms: @@ -21,14 +20,20 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken - flowable: - datasource: - url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203 + nologin-urls: /**/** + file-upload-path: D:\java\boot\missiles-web-1.0.0-SNAPSHOT\upload +# flowable: +# datasource: +# url: jdbc:mysql://119.254.103.80:3000/guns_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false +# username: root +# password: root +smartcity: + config: + export-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\export\ + image-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\image\ + config-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..77fcf1a 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,30 +1,47 @@ server: - port: 8083 + port: 5906 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://36.133.189.112:3000/smartwell_sx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: Casic203 -jms: - pub-sub-domain: true + password: sxroot + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: # store-type: redis -# redis: -# host: 111.198.10.15 -# port: 11412 -# password: ew5T4K3#203lwh -# serializer: org.springframework.data.redis.serializer.StringRedisSerializer -# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + casic: - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: /**/** #flowable数据源和多数据源配置 db: init: enable: false + #图片下载本地地址 + file: + uploadPath: D:\tmp\ + commponentType: disk + logging: level.root: info level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file + level.org.springframework.web: info + +#后续配置根据实际部署deviceType表修改 +statistics: + deviceGroup: + #管网 + 1: ["8", "11"] + #窨井 + 2: ["1", "2", "3"] + #监控 +# 3: ["0"] + settledEnterprise: 100 \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..fa91a4a 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -1,12 +1,11 @@ server: - port: 8085 -# context-path: /callcenter/api + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://111.198.10.15:11102/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203 + password: Casic203! initial-size: 2 min-idle: 1 jms: @@ -21,14 +20,20 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken - flowable: - datasource: - url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203 + nologin-urls: /**/** + file-upload-path: D:\java\boot\missiles-web-1.0.0-SNAPSHOT\upload +# flowable: +# datasource: +# url: jdbc:mysql://119.254.103.80:3000/guns_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false +# username: root +# password: root +smartcity: + config: + export-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\export\ + image-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\image\ + config-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml index 54d7252..d90d4c2 100644 --- a/casic-web/src/main/resources/config/application-test.yml +++ b/casic-web/src/main/resources/config/application-test.yml @@ -1,30 +1,35 @@ server: - port: 11307 + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://119.254.103.80:3000/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203! + password: root initial-size: 2 min-idle: 1 jms: pub-sub-domain: true -# session: -# store-type: redis + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /**/** + file-upload-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\upload +smartcity: + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ + config-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info + diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..77fcf1a 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,30 +1,47 @@ server: - port: 8083 + port: 5906 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://36.133.189.112:3000/smartwell_sx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: Casic203 -jms: - pub-sub-domain: true + password: sxroot + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: # store-type: redis -# redis: -# host: 111.198.10.15 -# port: 11412 -# password: ew5T4K3#203lwh -# serializer: org.springframework.data.redis.serializer.StringRedisSerializer -# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + casic: - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: /**/** #flowable数据源和多数据源配置 db: init: enable: false + #图片下载本地地址 + file: + uploadPath: D:\tmp\ + commponentType: disk + logging: level.root: info level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file + level.org.springframework.web: info + +#后续配置根据实际部署deviceType表修改 +statistics: + deviceGroup: + #管网 + 1: ["8", "11"] + #窨井 + 2: ["1", "2", "3"] + #监控 +# 3: ["0"] + settledEnterprise: 100 \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..fa91a4a 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -1,12 +1,11 @@ server: - port: 8085 -# context-path: /callcenter/api + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://111.198.10.15:11102/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203 + password: Casic203! initial-size: 2 min-idle: 1 jms: @@ -21,14 +20,20 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken - flowable: - datasource: - url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203 + nologin-urls: /**/** + file-upload-path: D:\java\boot\missiles-web-1.0.0-SNAPSHOT\upload +# flowable: +# datasource: +# url: jdbc:mysql://119.254.103.80:3000/guns_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false +# username: root +# password: root +smartcity: + config: + export-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\export\ + image-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\image\ + config-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml index 54d7252..d90d4c2 100644 --- a/casic-web/src/main/resources/config/application-test.yml +++ b/casic-web/src/main/resources/config/application-test.yml @@ -1,30 +1,35 @@ server: - port: 11307 + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://119.254.103.80:3000/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203! + password: root initial-size: 2 min-idle: 1 jms: pub-sub-domain: true -# session: -# store-type: redis + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /**/** + file-upload-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\upload +smartcity: + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ + config-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info + diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index 200ca46..9dc8566 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: @activatedProperties@ + active: dev servlet: multipart: max-file-size: 50MB @@ -11,6 +11,15 @@ #mybatis-plus: # sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector ################### mybatis-plus配置 ################### +mybatis-plus: + global-config: + #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" + field-strategy: 1 + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + map-underscore-to-camel-case: true ################### guns配置 ################### casic: swagger-open: false #是否开启swagger (true/false) @@ -19,8 +28,9 @@ spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: /user/login,/kaptcha,/config/baseConfig - - 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 + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + file: + uploadPath: D:\tmp\ +# 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 diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 913a287..1dc0d62 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -35,6 +35,12 @@ ${boot.version} provided + + com.casic + casic-export-support + 2.0.0.alpha + provided + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java new file mode 100644 index 0000000..ccd000a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/StatisticsConfig.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 9:51 + */ +@Data +@Component +@Configuration +@ConfigurationProperties("statistics") +public class StatisticsConfig { + private Map> deviceGroup; + private Integer settledEnterprise; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java new file mode 100644 index 0000000..5346e72 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/9 17:59 + */ +@Controller +@RequestMapping("/device") +public class DeviceController { + @Autowired + private DeviceAlarmService deviceAlarmService; + + /** + * 报警列表(ALARM_TYPE=1,STATUS=1) + * 根据alarm_now_view视图更改,关联设备类型表,返回设备类型,条件增加ALARM_TYPE=1,STATUS=1 + */ + @GetMapping("/alarmList") + @ResponseBody + public Object alarmNow() { + // 查询当前有效的报警记录(status=1) + List alarmList = deviceAlarmService.getAlarmRecords(); + SuccessResponseData successResult = new SuccessResponseData(); + successResult.setData(alarmList); + successResult.setMessage("success"); + return successResult; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java new file mode 100644 index 0000000..39e397f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/MonitorController.java @@ -0,0 +1,33 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.service.MonitorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/25 10:55 + */ +@Slf4j +@RestController +@RequestMapping("/monitor") +public class MonitorController { + @Autowired + private MonitorService monitorService; + + /** + * 监控列表 + */ + @GetMapping("/list") + @ResponseBody + public Object list() { + return monitorService.getMonitorList(); + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java new file mode 100644 index 0000000..a1b58ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -0,0 +1,183 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.enums.ModularDictConst; +import com.casic.missiles.modular.system.enums.OperateTypeEnum; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 三溪小镇数据统计 + * @Author: wangpeng + * @Date: 2022/10/20 13:56 + */ +@Slf4j +@RestController +@RequestMapping("/statics") +public class StaticsController extends ExportController { + @Autowired + private IStatisticsService statisticsService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private FacilitiesService facilitiesService; + + @Resource + private AbstractDictService dictService; + + /** + * 1、基础设施情况 + * 基础设施的增删查改,设施名,设施数量 + */ + @GetMapping("/facilitiesStaticsByType") + @ResponseBody + public Object facilitiesStatistics() { + List> res = facilitiesService.facilitiesStaticsByType(); + return ResponseData.success(res); + } + + /** + * 设施增删改 + */ + @PostMapping("/facilities/{operation}") + @ResponseBody + public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BusFacilitiesInfo facilitiesInfo) { + if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){ + return facilitiesService.addFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){ + return facilitiesService.updateFacilitiesInfo(facilitiesInfo); + }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){ + return facilitiesService.deleteFacilitiesInfo(facilitiesInfo); + } + return null; + } + + /** + * 2、根据设备类型统计设备数量(总、各设备正常/异常数量统计) + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping("/deviceStaticsByType") + @ResponseBody + public Object deviceStaticsByType() { + List> res = statisticsService.deviceStaticsByType(); + return ResponseData.success(res); + } + + /** + * 3、异常设备状态列表 + * 目前使用在线离线,后续看是否要改成该设备报警才算异常 + */ + @GetMapping(value = "/deviceListPage") + @ResponseBody + public Object list(String keywords, String deviceType, String deptid, String beginTime, String endTime, String isOnline) { + Page page = PageFactory.defaultPage(); +// DataScope dataScope = permissionService.getAuthService().getLoginUserDataScope(); + List list = deviceService.selectDataScopePage(/*dataScope,*/ page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + list.forEach(deviceDto -> { + deviceDto.setBfztName(dictService.getDictNameByCode(ModularDictConst.BFZT, deviceDto.getBfzt())); + deviceDto.setOnlineStateName(dictService.getDictNameByCode(ModularDictConst.ONLINESTATUS, deviceDto.getOnlineState())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + /** + * 3-1 设备经纬度查询(APP端) + */ + @GetMapping(value = "/devicePosition") + @ResponseBody + public Object devicePosition(String deviceId) { + return statisticsService.getDevicePosition(deviceId); + } + + /** + * 4、管网报警统计 + * 总报警数、5种设备各设备报警数 + */ + @GetMapping("/alarmCount") + @ResponseBody + public Object alarmCount() { + return statisticsService.getAlarmCountGroupByType(); + } + + /** + * 5、管网运行状态 + * 监控、井、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/groupDevice") + @ResponseBody + public Object groupDevice() { + return statisticsService.getGroupDevice(); + } + /** + * 5、管网运行状态 + * 监控、管网分组的设备数,5种设备的各报警类型报警数 + * 井:液位、井盖、有害气体,管网:噪声、消防栓 + */ + @GetMapping("/runningState") + @ResponseBody + public Object runningState() { + return statisticsService.getRunningState(); + } + + /** + * 6、管网健康状态 + * 横坐标:近两周每天日期 + * 纵坐标:管网健康状态(管网分组设备得分*权重+井分组设备得分*权重),权重可配置 + * 得分:报警一次扣一分,扣分可配置 + */ + @GetMapping("/healthStatus") + @ResponseBody + public Object healthStatus(String beginTime, String endTime, String alarmType) { + return statisticsService.getHealthStatus(beginTime, endTime, alarmType); + } + + /** + * 入驻企业数量,APP端使用 + */ + @GetMapping("/settledEnterprise") + @ResponseBody + public Object settledEnterprise() { + return statisticsService.getSettledEnterprise(); + } + + /** + * 近两周各类设备报警次数统计 + */ + @GetMapping("/alarmsByDate") + @ResponseBody + public Object alarmsByDay(String beginTime, String endTime, String alarmType) { + return statisticsService.getAlarmCountByType(beginTime, endTime, alarmType); + } + + /** + * 获取设备列表 + */ + @RequestMapping(value = "/deviceList") + @ResponseBody + public Object deviceList() { + List wellList = new ArrayList<>(); + wellList = deviceService.getDeviceList(); + return ResponseData.success(wellList); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java new file mode 100644 index 0000000..21b6366 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.dto.AlarmNowView; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:05 + */ +public interface AlarmMapper extends BaseMapper { + Map countAlarmsByDate(@Param("date") String date); + + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java new file mode 100644 index 0000000..76af4f7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * 设备表 Mapper 接口 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface DeviceMapper extends BaseMapper { + + List selectDataScopePage(/*@Param("scope") DataScope dataScope,*/ @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline); + + List getDeviceList(); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java new file mode 100644 index 0000000..93f4414 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/FacilitiesMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:30 + */ +public interface FacilitiesMapper extends BaseMapper { + List> SelectFacilitiesStaticsByType(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java new file mode 100644 index 0000000..1a2f97c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/StatisticMapper.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.BusWellInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:04 + */ +@Mapper +public interface StatisticMapper { + List> getDeviceStaticsByType(); + + List> getAlarmCountByTypeAndDate(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + List selectDeviceType(); + + List selectDeviceTypeId(); + + List> getAlarmCountGroupByType(); + + List> getAlarmCountGroupByAlarmType(); + + List> getDeviceCountByType(); + + List> getAlarmCountByTypeAndDate2(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("alarmType") String alarmType); + + BusWellInfo getDevicePosition(@Param("deviceId") String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml new file mode 100644 index 0000000..6d4d297 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -0,0 +1,38 @@ + + + + + + + wellId AS wellId, deviceId AS deviceId, devcode as devcode, wellCode AS wellCode, alarmId AS alarmId, deptid AS deptid,wellType AS wellType, + alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate, + position AS position, coordinateX AS coordinateX, coordinateY AS coordinateY, + lngBaidu AS lngBaidu, latBaidu AS latBaidu, lngGaode AS lngGaode, latGaode AS latGaode + + + + deviceId AS deviceId, devcode as devcode, alarmId AS alarmId, alarmType AS alarmType, alarmValue AS alarmValue, alarmContent AS alarmContent, alarmTimeDate AS alarmTimeDate + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml new file mode 100644 index 0000000..659e337 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,wellId, + + + + AS "INSTALLDATE" + + + + DATE_FORMAT(${paramDate},'%Y-%m-%d') + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + CONCAT('%',#{keywords},'%') + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i') + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml new file mode 100644 index 0000000..0ab84cf --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/FacilitiesMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml new file mode 100644 index 0000000..d804219 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/StatisticMapper.xml @@ -0,0 +1,163 @@ + + + + + str_to_date(${paramStr},'%Y-%m-%d %H:%i:%s') + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java new file mode 100644 index 0000000..6f1921b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/AlarmNowView.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.system.dto; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 15:07 + */ +public class AlarmNowView { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java new file mode 100644 index 0000000..3a18eea --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceAlarmDto.java @@ -0,0 +1,103 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:18 + */ +@Data +public class DeviceAlarmDto { + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + private Date alarmTimeDate; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + + private String deviceType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java new file mode 100644 index 0000000..442cdab --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDataDto.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +@Data +public class DeviceDataDto implements Cloneable{ + private String typeName; + /** + * 地图总览时使用 + */ + private String value = ""; + /** + * 数据更新时间(设备上报时间) + */ + private String logtime = ""; + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java new file mode 100644 index 0000000..3241df7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDto.java @@ -0,0 +1,62 @@ +package com.casic.missiles.modular.system.dto; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * 闸井查询 + */ +@Data +public class DeviceDto extends Model { + + /** + * id : 1 + * wellCode : N51F131 + * devcode : 41201802450 + * deviceName : 井盖35336443 + * deviceType : 5 + * deviceTypeName : 井盖状态监测仪 + * watchType : 井盖开启 + * communication : 3G/4G + * modelId : 5 + * modelName : BIRMM-WELL100 + * deptid : 24 + * deptName : 一分公司 + * installDate : 2018-12-27 + * position : 宋郎路 + * concenId : 5 + * concenCode : 468764135 + * onlineState : 0 + * onlineStateName : 在线 + * valid : 1 + * ts : 2018-12-27 00:00:00 + */ + + private Long id;//主键 + @Length(max = 15, min = 12) + private String wellCode; + private String devcode; + private String deviceName; + private Long deviceType;//设备类型 + private String deviceTypeName;//设备类型名称 + private String watchType; + private String communication; + private Long modelId; + private String modelName; + private String deptid; + private String deptName; + private String installDate; + private String position; + private Long concenId; + private String concenCode; + private String onlineState; + private String onlineStateName; + private String valid; + private String ts; + private String bfzt; + private String bfztName; + private String wellId; + private String installHeight; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java new file mode 100644 index 0000000..e71171f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/DeviceInfoDto.java @@ -0,0 +1,30 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import java.util.List; + +/** + * + */ +@Data +public class DeviceInfoDto { + private Long id; + private String devcode; + private String deviceName; + private String deviceType; + private String deviceTypeName; + private Long deptid; + private String deptName; + private String wellCode; + private String onlineState; + private String coordinateX; + private String coordinateY; + private String latBaidu; + private String lngBaidu; + private String latGaode; + private String lngGaode; + private String position; + private List realtimeData; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java new file mode 100644 index 0000000..f675280 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/ModularDictConst.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.enums; + + +public class ModularDictConst { + /** + * 布防状态字典类型 + */ + public static final String BFZT = "bfzt"; + + /** + * 在线状态字典类型 + */ + public static final String ONLINESTATUS = "onlineStatus"; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java new file mode 100644 index 0000000..db45449 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/OperateTypeEnum.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.enums; + +/** + * @Description: 增删改枚举类 + * @Author: wangpeng + * @Date: 2022/7/18 14:40 + */ +public enum OperateTypeEnum { + ADD("add"), + UPDATE("update"), + DELETE("delete"), + BATCHDELETE("batchDelete"); + + private String operateType; + + OperateTypeEnum(String operateType) { + this.operateType = operateType; + } + + public String getOperateType(){ + return this.operateType; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java new file mode 100644 index 0000000..105550e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusFacilitiesInfo.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:18 + */ +@Data +@TableName("bus_facilities_info") +public class BusFacilitiesInfo { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设施编号 + */ + private String facilitiesCode; + /** + * 设施名称 + */ + private String facilitiesName; + /** + * 设施数量 + */ + private String facilitiesQuantity; + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java new file mode 100644 index 0000000..dafab7e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusWellInfo.java @@ -0,0 +1,185 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; +import javax.validation.constraints.Digits; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @NotEmpty(message = "闸井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @NotEmpty(message = "闸井名称不能为空") + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + @Digits(integer = 2, fraction = 2, message = "井深必须为正数且最多两位小数") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + /** + * 第三方坐标系X + */ + @TableField("COORDINATE_X") + private String coordinateX; + /** + * 第三方坐标Y + */ + @TableField("COORDINATE_Y") + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + /** + * 位置 + */ + @TableField("POSITION") + private String position; + /** + * 部门编号 + */ + @TableField("DEPTID") + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + @TableField("WELL_TYPE") + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + @TableField("RESPONSIBLE_DEPT") + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java new file mode 100644 index 0000000..21896d7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/Device.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Pattern; +import java.util.Date; + +/** + *

+ * 设备表 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@TableName("bus_device") +@Data +public class Device extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + /** + * 设备编号 + */ + @Pattern(regexp = "[A-Za-z0-9]{7,20}",message = "设备编号必须为7-20位字母或数字组合") + @TableField("DEVCODE") + private String devcode; + /** + * 设备名称 + */ + @TableField("DEVICE_NAME") + private String deviceName; + /** + * 在线状态 + */ + @TableField("ONLINE_STATE") + private String onlineState; + /** + * 设备类型 + */ + @TableField("DEVICE_TYPE") + private Long deviceType; + + /** + * 是否有效 + */ + @TableLogic(value = "1",delval = "0") + @TableField("VALID") + private String valid; + /** + * 安装时间 + */ + @TableField("INSTALL_DATE") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date installDate; + /** + * 最新状态时间 + */ + @TableField("LOGTIME") + private Date logtime; + /** + * 设备型号(关联型号表) + */ + @TableField("VERSION") + private Long modelId; + @TableField(exist = false) + private String modelName; + @TableField(exist = false) + private String deviceTypeName; + @TableField(exist = false) + private String wellCode; + @TableField(exist = false) + private String concenCode; + //闸井ID + @TableField(exist = false) + private Long wellId; + //集中器ID + @TableField(exist = false) + private Long concenId; + + @TableField(exist = false) + private String installDateFmt; + + @TableField("INSTALL_HEIGHT") + private Double installHeight; + + @Override + public String toString() { + return "Device{" + + "id=" + id + + ", devcode=" + devcode + + ", deviceName=" + deviceName + + ", onlineState=" + onlineState + + ", deviceType=" + deviceType + + ", valid=" + valid + + ", installDate=" + installDate + + ", logtime=" + logtime + + "}"; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java new file mode 100644 index 0000000..fa8442d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/DeviceAlarmService.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +public interface DeviceAlarmService { + List getAlarmRecords(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java new file mode 100644 index 0000000..f019b03 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/FacilitiesService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:28 + */ +public interface FacilitiesService { + List> facilitiesStaticsByType(); + + Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); + + Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java new file mode 100644 index 0000000..78562c4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; + +import java.util.List; + +/** + *

+ * 设备表 服务类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +public interface IDeviceService extends IService { + + /** + * 根据条件分页查询设备列表 + * + * @param page 分页参数 + * @param deviceType 设备类型 + * @param deptid 组织ID + * @param beginTime 设备安装开始时间 + * @param endTime 设备安装结束时间 + * @return 设备列表 + */ + List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline); + + /** + * 获取设备列表 + * @return 设备列表 + */ + List getDeviceList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java new file mode 100644 index 0000000..91f9600 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IStatisticsService.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 13:59 + */ +public interface IStatisticsService { + List> deviceStaticsByType(); + + Object getAlarmCountByType(String beginTime, String endTime, String alarmType); + + Object getAlarmCountGroupByType(); + + Object getRunningState(); + + Object getGroupDevice(); + + Object getHealthStatus(String beginTime, String endTime, String alarmType); + + Object getSettledEnterprise(); + + Object getDevicePosition(String deviceId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java new file mode 100644 index 0000000..b55a7a8 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/MonitorService.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.system.service; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +public interface MonitorService { + Object getMonitorList(); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java new file mode 100644 index 0000000..2cfa244 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceAlarmServiceImpl.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.modular.system.dao.AlarmMapper; +import com.casic.missiles.modular.system.dto.DeviceAlarmDto; +import com.casic.missiles.modular.system.service.DeviceAlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/11/10 11:10 + */ +@Service +public class DeviceAlarmServiceImpl implements DeviceAlarmService { + @Autowired + private AlarmMapper alarmMapper; + + @Override + public List getAlarmRecords() { + List alarmList = alarmMapper.getAlarmRecords(); +// for (DeviceAlarmDto alarmNowView : alarmList) { +// alarmNowView.setWellTypeName(dictService.getDictNameByCode("sluicewellType", alarmNowView.getWellType())); +// } + return alarmList; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..3d09171 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java @@ -0,0 +1,34 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.dto.DeviceInfoDto; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IDeviceService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 设备表 服务实现类 + *

+ * + * @author lwh123 + * @since 2019-05-23 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements IDeviceService { + + @Override + public List selectDataScopePage(/*DataScope dataScope, */Page page, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline) { + return this.baseMapper.selectDataScopePage(/*dataScope, */page, deviceType, deptid, beginTime, endTime, keywords, isOnline); + } + + @Override + public List getDeviceList() { + return this.baseMapper.getDeviceList(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java new file mode 100644 index 0000000..fdcadc1 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/FacilitiesServiceImpl.java @@ -0,0 +1,56 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dao.FacilitiesMapper; +import com.casic.missiles.modular.system.model.BusFacilitiesInfo; +import com.casic.missiles.modular.system.service.FacilitiesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/24 13:29 + */ +@Service +public class FacilitiesServiceImpl extends ServiceImpl implements FacilitiesService { + @Autowired + private FacilitiesMapper facilitiesMapper; + + @Override + public List> facilitiesStaticsByType() { + List> list = facilitiesMapper.SelectFacilitiesStaticsByType(); + return list; + } + + @Override + public Object addFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int insert = facilitiesMapper.insert(facilitiesInfo); + if(insert > 0){ + return ResponseData.success(); + } + return ResponseData.error("新增设施失败"); + } + + @Override + public Object updateFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int update = facilitiesMapper.updateById(facilitiesInfo); + if(update > 0){ + return ResponseData.success(); + } + return ResponseData.error("更新设施失败"); + } + + @Override + public Object deleteFacilitiesInfo(BusFacilitiesInfo facilitiesInfo) { + int delete = facilitiesMapper.deleteById(facilitiesInfo.getId()); + if(delete > 0){ + return ResponseData.success(); + } + return ResponseData.error("删除设施失败"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..224ef17 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/MonitorServiceImpl.java @@ -0,0 +1,101 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.service.MonitorService; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/28 17:23 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + @Override + public Object getMonitorList() { + return ResponseData.success(list); + } + + private final static Map map1 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map2 = new HashMap(){{ + put("code", "LDL_QJ_001"); + put("name", "枪机"); + put("road", "沥东路"); + put("longitude", "113.491297"); + put("latitude", "22.292757"); + }}; + private final static Map map3 = new HashMap(){{ + put("code", "LDL_XG_002"); + put("name", "星光级球机"); + put("road", "沥东路"); + put("longitude", "113.492849"); + put("latitude", "22.294372"); + }};private final static Map map4 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "沥西路"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map5 = new HashMap(){{ + put("code", "LXL_XG_002"); + put("name", "星光级球机"); + put("road", "沥西路"); + put("longitude", "113.494911"); + put("latitude", "22.293301"); + }}; + private final static Map map6 = new HashMap(){{ + put("code", "CFL_QJ_001"); + put("name", "枪机"); + put("road", "常福璐"); + put("longitude", "113.496042"); + put("latitude", "22.294514"); + }}; + private final static Map map7 = new HashMap(){{ + put("code", "SBJ_QJ_001"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.494456"); + put("latitude", "22.295618"); + }}; + private final static Map map8 = new HashMap(){{ + put("code", "SBJ_QJ_002"); + put("name", "枪机"); + put("road", "苏北街"); + put("longitude", "113.49568"); + put("latitude", "22.291525"); + }}; + private final static Map map9 = new HashMap(){{ + put("code", "SBJ_XG_001"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.494197"); + put("latitude", "22.295246"); + }}; + private final static Map map10 = new HashMap(){{ + put("code", "SBJ_XG_002"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.496668"); + put("latitude", "22.29094"); + }}; + private final static Map map11 = new HashMap(){{ + put("code", "SBJ_XG_003"); + put("name", "星光级球机"); + put("road", "苏北街"); + put("longitude", "113.498112"); + put("latitude", "22.289781"); + }}; + + private final static List> list = Arrays.asList(map1, map2, map3, map4, map5, map6, map7, map8, map9, map10, map11); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java new file mode 100644 index 0000000..9b0e733 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/StatisticServiceImpl.java @@ -0,0 +1,303 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.config.StatisticsConfig; +import com.casic.missiles.modular.system.dao.StatisticMapper; +import com.casic.missiles.modular.system.model.BusWellInfo; +import com.casic.missiles.modular.system.service.IStatisticsService; +import com.casic.missiles.modular.system.util.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/10/20 14:00 + */ +@Slf4j +@Service +public class StatisticServiceImpl implements IStatisticsService { + @Autowired + private StatisticMapper statisticMapper; + @Autowired + private StatisticsConfig statisticsConfig; + + @Override + public List> deviceStaticsByType() { + List> mapList = statisticMapper.getDeviceStaticsByType(); + List> resultList = new ArrayList<>(); + //查询sql结果情况:在线离线数量都有值、没有在线离线状态 + mapList.forEach(map -> { + //使用onLineState判断 + String deviceType = String.valueOf(map.get("deviceType")); + if ("1".equals(map.get("onLineState"))) { + map.put("onLineState", map.get("deviceCount")); + } + if ("0".equals(map.get("onLineState"))) { + map.remove("onLineState"); + map.put("offLineState", map.get("deviceCount")); + } + + map.remove("deviceCount"); + //map1仅用于判断map是否增加过resultList + Map map1 = new HashMap<>(); + + for (Map resultMap : resultList) { + //之前加过在线或离线的该设备的map + if (resultMap.get("deviceType").equals(deviceType)) { +// String type = String.valueOf(resultMap.get(deviceType)); + if (Objects.isNull(resultMap.get("onLineState"))) { + map1.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + resultMap.put("onLineState", Objects.isNull(map.get("onLineState")) ? 0 : map.get("onLineState")); + } + if (Objects.isNull(resultMap.get("offLineState"))) { + map1.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + resultMap.put("offLineState", Objects.isNull(map.get("offLineState")) ? 0 : map.get("offLineState")); + } + } + } + if (CollectionUtils.isEmpty(map1)) { + resultList.add(map); + } + }); + for (Map map : resultList) { + if (Objects.isNull(map.get("onLineState"))) { + map.put("onLineState", "0"); + } + if (Objects.isNull(map.get("offLineState"))) { + map.put("offLineState", "0"); + } + } + + return resultList; + } + + @Override + public Object getAlarmCountByType(String beginTime, String endTime, String alarmType) { + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> resultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceType(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceType")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getAlarmCountGroupByType() { + List> alarmWellList = statisticMapper.getAlarmCountGroupByType(); + Map preMap = new HashMap<>(); + List> resultList = new ArrayList<>(); + Long totalCount = 0l; + for (Map map : alarmWellList) { + Long alarmCount = (Long) map.get("alarmCount"); + totalCount += alarmCount; + //过渡使用 + preMap.put(String.valueOf(map.get("deviceType")), alarmCount); + resultList.add(map); + } + + List deviceTypeList = statisticMapper.selectDeviceType(); + if (alarmWellList.size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(preMap.get(type))) { + Map map = new HashMap<>(); + map.put("deviceType", type); + map.put("alarmCount", "0"); + resultList.add(map); + } + }); + } + Map map = new HashMap<>(); + map.put("deviceType", "总报警数"); + map.put("alarmCount", totalCount); + resultList.add(map); + return ResponseData.success(resultList); + } + + @Override + public Object getRunningState() { + //按设备类型、报警类型分组 + List> alarmWellList = statisticMapper.getAlarmCountGroupByAlarmType(); + //设备类型 + List deviceTypeList = statisticMapper.selectDeviceType(); + + List> resultList = new ArrayList<>(); + for (Map map : alarmWellList) { + map.put(String.valueOf(map.get("alarmType")), map.get("alarmCount")); + map.remove("alarmCount"); + map.remove("alarmType"); + } + + alarmWellList.forEach(alarm -> { + if(CollectionUtils.isEmpty(resultList)){ + resultList.add(alarm); + } + int flag = 0; + for (Map result : resultList) { + if(alarm.get("deviceType").equals(result.get("deviceType"))){ + result.putAll(alarm); + flag += 1; + } + //补全告警类型数据(1数据异常、2设备异常) + if(Objects.isNull(result.get("1"))){ + result.put("1", "0"); + } + if(Objects.isNull(result.get("2"))){ + result.put("2", "0"); + } + } + if(flag == 0){ + resultList.add(alarm); + } + }); + + //补全所有设备类型及数据 + List preList = new ArrayList<>(); + resultList.forEach(result -> { + String deviceType = String.valueOf(result.get("deviceType")); + preList.add(deviceType); + }); + deviceTypeList.forEach(type -> { + if(!preList.contains(type)){ + HashMap preMap = new HashMap<>(); + preMap.put("deviceType", type); + preMap.put("1", "0"); + preMap.put("2", "0"); + resultList.add(preMap); + } + }); + return ResponseData.success(resultList); + } + + @Override + public Object getGroupDevice() { + List> mapList = statisticMapper.getDeviceCountByType(); + //按配置将设备分组,并计算分组数量 + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + + List> resultList = new ArrayList<>(); + deviceGroup.keySet().forEach(key -> { + Map preMap = new HashMap<>(); + List list = deviceGroup.get(key); + mapList.forEach(map -> { + Object deviceTypeId = map.get("deviceTypeId"); + if(list.contains(String.valueOf(deviceTypeId))){ + Long deviceCount = (Long) map.get("deviceCount"); + if(!Objects.isNull(preMap.get(key))){ + preMap.put(key, (Long)preMap.get(key) + deviceCount); + }else { + preMap.put(key, deviceCount); + } + } + }); + resultList.add(preMap); + }); + + return ResponseData.success(resultList); + } + + @Override + public Object getHealthStatus(String beginTime, String endTime, String alarmType) { + if(StringUtils.isEmpty(endTime)){ + DateTime yesterday = DateUtil.yesterday(); + endTime = DateUtil.format(yesterday, "yyyy-MM-dd HH:mm:ss"); + } + if(StringUtils.isEmpty(beginTime)){ + beginTime = DateUtils.getCurrentBeforeNum(-14); + } + //日期内所有日期列表 + List betweenDays = DateUtils.getBetweenDays(beginTime, endTime); + + //查询按类型、日期分组的报警数 + List> preResultList = new ArrayList<>(); + List> alarmWellList = statisticMapper.getAlarmCountByTypeAndDate2(beginTime, endTime, alarmType); + + List deviceTypeList = statisticMapper.selectDeviceTypeId(); + + //遍历构造结果 + betweenDays.forEach(day -> { + Map map = new HashMap<>(); + map.put("date", day); + alarmWellList.forEach(alarmMap -> { + String alarmTime = String.valueOf(alarmMap.get("alarmTime")); + if (day.equals(alarmTime)) { + map.put(String.valueOf(alarmMap.get("deviceTypeId")), alarmMap.get("alarmCount")); + } + }); + if (map.keySet().size() < deviceTypeList.size()) { + deviceTypeList.forEach(type -> { + if (Objects.isNull(map.get(type))) { + map.put(type, "0"); + } + }); + } + preResultList.add(map); + }); + + Map> deviceGroup = statisticsConfig.getDeviceGroup(); + List> resultList = new ArrayList<>(); + preResultList.forEach(result -> { + Set keySet = result.keySet(); + //分组、计算得分、附加权重 + Map map = new HashMap<>(); + map.put("date", result.get("date")); + deviceGroup.keySet().forEach(key -> { + Long score = 0l; + List list = deviceGroup.get(key); + for (String k : keySet) { + if(list.contains(k)){ + score += Long.valueOf(String.valueOf(result.get(k))); + } + } + map.put(key, 100 - score); + }); + resultList.add(map); + }); + return ResponseData.success(resultList); + } + + @Override + public Object getSettledEnterprise() { + Integer settledEnterprise = statisticsConfig.getSettledEnterprise(); + Map resultMap = new HashMap<>(); + resultMap.put("入驻企业", settledEnterprise); + return ResponseData.success(resultMap); + } + + @Override + public Object getDevicePosition(String deviceId) { + BusWellInfo busWellInfo = statisticMapper.getDevicePosition(deviceId); + return ResponseData.success(busWellInfo); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java new file mode 100644 index 0000000..e499000 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/DateUtils.java @@ -0,0 +1,264 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.date.DateUtil; +import javafx.util.Pair; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddhhmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + + + /** + * 获取当年的第一天 + * + * @return + */ + public static Date getCurrYearFirst() { + Calendar currCal = Calendar.getInstance(); + int currentYear = currCal.get(Calendar.YEAR); + return getYearFirst(currentYear); + } + + + /** + * 获取某年第一天日期 + * + * @param year 年份 + * @return Date + */ + public static Date getYearFirst(int year) { + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + Date currYearFirst = calendar.getTime(); + return currYearFirst; + } + + /** + * 最近7日(不包括今日) + */ + public static Pair getLastSevenDays() { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, -7); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 最近n日(不包括今日) + */ + public static Pair getLastNDays(int n) { + + Calendar calendar = Calendar.getInstance(); + String endDate = sdf4.format(calendar.getTime()); + + calendar.add(Calendar.DATE, n * -1); + String beginDate = sdf4.format(calendar.getTime()); + + return new Pair<>(beginDate, endDate); + } + + /** + * 日期时间加n天 + */ + public static String addDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf4.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf4.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 日期加n天 + */ + public static String addNDays(String date, int n) { + + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf_day.parse(date)); + calendar.add(Calendar.DATE, n); + return sdf_day.format(calendar.getTime()); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 昨日 + */ + public static String getYesterday() { + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -2); + return sdf_day.format(calendar.getTime()); + } + + /** + * 包括传入的首尾日期 + */ + public static List getBetweenDays(String startTime, String endTime) { + if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { + return null; + } + //定义转换格式 + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date start = null; + Date end = null; + try { + start = df.parse(startTime); + end = df.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + if (Objects.isNull(start) || Objects.isNull(end)) { + return null; + } + List result = new ArrayList<>(); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + result.add(sdf.format(start)); + while (tempStart.before(tempEnd)) { + result.add(sdf.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + result.add(endTime.substring(0, endTime.indexOf(" "))); + return result; + } + + public static List getCurrentDateWeekList() { + List list = new ArrayList<>(); + //获取当前日期前30天的日期 + Date now = new Date(); + Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -30); + //获取30天前对应的当前年的第几周 + int startWeek = DateUtil.weekOfYear(startDate); + int endWeek = DateUtil.weekOfYear(now); + int year = DateUtil.thisYear(); + for (int i = startWeek; i < endWeek + 1; i++) { + list.add("" + year + "-" + i); + } + return list; + } + + public static List getCurrentDateHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + list.add(today + " 0" + i); + } else { + list.add(today + " " + i); + } + } + return list; + } + + public static List getCurrentDateMonthList() { + List list = new ArrayList<>(); + int year = DateUtil.thisYear(); + for (int i = 1; i < 13; i++) { + if (i < 10) { + list.add("" + year + "-0" + i); + } else { + list.add("" + year + "-" + i); + } + } + return list; + } + + public static List getCurrentDateDayList() { + List list = new ArrayList<>(); + //获取当前日期前7天的日期 + Date now = new Date(); +// Date startDate = org.apache.commons.lang3.time.DateUtils.addDays(now, -7); +// String s = DateUtil.formatDate(startDate); +// list.add(s); + for (int i = 7; i > 0; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + /** + * 30天前的7天日期 + */ + public static List getCurrentDateDayBeforeMonthList() { + List list = new ArrayList<>(); + Date now = new Date(); + for (int i = 36; i > 29; i--) { + Date date = org.apache.commons.lang3.time.DateUtils.addDays(now, -i); + String s = DateUtil.formatDate(date); + list.add(s); + } + return list; + } + + public static List getCurrentDatePeakHourList() { + List list = new ArrayList<>(); + String today = DateUtil.today(); + list.add(today + " 07"); + list.add(today + " 08"); + list.add(today + " 09"); + list.add(today + " 17"); + list.add(today + " 18"); + list.add(today + " 19"); + return list; + } + + public static List getCurrentDateWorkHourList() { + List list = new ArrayList<>(); + int hour = DateUtil.thisHour(true); + String today = DateUtil.today(); + String substring = today.substring(5); + for (int i = 6; i < hour; i++) { + if (i < 10) { + list.add(substring + " 0" + i + ":00"); + } else { + list.add(substring + " " + i + ":00"); + } + } + return list; + } + + public static String getCurrentBeforeNum(int num){ + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + cal.add(Calendar.DATE, num); + String format = DateUtil.format(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + return format; + } + + public static void main(String[] args) { + List betweenDays = getBetweenDays("2022-10-10", "2022-10-17"); + System.out.println(betweenDays); + + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..a77e8fc 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -79,6 +79,11 @@ ${admin.version} + com.casic + casic-export-support + ${extension.version} + + mysql mysql-connector-java ${mysql.driver.version} diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh index c00b1ef..e2fb627 100644 --- a/casic-web/src/main/build/bin/start.sh +++ b/casic-web/src/main/build/bin/start.sh @@ -1,2 +1,2 @@ -java -jar ./lib/${project.build.finalName}.jar +nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..77fcf1a 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,30 +1,47 @@ server: - port: 8083 + port: 5906 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://36.133.189.112:3000/smartwell_sx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root - password: Casic203 -jms: - pub-sub-domain: true + password: sxroot + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: # store-type: redis -# redis: -# host: 111.198.10.15 -# port: 11412 -# password: ew5T4K3#203lwh -# serializer: org.springframework.data.redis.serializer.StringRedisSerializer -# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + casic: - #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: /**/** #flowable数据源和多数据源配置 db: init: enable: false + #图片下载本地地址 + file: + uploadPath: D:\tmp\ + commponentType: disk + logging: level.root: info level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file + level.org.springframework.web: info + +#后续配置根据实际部署deviceType表修改 +statistics: + deviceGroup: + #管网 + 1: ["8", "11"] + #窨井 + 2: ["1", "2", "3"] + #监控 +# 3: ["0"] + settledEnterprise: 100 \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..fa91a4a 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -1,12 +1,11 @@ server: - port: 8085 -# context-path: /callcenter/api + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://111.198.10.15:11102/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203 + password: Casic203! initial-size: 2 min-idle: 1 jms: @@ -21,14 +20,20 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken - flowable: - datasource: - url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203 + nologin-urls: /**/** + file-upload-path: D:\java\boot\missiles-web-1.0.0-SNAPSHOT\upload +# flowable: +# datasource: +# url: jdbc:mysql://119.254.103.80:3000/guns_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false +# username: root +# password: root +smartcity: + config: + export-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\export\ + image-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\image\ + config-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: E:\smartwell\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml index 54d7252..d90d4c2 100644 --- a/casic-web/src/main/resources/config/application-test.yml +++ b/casic-web/src/main/resources/config/application-test.yml @@ -1,30 +1,35 @@ server: - port: 11307 + port: 8084 ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://119.254.103.80:3000/smartwell?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false username: root - password: Casic203! + password: root initial-size: 2 min-idle: 1 jms: pub-sub-domain: true -# session: -# store-type: redis + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /**/** + file-upload-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\upload +smartcity: + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + image-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\image\ + config-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\temp\ + download-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\download\ logging: level.root: info level.com.casic: debug - path: logs/ - file: missiles.log \ No newline at end of file + level.org.springframework.web: info + diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index 200ca46..9dc8566 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: @activatedProperties@ + active: dev servlet: multipart: max-file-size: 50MB @@ -11,6 +11,15 @@ #mybatis-plus: # sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector ################### mybatis-plus配置 ################### +mybatis-plus: + global-config: + #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" + field-strategy: 1 + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + map-underscore-to-camel-case: true ################### guns配置 ################### casic: swagger-open: false #是否开启swagger (true/false) @@ -19,8 +28,9 @@ spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: /user/login,/kaptcha,/config/baseConfig - - 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 + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + file: + uploadPath: D:\tmp\ +# 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 diff --git a/pom.xml b/pom.xml index 7e80eeb..49cbc7e 100644 --- a/pom.xml +++ b/pom.xml @@ -26,8 +26,7 @@ 2.0.0.alpha - - + 2.0.0.alpha 3.2.1 1.7 3.6 @@ -38,6 +37,7 @@ + org.springframework.boot spring-boot-starter-web