ComDisplayController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.huaxu.controller;
  2. import com.huaxu.dto.*;
  3. import com.huaxu.dto.generalView.WaterSupplyChart;
  4. import com.huaxu.entity.MonitorDataEntity;
  5. import com.huaxu.entity.MonitorDataValueEntity;
  6. import com.huaxu.entity.SceneEntity;
  7. import com.huaxu.entity.ThingSettingEntity;
  8. import com.huaxu.model.AjaxMessage;
  9. import com.huaxu.model.ResultStatus;
  10. import com.huaxu.service.*;
  11. import com.huaxu.util.ByteArrayUtils;
  12. import com.huaxu.util.OrgInfoUtil;
  13. import com.huaxu.util.RedisUtil;
  14. import io.swagger.annotations.Api;
  15. import io.swagger.annotations.ApiOperation;
  16. import io.swagger.annotations.ApiParam;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RequestMethod;
  20. import org.springframework.web.bind.annotation.RequestParam;
  21. import org.springframework.web.bind.annotation.RestController;
  22. import java.math.BigDecimal;
  23. import java.time.LocalDateTime;
  24. import java.util.ArrayList;
  25. import java.util.HashMap;
  26. import java.util.List;
  27. import java.util.Map;
  28. @RestController
  29. @RequestMapping("/comDisplay")
  30. @Api(tags = "综合展示")
  31. public class ComDisplayController {
  32. @Autowired
  33. private MonitorDataReportService monitorDataReportService;
  34. @Autowired
  35. private RedisUtil redisUtil;
  36. @Autowired
  37. private DeviceService deviceService;
  38. @Autowired
  39. private SceneService sceneService;
  40. @Autowired
  41. private MonitorInfoService monitorInfoService;
  42. @Autowired
  43. private OnlineMonitorService onlineMonitorService;
  44. @Autowired
  45. private ComdisplayMapLocationService comdisplayMapLocationService;
  46. @Autowired
  47. private OrgInfoUtil orgInfoUtil;
  48. @RequestMapping(value = "waterSupplyCharts", method = RequestMethod.GET)
  49. @ApiOperation(value = "综合展示--制水电耗对比曲线图(总分)")
  50. public AjaxMessage<List<WaterSupplyChart>> waterSupplyCharts(@RequestParam(required = false) Integer companyOrgId) {
  51. return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.waterSupplyChartsByMonth("水厂", companyOrgId));
  52. }
  53. @RequestMapping(value = "yieldPowerUsage", method = RequestMethod.GET)
  54. @ApiOperation(value = "综合展示--吨水电耗(总分)")
  55. public AjaxMessage<ComUsageDto> yieldPowerUsage(@RequestParam(required = false) Long companyOrgId) {
  56. ComUsageDto sceneUsageDto = new ComUsageDto();
  57. //查询公司下的场景
  58. SceneEntity sceneEntity = new SceneEntity();
  59. sceneEntity.setSceneTypeName("水厂");
  60. List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(sceneEntity,companyOrgId);
  61. for (SceneEntity itemScene : sceneEntities) {
  62. //查询场景下的所有设备信息
  63. List<DeviceDto> devices = new ArrayList<>();
  64. DeviceDto deviceDto = new DeviceDto();
  65. deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId()));
  66. if (deviceDto.getSceneIds().size() == 0)
  67. continue;
  68. devices.addAll(deviceService.selectList(deviceDto));
  69. //取前一天
  70. LocalDateTime dateTime = LocalDateTime.now().plusDays(-1);
  71. for (DeviceDto item : devices) {
  72. //设备的几个参数值
  73. SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto();
  74. sceneDeviceAttributeDto.setDeviceId(item.getId());
  75. sceneDeviceAttributeDto.setYear(dateTime.getYear());
  76. sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue());
  77. sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth());
  78. sceneDeviceAttributeDto.setSceneId(itemScene.getId());
  79. List<SceneDeviceAttributeDto> sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto);
  80. //取缓存里的数据
  81. byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes());
  82. if (bytes != null && bytes.length > 0) {
  83. MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
  84. //筛选该设备相同属性的值
  85. Map<Long, MonitorDataValueEntity> map = new HashMap<>();
  86. //将缓存中的实时数据放到map中方便进行遍历
  87. for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) {
  88. map.put(dateValue.getAttributeId(), dateValue);
  89. }
  90. for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) {
  91. Double attributeDiffValue = 0d;
  92. if (!map.containsKey(itemAttribute.getAttributeId())) {
  93. continue;
  94. }
  95. if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) {
  96. attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue();
  97. } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) {
  98. attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue();
  99. }
  100. switch (itemAttribute.getAttributeType()) {
  101. case "3":
  102. sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
  103. break;
  104. case "5":
  105. sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? (double) Math.round((sceneUsageDto.getPowerUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
  106. break;
  107. }
  108. }
  109. if (sceneUsageDto.getYieldWaterUsage() == null)
  110. sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage());
  111. if (sceneUsageDto.getPowerUsage() == null)
  112. sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage());
  113. }
  114. }
  115. }
  116. //对数据进行单位转换 按万进行统计
  117. sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()!=null? (double) Math.round(sceneUsageDto.getYieldWaterUsage()/(float)100)/100:0);
  118. sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage()!=null? (double) Math.round(sceneUsageDto.getPowerUsage()/(float)100)/100:0);
  119. if (sceneUsageDto.getPowerUsage() != null && sceneUsageDto.getYieldWaterUsage() != null && sceneUsageDto.getPowerUsage() != 0) {
  120. sceneUsageDto.setYieldPowerUsage((double) Math.round((sceneUsageDto.getPowerUsage() / sceneUsageDto.getYieldWaterUsage()) * 100) / 100);
  121. } else {
  122. sceneUsageDto.setYieldPowerUsage(0d);
  123. }
  124. return new AjaxMessage<>(ResultStatus.OK, sceneUsageDto);
  125. }
  126. @RequestMapping(value="selectMapForWholeCompany" , method = RequestMethod.GET)
  127. @ApiOperation(value = "二供供水排行--总公司")
  128. public AjaxMessage<List<SecDataCollectDto>> selectMapForWholeCompany() {
  129. MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto();
  130. monitorDataCollectDto.setSceneTypeName("泵站");
  131. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(null));
  132. List<SecDataCollectDto> result = onlineMonitorService.selectMapForWholeCompany(monitorDataCollectDto);
  133. return new AjaxMessage<>(ResultStatus.OK, result);
  134. }
  135. @RequestMapping(value="selectMapForCompany" , method = RequestMethod.GET)
  136. @ApiOperation(value = "二供供水排行--分公司")
  137. public AjaxMessage<List<MonitorDataCollectDto>> selectMapForCompany(@RequestParam(required = true) Integer companyOrgId) {
  138. MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto();
  139. monitorDataCollectDto.setSceneTypeName("泵站");
  140. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
  141. List<MonitorDataCollectDto> result = onlineMonitorService.selectMapSuspensionForMonth(monitorDataCollectDto);
  142. return new AjaxMessage<>(ResultStatus.OK, result);
  143. }
  144. // @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET)
  145. // @ApiOperation(value = "综合展示--地图详细信息展示")
  146. // public AjaxMessage<List<ComdisplayInfoDto>> selectMapDataForCompany() {
  147. // List<ComdisplayInfoDto> receFee = comdisplayMapLocationService.selectMapDataForCompany();
  148. // for (ComdisplayInfoDto item : receFee) {
  149. // item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId()));
  150. // Double waterUsage = item.getWaterUsage() != null ? item.getWaterUsage() : 0d;//售水量
  151. // //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100%
  152. // //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100%
  153. // item.setIntakeWaterUsage(monitorDataReportService.getAmountCount(item.getCompanyOrgId(), null, "水源", 4, 2).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP).doubleValue());
  154. // item.setYieldWaterUsage(monitorDataReportService.getAmountCount(item.getCompanyOrgId(), null, "水厂", 3, 2).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP).doubleValue());
  155. //
  156. // receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(item.getYieldWaterUsage()-waterUsage).divide(BigDecimal.valueOf(receFee.get(0).getYieldWaterUsage()),3,BigDecimal.ROUND_HALF_UP).doubleValue());
  157. //
  158. // }
  159. // return new AjaxMessage<>(ResultStatus.OK, receFee);
  160. // }
  161. @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET)
  162. @ApiOperation(value = "综合展示--地图详细信息展示(按子公司查询)")
  163. public AjaxMessage<ComdisplayInfoDto> selectMapDataForSinggleCompany(@RequestParam(required = true) Integer companyOrgId) {
  164. List<ComdisplayInfoDto> receFee = comdisplayMapLocationService.selectMapDataForSingleCompany(companyOrgId);
  165. if (receFee.size() > 0) {
  166. receFee.get(0).setCompanyOrgName(orgInfoUtil.getOrgName(receFee.get(0).getCompanyOrgId()));
  167. Double waterUsage = receFee.get(0).getWaterUsage() != null ? receFee.get(0).getWaterUsage() : 0d;//售水量
  168. //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100%
  169. receFee.get(0).setIntakeWaterUsage(monitorDataReportService.getAmountCount(companyOrgId, null, "水源", 4, 2).divide(new BigDecimal("10000"), 3, BigDecimal.ROUND_HALF_UP).doubleValue());
  170. receFee.get(0).setYieldWaterUsage(monitorDataReportService.getAmountCount(companyOrgId, null, "水厂", 3, 2).divide(new BigDecimal("10000"), 3, BigDecimal.ROUND_HALF_UP).doubleValue());
  171. receFee.get(0).setMeterReadingArrivalRate(BigDecimal.valueOf(receFee.get(0).getMeterReadingArrivalRate()).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(1), 2, BigDecimal.ROUND_HALF_UP).doubleValue());
  172. double amount = receFee.get(0).getYieldWaterUsage() - waterUsage;
  173. if (receFee.get(0).getYieldWaterUsage() == 0d)
  174. receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(0).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP).doubleValue());
  175. else
  176. receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(amount).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(receFee.get(0).getYieldWaterUsage()), 2, BigDecimal.ROUND_HALF_UP).doubleValue());
  177. }
  178. if (receFee.size() > 0)
  179. return new AjaxMessage<>(ResultStatus.OK, receFee.get(0));
  180. else
  181. return new AjaxMessage<>(ResultStatus.OK, null);
  182. }
  183. @RequestMapping(value="selectPipeNetLayer" , method = RequestMethod.GET)
  184. @ApiOperation(value = "查询管网地图图层及设备")
  185. public AjaxMessage<List<PipeNetLayerDto>> selectPipeNetLayer(
  186. @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){
  187. OnlineDataDto onlineDataDto=new OnlineDataDto();
  188. onlineDataDto.setFlag(1);
  189. onlineDataDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
  190. List<PipeNetLayerDto> result=onlineMonitorService.selectPipeNetLayer(onlineDataDto);
  191. return new AjaxMessage<>(ResultStatus.OK, result);
  192. }
  193. @RequestMapping(value="selectDeviceMapParam" , method = RequestMethod.GET)
  194. @ApiOperation(value = "查询设备地图参数数据")
  195. public AjaxMessage<List<MonitorDataCollectDto>> selectDeviceMapParam(
  196. @ApiParam(value = "设备id", required = true) @RequestParam Long deviceId){
  197. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  198. monitorDataCollectDto.setDeviceId(deviceId);
  199. monitorDataCollectDto.setFlag(1);
  200. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  201. List<MonitorDataCollectDto> result=onlineMonitorService.selectDeviceMapParam(monitorDataCollectDto);
  202. return new AjaxMessage<>(ResultStatus.OK, result);
  203. }
  204. @RequestMapping(value="selectMapSuspension" , method = RequestMethod.GET)
  205. @ApiOperation(value = "查询地图悬浮数据")
  206. public AjaxMessage<List<MonitorDataCollectDto>> selectMapSuspension(
  207. @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){
  208. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  209. monitorDataCollectDto.setFlag(1);
  210. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
  211. List<MonitorDataCollectDto> result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
  212. return new AjaxMessage<>(ResultStatus.OK, result);
  213. }
  214. @RequestMapping(value="selectMapParam" , method = RequestMethod.GET)
  215. @ApiOperation(value = "查询地图参数数据")
  216. public AjaxMessage<List<MonitorDataCollectDto>> selectMapParam(
  217. @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId){
  218. MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
  219. monitorDataCollectDto.setSceneId(sceneId);
  220. monitorDataCollectDto.setFlag(1);
  221. monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
  222. List<MonitorDataCollectDto> result=onlineMonitorService.selectMapParam(monitorDataCollectDto);
  223. return new AjaxMessage<>(ResultStatus.OK, result);
  224. }
  225. }