OnlineMonitorController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. package com.huaxu.controller;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.huaxu.dto.*;
  5. import com.huaxu.entity.MonitorDataEntity;
  6. import com.huaxu.entity.MonitorDataValueEntity;
  7. import com.huaxu.model.AjaxMessage;
  8. import com.huaxu.model.Pagination;
  9. import com.huaxu.model.ResultStatus;
  10. import com.huaxu.service.DeviceAttributeSpecsService;
  11. import com.huaxu.service.OnlineMonitorService;
  12. import com.huaxu.service.SceneService;
  13. import com.huaxu.util.ByteArrayUtils;
  14. import com.huaxu.util.RedisUtil;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiOperation;
  17. import io.swagger.annotations.ApiParam;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.*;
  20. import java.text.DecimalFormat;
  21. import java.util.ArrayList;
  22. import java.util.Comparator;
  23. import java.util.List;
  24. import java.util.Map;
  25. import java.util.stream.Collectors;
  26. /**
  27. * 在线监测控制层
  28. *
  29. * @author yjy
  30. * @since 2020-12-2
  31. */
  32. @RestController
  33. @RequestMapping("/onlineMonitor")
  34. @Api(tags = "在线监测")
  35. public class OnlineMonitorController {
  36. /**
  37. * 服务对象
  38. */
  39. @Autowired
  40. private OnlineMonitorService onlineMonitorService;
  41. @Autowired
  42. private SceneService sceneService;
  43. @RequestMapping(value="selectAlarmDetails" , method = RequestMethod.GET)
  44. @ApiOperation(value = "查询实时报警信息")
  45. public AjaxMessage<List<AlarmDetailsDto>> selectAlarmDetails(
  46. @ApiParam(value = "一级场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName,
  47. @ApiParam(value = "场景名称", required = false) @RequestParam(required = false) String sceneName,
  48. @ApiParam(value = "公司机构id", required = false)@RequestParam(required = false) Integer companyOrgId){
  49. AlarmDetailsDto alarmDetailsDto=new AlarmDetailsDto();
  50. alarmDetailsDto.setSceneTypeName(sceneTypeName);
  51. alarmDetailsDto.setSceneName(sceneName);
  52. alarmDetailsDto.setCompanyOrgId(companyOrgId);
  53. alarmDetailsDto.setSceneIds(sceneService.findByParentIdsLike(null));
  54. return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectAlarmDetails(alarmDetailsDto));
  55. }
  56. @RequestMapping(value="selectAlarmCount" , method = RequestMethod.GET)
  57. @ApiOperation(value = "查询实时报警数量")
  58. public AjaxMessage<List<Map<String, Object>>> selectAlarmCount(
  59. @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
  60. @ApiParam(value = "场景名称", required = false) @RequestParam(required = false) String sceneName){
  61. AlarmDetailsDto alarmDetailsDto=new AlarmDetailsDto();
  62. alarmDetailsDto.setSceneTypeName(sceneTypeName);
  63. alarmDetailsDto.setSceneName(sceneName);
  64. alarmDetailsDto.setSceneIds(sceneService.findByParentIdsLike(null));
  65. return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectAlarmCount(alarmDetailsDto));
  66. }
  67. @RequestMapping(value="selectMapSuspension" , method = RequestMethod.GET)
  68. @ApiOperation(value = "查询地图悬浮数据及用水量排行")
  69. public AjaxMessage<List<MonitorDataCollectDto>> selectMapSuspension(
  70. @ApiParam(value = "一级场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName){
  71. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  72. monitorDataCollectDto.setSceneTypeName(sceneTypeName);
  73. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  74. List<MonitorDataCollectDto> result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
  75. return new AjaxMessage<>(ResultStatus.OK, result);
  76. }
  77. @RequestMapping(value="selectMapParam" , method = RequestMethod.GET)
  78. @ApiOperation(value = "查询地图参数数据")
  79. public AjaxMessage<List<MonitorDataCollectDto>> selectMapParam(
  80. @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId){
  81. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  82. monitorDataCollectDto.setSceneId(sceneId);
  83. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  84. List<MonitorDataCollectDto> result=onlineMonitorService.selectMapParam(monitorDataCollectDto);
  85. return new AjaxMessage<>(ResultStatus.OK, result);
  86. }
  87. @RequestMapping(value="selectPage" , method = RequestMethod.GET)
  88. @ApiOperation(value = "查询实时数据列表")
  89. public AjaxMessage<Pagination<OnlineDataDto>> selectPage(
  90. @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
  91. @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
  92. @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
  93. @ApiParam(value = "场景名称", required = false) @RequestParam(required = false) String sceneName){
  94. OnlineDataDto onlineDataDto=new OnlineDataDto();
  95. onlineDataDto.setSceneTypeName(sceneTypeName);
  96. onlineDataDto.setSceneName(sceneName);
  97. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  98. IPage<OnlineDataDto> iPage = new Page<>(pageNum, pageSize);
  99. iPage = onlineMonitorService.selectPage(iPage, onlineDataDto);
  100. Pagination<OnlineDataDto> pages = new Pagination<>(iPage);
  101. return new AjaxMessage<>(ResultStatus.OK, pages);
  102. }
  103. @RequestMapping(value="selectAlarmStats" , method = RequestMethod.GET)
  104. @ApiOperation(value = "查询设备报警分析")
  105. public AjaxMessage<List<Map<String, Object>>> selectAlarmStats(
  106. @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId,
  107. @ApiParam(value = "查询天数 1、3、7", required = true) @RequestParam Integer days){
  108. AlarmDetailsDto alarmDetailsDto=new AlarmDetailsDto();
  109. alarmDetailsDto.setId(sceneId);
  110. alarmDetailsDto.setDays(days);
  111. alarmDetailsDto.setSceneIds(sceneService.findByParentIdsLike(null));
  112. return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectAlarmStats(alarmDetailsDto));
  113. }
  114. @RequestMapping(value="selectDeviceCount" , method = RequestMethod.GET)
  115. @ApiOperation(value = "按管网名称分类查询设备数量",notes = "sceneTypeName 为压力、水质、流量")
  116. public AjaxMessage<List<Map<String, Object>>> selectDeviceCount(
  117. @ApiParam(value = "场景类型名称", required = true) @RequestParam String sceneTypeName,
  118. @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
  119. @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
  120. OnlineDataDto onlineDataDto=new OnlineDataDto();
  121. onlineDataDto.setSceneTypeName(sceneTypeName);
  122. onlineDataDto.setSceneId(sceneId);
  123. onlineDataDto.setDeviceName(deviceName);
  124. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  125. return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectDeviceCount(onlineDataDto));
  126. }
  127. @RequestMapping(value="selectDeviceMapParam" , method = RequestMethod.GET)
  128. @ApiOperation(value = "查询设备地图参数数据")
  129. public AjaxMessage<List<MonitorDataCollectDto>> selectDeviceMapParam(
  130. @ApiParam(value = "一级场景id", required = true) @RequestParam Long deviceId){
  131. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  132. monitorDataCollectDto.setDeviceId(deviceId);
  133. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  134. List<MonitorDataCollectDto> result=onlineMonitorService.selectDeviceMapParam(monitorDataCollectDto);
  135. return new AjaxMessage<>(ResultStatus.OK, result);
  136. }
  137. @RequestMapping(value="statsDeviceQualified" , method = RequestMethod.GET)
  138. @ApiOperation(value = "统计设备合格数据",notes = "sceneTypeName 为压力、水质")
  139. public AjaxMessage<List<DeviceCountStatsDto>> statsDeviceQualified(
  140. @ApiParam(value = "场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName,
  141. @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
  142. @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
  143. OnlineDataDto onlineDataDto=new OnlineDataDto();
  144. onlineDataDto.setSceneTypeName(sceneTypeName);
  145. onlineDataDto.setSceneId(sceneId);
  146. onlineDataDto.setDeviceName(deviceName);
  147. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  148. List<DeviceCountStatsDto> result=onlineMonitorService.statsDeviceQualified(onlineDataDto);
  149. return new AjaxMessage<>(ResultStatus.OK, result);
  150. }
  151. @RequestMapping(value="statsDeviceFlow" , method = RequestMethod.GET)
  152. @ApiOperation(value = "统计今日累计流量")
  153. public AjaxMessage<List<MonitorDataCollectDto>> statsDeviceFlow(
  154. @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
  155. @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
  156. OnlineDataDto onlineDataDto=new OnlineDataDto();
  157. onlineDataDto.setSceneTypeName("流量");
  158. onlineDataDto.setType(4);
  159. onlineDataDto.setSceneId(sceneId);
  160. onlineDataDto.setDeviceName(deviceName);
  161. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  162. List<MonitorDataCollectDto> result=onlineMonitorService.statsDeviceFlow(onlineDataDto);
  163. return new AjaxMessage<>(ResultStatus.OK, result);
  164. }
  165. @RequestMapping(value="statsDeviceParmCount" , method = RequestMethod.GET)
  166. @ApiOperation(value = "统计压力、瞬时流量的分布区间")
  167. public AjaxMessage<DistributeIntervalDto> statsDeviceParmCount(
  168. @ApiParam(value = "场景类型名称", required = true) @RequestParam String sceneTypeName,
  169. @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
  170. @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
  171. OnlineDataDto onlineDataDto=new OnlineDataDto();
  172. onlineDataDto.setSceneTypeName(sceneTypeName);
  173. if(sceneTypeName.equals("压力")){
  174. onlineDataDto.setType(1);
  175. }else if(sceneTypeName.equals("流量")){
  176. onlineDataDto.setType(5);
  177. }
  178. onlineDataDto.setSceneId(sceneId);
  179. onlineDataDto.setDeviceName(deviceName);
  180. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  181. DistributeIntervalDto result=onlineMonitorService.statsDeviceParmCount(onlineDataDto);
  182. return new AjaxMessage<>(ResultStatus.OK, result);
  183. }
  184. @RequestMapping(value="selectPipeNetPage" , method = RequestMethod.GET)
  185. @ApiOperation(value = "查询管网实时数据列表")
  186. public AjaxMessage<Pagination<OnlineDataDto>> selectPipeNetPage(
  187. @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
  188. @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize,
  189. @ApiParam(value = "场景类型名称(压力、流量、水质)", required = true) @RequestParam String sceneTypeName,
  190. @ApiParam(value = "场景id", required = false) @RequestParam(required = false) Long sceneId,
  191. @ApiParam(value = "设备名称", required = false) @RequestParam(required = false) String deviceName){
  192. OnlineDataDto onlineDataDto=new OnlineDataDto();
  193. onlineDataDto.setSceneTypeName(sceneTypeName);
  194. if(sceneTypeName.equals("压力")){
  195. onlineDataDto.setType(1);
  196. }else if(sceneTypeName.equals("流量")){
  197. onlineDataDto.setType(2);
  198. }else if(sceneTypeName.equals("水质")){
  199. onlineDataDto.setType(3);
  200. }
  201. onlineDataDto.setSceneId(sceneId);
  202. onlineDataDto.setDeviceName(deviceName);
  203. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  204. IPage<OnlineDataDto> iPage = new Page<>(pageNum, pageSize);
  205. iPage = onlineMonitorService.selectPipeNetPage(iPage, onlineDataDto);
  206. Pagination<OnlineDataDto> pages = new Pagination<>(iPage);
  207. return new AjaxMessage<>(ResultStatus.OK, pages);
  208. }
  209. @RequestMapping(value="selectPipeNetLayer" , method = RequestMethod.GET)
  210. @ApiOperation(value = "查询管网地图图层及设备")
  211. public AjaxMessage<List<PipeNetLayerDto>> selectPipeNetLayer(
  212. @ApiParam(value = "场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName){
  213. OnlineDataDto onlineDataDto=new OnlineDataDto();
  214. onlineDataDto.setSceneTypeName(sceneTypeName);
  215. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  216. List<PipeNetLayerDto> result=onlineMonitorService.selectPipeNetLayer(onlineDataDto);
  217. return new AjaxMessage<>(ResultStatus.OK, result);
  218. }
  219. @RequestMapping(value="statsDispatchSummary" , method = RequestMethod.GET)
  220. @ApiOperation(value = "统计从水源地到水龙头汇总数据")
  221. public AjaxMessage<DispatchSummaryDto> statsDispatchSummary(){
  222. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  223. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  224. DispatchSummaryDto result=onlineMonitorService.statsDispatchSummary(monitorDataCollectDto);
  225. return new AjaxMessage<>(ResultStatus.OK, result);
  226. }
  227. @RequestMapping(value="statsPipeNetQualified" , method = RequestMethod.GET)
  228. @ApiOperation(value = "App-统计管网设备合格数据",notes = "sceneTypeName 为压力、水质、流量")
  229. public AjaxMessage<List<DeviceCountStatsDto>> statsPipeNetQualified(
  230. @ApiParam(value = "场景类型名称", required = false) @RequestParam(required = false) String sceneTypeName){
  231. OnlineDataDto onlineDataDto=new OnlineDataDto();
  232. onlineDataDto.setSceneTypeName(sceneTypeName);
  233. onlineDataDto.setFlag(1);
  234. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  235. List<DeviceCountStatsDto> result=onlineMonitorService.statsDeviceQualified(onlineDataDto);
  236. for(DeviceCountStatsDto item : result){
  237. if(item.getType().equals("流量"))
  238. continue;
  239. onlineDataDto.setFlag(null);
  240. onlineDataDto.setSceneTypeName(item.getType());
  241. List<DeviceCountStatsDto> itemResult=onlineMonitorService.statsDeviceQualified(onlineDataDto);
  242. if(itemResult.size()>0){
  243. if(item.getType().equals("压力")){
  244. DeviceCountStatsDto pressQualified=itemResult.get(0).getParmQualified().size()>0?itemResult.get(0).getParmQualified().get(0):null;
  245. item.setQualifiedRate(pressQualified==null?100:(double)pressQualified.getNormalCount()/itemResult.get(0).getTotalCount()*100);
  246. }else if(item.getType().equals("水质")){
  247. item.setQualifiedRate((double)itemResult.get(0).getNormalCount()/itemResult.get(0).getTotalCount()*100);
  248. }
  249. }
  250. }
  251. return new AjaxMessage<>(ResultStatus.OK, result);
  252. }
  253. @RequestMapping(value="selectList" , method = RequestMethod.GET)
  254. @ApiOperation(value = "App-查询场景实时数据列表")
  255. public AjaxMessage<List<OnlineDataDto>> selectList(
  256. @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
  257. @ApiParam(value = "场景id", required = false) @RequestParam(required = false)Long sceneId,
  258. @ApiParam(value = "公司id", required = false) @RequestParam(required = false)Integer companyOrgId){
  259. OnlineDataDto onlineDataDto=new OnlineDataDto();
  260. onlineDataDto.setSceneTypeName(sceneTypeName);
  261. onlineDataDto.setSceneId(sceneId);
  262. onlineDataDto.setCompanyOrgId(companyOrgId);
  263. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  264. List<OnlineDataDto> result = onlineMonitorService.selectList(onlineDataDto);
  265. return new AjaxMessage<>(ResultStatus.OK, result);
  266. }
  267. @RequestMapping(value="selectPipeNetList" , method = RequestMethod.GET)
  268. @ApiOperation(value = "App-查询管网实时数据列表")
  269. public AjaxMessage<List<OnlineDataDto>> selectPipeNetList(
  270. @ApiParam(value = "场景类型名称(压力、流量、水质)", required = true) @RequestParam String sceneTypeName,
  271. @ApiParam(value = "设备id", required = false) @RequestParam(required = false)Long deviceId,
  272. @ApiParam(value = "公司id", required = false) @RequestParam(required = false)Integer companyOrgId){
  273. OnlineDataDto onlineDataDto=new OnlineDataDto();
  274. onlineDataDto.setSceneTypeName(sceneTypeName);
  275. if(sceneTypeName.equals("压力")){
  276. onlineDataDto.setType(1);
  277. }else if(sceneTypeName.equals("流量")){
  278. onlineDataDto.setType(2);
  279. }else if(sceneTypeName.equals("水质")){
  280. onlineDataDto.setType(3);
  281. }
  282. onlineDataDto.setDeviceId(deviceId);
  283. onlineDataDto.setCompanyOrgId(companyOrgId);
  284. onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
  285. List<OnlineDataDto> result = onlineMonitorService.selectPipeNetList(onlineDataDto);
  286. return new AjaxMessage<>(ResultStatus.OK, result);
  287. }
  288. }