package com.huaxu.controller; import com.huaxu.dto.*; import com.huaxu.dto.generalView.WaterSupplyChart; import com.huaxu.entity.MonitorDataEntity; import com.huaxu.entity.MonitorDataValueEntity; import com.huaxu.entity.SceneEntity; import com.huaxu.entity.ThingSettingEntity; import com.huaxu.model.AjaxMessage; import com.huaxu.model.ResultStatus; import com.huaxu.service.*; import com.huaxu.util.ByteArrayUtils; import com.huaxu.util.OrgInfoUtil; import com.huaxu.util.RedisUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/comDisplay") @Api(tags = "综合展示") public class ComDisplayController { @Autowired private MonitorDataReportService monitorDataReportService; @Autowired private RedisUtil redisUtil; @Autowired private DeviceService deviceService; @Autowired private SceneService sceneService; @Autowired private MonitorInfoService monitorInfoService; @Autowired private OnlineMonitorService onlineMonitorService; @Autowired private ComdisplayMapLocationService comdisplayMapLocationService; @Autowired private OrgInfoUtil orgInfoUtil; @RequestMapping(value = "waterSupplyCharts", method = RequestMethod.GET) @ApiOperation(value = "综合展示--制水电耗对比曲线图(总分)") public AjaxMessage> waterSupplyCharts(@RequestParam(required = false) Integer companyOrgId) { return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.waterSupplyChartsByMonth("水厂", companyOrgId)); } @RequestMapping(value = "yieldPowerUsage", method = RequestMethod.GET) @ApiOperation(value = "综合展示--吨水电耗(总分)") public AjaxMessage yieldPowerUsage(@RequestParam(required = false) Long companyOrgId) { ComUsageDto sceneUsageDto = new ComUsageDto(); //查询公司下的场景 SceneEntity sceneEntity = new SceneEntity(); sceneEntity.setSceneTypeName("水厂"); List sceneEntities = sceneService.selectByTypeNameForCom(sceneEntity,companyOrgId); for (SceneEntity itemScene : sceneEntities) { //查询场景下的所有设备信息 List devices = new ArrayList<>(); DeviceDto deviceDto = new DeviceDto(); deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId())); if (deviceDto.getSceneIds().size() == 0) continue; devices.addAll(deviceService.selectList(deviceDto)); //取前一天 LocalDateTime dateTime = LocalDateTime.now().plusDays(-1); for (DeviceDto item : devices) { //设备的几个参数值 SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto(); sceneDeviceAttributeDto.setDeviceId(item.getId()); sceneDeviceAttributeDto.setYear(dateTime.getYear()); sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue()); sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth()); sceneDeviceAttributeDto.setSceneId(itemScene.getId()); List sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto); //取缓存里的数据 byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes()); if (bytes != null && bytes.length > 0) { MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); //筛选该设备相同属性的值 Map map = new HashMap<>(); //将缓存中的实时数据放到map中方便进行遍历 for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) { map.put(dateValue.getAttributeId(), dateValue); } for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) { Double attributeDiffValue = 0d; if (!map.containsKey(itemAttribute.getAttributeId())) { continue; } if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) { attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue(); } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) { attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue(); } switch (itemAttribute.getAttributeType()) { case "3": sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000); break; case "5": sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? (double) Math.round((sceneUsageDto.getPowerUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000); break; } } if (sceneUsageDto.getYieldWaterUsage() == null) sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()); if (sceneUsageDto.getPowerUsage() == null) sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage()); } } } //对数据进行单位转换 按万进行统计 sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()!=null? (double) Math.round(sceneUsageDto.getYieldWaterUsage()/(float)100)/100:0); sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage()!=null? (double) Math.round(sceneUsageDto.getPowerUsage()/(float)100)/100:0); if (sceneUsageDto.getPowerUsage() != null && sceneUsageDto.getYieldWaterUsage() != null && sceneUsageDto.getPowerUsage() != 0) { sceneUsageDto.setYieldPowerUsage((double) Math.round((sceneUsageDto.getPowerUsage() / sceneUsageDto.getYieldWaterUsage()) * 100) / 100); } else { sceneUsageDto.setYieldPowerUsage(0d); } return new AjaxMessage<>(ResultStatus.OK, sceneUsageDto); } @RequestMapping(value="selectMapForWholeCompany" , method = RequestMethod.GET) @ApiOperation(value = "二供供水排行--总公司") public AjaxMessage> selectMapForWholeCompany() { MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto(); monitorDataCollectDto.setSceneTypeName("泵站"); monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(null)); List result = onlineMonitorService.selectMapForWholeCompany(monitorDataCollectDto); return new AjaxMessage<>(ResultStatus.OK, result); } @RequestMapping(value="selectMapForCompany" , method = RequestMethod.GET) @ApiOperation(value = "二供供水排行--分公司") public AjaxMessage> selectMapForCompany(@RequestParam(required = true) Integer companyOrgId) { MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto(); monitorDataCollectDto.setSceneTypeName("泵站"); monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId))); List result = onlineMonitorService.selectMapSuspensionForMonth(monitorDataCollectDto); return new AjaxMessage<>(ResultStatus.OK, result); } // @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET) // @ApiOperation(value = "综合展示--地图详细信息展示") // public AjaxMessage> selectMapDataForCompany() { // List receFee = comdisplayMapLocationService.selectMapDataForCompany(); // for (ComdisplayInfoDto item : receFee) { // item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId())); // Double waterUsage = item.getWaterUsage() != null ? item.getWaterUsage() : 0d;//售水量 // //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100% // //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100% // item.setIntakeWaterUsage(monitorDataReportService.getAmountCount(item.getCompanyOrgId(), null, "水源", 4, 2).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP).doubleValue()); // item.setYieldWaterUsage(monitorDataReportService.getAmountCount(item.getCompanyOrgId(), null, "水厂", 3, 2).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP).doubleValue()); // // receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(item.getYieldWaterUsage()-waterUsage).divide(BigDecimal.valueOf(receFee.get(0).getYieldWaterUsage()),3,BigDecimal.ROUND_HALF_UP).doubleValue()); // // } // return new AjaxMessage<>(ResultStatus.OK, receFee); // } @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET) @ApiOperation(value = "综合展示--地图详细信息展示(按子公司查询)") public AjaxMessage selectMapDataForSinggleCompany(@RequestParam(required = true) Integer companyOrgId) { List receFee = comdisplayMapLocationService.selectMapDataForSingleCompany(companyOrgId); if (receFee.size() > 0) { receFee.get(0).setCompanyOrgName(orgInfoUtil.getOrgName(receFee.get(0).getCompanyOrgId())); Double waterUsage = receFee.get(0).getWaterUsage() != null ? receFee.get(0).getWaterUsage() : 0d;//售水量 //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量 X 100% receFee.get(0).setIntakeWaterUsage(monitorDataReportService.getAmountCount(companyOrgId, null, "水源", 4, 2).divide(new BigDecimal("10000"), 3, BigDecimal.ROUND_HALF_UP).doubleValue()); receFee.get(0).setYieldWaterUsage(monitorDataReportService.getAmountCount(companyOrgId, null, "水厂", 3, 2).divide(new BigDecimal("10000"), 3, BigDecimal.ROUND_HALF_UP).doubleValue()); receFee.get(0).setMeterReadingArrivalRate(BigDecimal.valueOf(receFee.get(0).getMeterReadingArrivalRate()).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(1), 2, BigDecimal.ROUND_HALF_UP).doubleValue()); double amount = receFee.get(0).getYieldWaterUsage() - waterUsage; if (receFee.get(0).getYieldWaterUsage() == 0d) receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(0).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP).doubleValue()); else receFee.get(0).setWaterFeeRecoveryRate(BigDecimal.valueOf(amount).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(receFee.get(0).getYieldWaterUsage()), 2, BigDecimal.ROUND_HALF_UP).doubleValue()); } if (receFee.size() > 0) return new AjaxMessage<>(ResultStatus.OK, receFee.get(0)); else return new AjaxMessage<>(ResultStatus.OK, null); } @RequestMapping(value="selectPipeNetLayer" , method = RequestMethod.GET) @ApiOperation(value = "查询管网地图图层及设备") public AjaxMessage> selectPipeNetLayer( @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){ OnlineDataDto onlineDataDto=new OnlineDataDto(); onlineDataDto.setFlag(1); onlineDataDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId))); List result=onlineMonitorService.selectPipeNetLayer(onlineDataDto); return new AjaxMessage<>(ResultStatus.OK, result); } @RequestMapping(value="selectDeviceMapParam" , method = RequestMethod.GET) @ApiOperation(value = "查询设备地图参数数据") public AjaxMessage> selectDeviceMapParam( @ApiParam(value = "设备id", required = true) @RequestParam Long deviceId){ MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto(); monitorDataCollectDto.setDeviceId(deviceId); monitorDataCollectDto.setFlag(1); monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null)); List result=onlineMonitorService.selectDeviceMapParam(monitorDataCollectDto); return new AjaxMessage<>(ResultStatus.OK, result); } @RequestMapping(value="selectMapSuspension" , method = RequestMethod.GET) @ApiOperation(value = "查询地图悬浮数据") public AjaxMessage> selectMapSuspension( @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){ MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto(); monitorDataCollectDto.setFlag(1); monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId))); List result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto); return new AjaxMessage<>(ResultStatus.OK, result); } @RequestMapping(value="selectMapParam" , method = RequestMethod.GET) @ApiOperation(value = "查询地图参数数据") public AjaxMessage> selectMapParam( @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId){ MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto(); monitorDataCollectDto.setSceneId(sceneId); monitorDataCollectDto.setFlag(1); monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null)); List result=onlineMonitorService.selectMapParam(monitorDataCollectDto); return new AjaxMessage<>(ResultStatus.OK, result); } }