|
@@ -5,13 +5,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.huaxu.dto.AlarmDetailsDto;
|
|
|
import com.huaxu.dto.MonitorDataCollectDto;
|
|
|
+import com.huaxu.dto.MonitorDataDto;
|
|
|
import com.huaxu.dto.OnlineDataDto;
|
|
|
-import com.huaxu.entity.SceneEntity;
|
|
|
+import com.huaxu.entity.MonitorDataEntity;
|
|
|
+import com.huaxu.entity.MonitorDataValueEntity;
|
|
|
import com.huaxu.model.AjaxMessage;
|
|
|
import com.huaxu.model.Pagination;
|
|
|
import com.huaxu.model.ResultStatus;
|
|
|
+import com.huaxu.service.DeviceAttributeSpecsService;
|
|
|
import com.huaxu.service.OnlineMonitorService;
|
|
|
import com.huaxu.service.SceneService;
|
|
|
+import com.huaxu.util.ByteArrayUtils;
|
|
|
+import com.huaxu.util.RedisUtil;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
@@ -19,8 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 在线监测控制层
|
|
@@ -39,6 +46,10 @@ public class OnlineMonitorController {
|
|
|
private OnlineMonitorService onlineMonitorService;
|
|
|
@Autowired
|
|
|
private SceneService sceneService;
|
|
|
+ @Autowired
|
|
|
+ private DeviceAttributeSpecsService deviceAttributeSpecsService;
|
|
|
+ @Autowired
|
|
|
+ private RedisUtil redisUtil;
|
|
|
|
|
|
@RequestMapping(value="selectAlarmDetails" , method = RequestMethod.GET)
|
|
|
@ApiOperation(value = "查询实时报警信息")
|
|
@@ -71,7 +82,26 @@ public class OnlineMonitorController {
|
|
|
MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
|
|
|
monitorDataCollectDto.setSceneTypeName(sceneTypeName);
|
|
|
monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
|
|
|
- return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectMapSuspension(monitorDataCollectDto));
|
|
|
+ List<MonitorDataCollectDto> result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
|
|
|
+ GetOnlineData(result);//获取在线数据
|
|
|
+ monitorDataCollectDto.setType(1);
|
|
|
+ List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
|
|
|
+ CalculateOnlineData(result,calculateRes);//计算用水量、耗电量、耗药量
|
|
|
+ //按水量倒序排序 如果是水源按照取水量排序,其他按照供水量
|
|
|
+ result.sort(new Comparator<MonitorDataCollectDto>() {
|
|
|
+ @Override
|
|
|
+ public int compare(MonitorDataCollectDto o1, MonitorDataCollectDto o2) {
|
|
|
+ Double d1= sceneTypeName.equals("水源")?(o1.getIntakeWaterUsage()==null?0d:o1.getIntakeWaterUsage()):(o1.getYieldWaterUsage()==null?0d:o1.getYieldWaterUsage());
|
|
|
+ Double d2= sceneTypeName.equals("水源")?(o2.getIntakeWaterUsage()==null?0d:o2.getIntakeWaterUsage()):(o2.getYieldWaterUsage()==null?0d:o2.getYieldWaterUsage());
|
|
|
+ if(d1>d2){
|
|
|
+ return -1;
|
|
|
+ }else if(d1.equals(d1)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return new AjaxMessage<>(ResultStatus.OK, result);
|
|
|
}
|
|
|
|
|
|
@RequestMapping(value="selectMapParam" , method = RequestMethod.GET)
|
|
@@ -81,7 +111,12 @@ public class OnlineMonitorController {
|
|
|
MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
|
|
|
monitorDataCollectDto.setSceneId(sceneId);
|
|
|
monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
|
|
|
- return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectMapParam(monitorDataCollectDto));
|
|
|
+ List<MonitorDataCollectDto> result=onlineMonitorService.selectMapParam(monitorDataCollectDto);
|
|
|
+ GetOnlineData(result);//获取在线数据
|
|
|
+ monitorDataCollectDto.setType(1);
|
|
|
+ List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
|
|
|
+ CalculateOnlineData(result,calculateRes);//计算用水量、耗电量、耗药量
|
|
|
+ return new AjaxMessage<>(ResultStatus.OK, result);
|
|
|
}
|
|
|
|
|
|
@RequestMapping(value="selectPage" , method = RequestMethod.GET)
|
|
@@ -95,23 +130,182 @@ public class OnlineMonitorController {
|
|
|
onlineDataDto.setSceneTypeName(sceneTypeName);
|
|
|
onlineDataDto.setSceneName(sceneName);
|
|
|
onlineDataDto.setSceneIds(sceneService.findByParentIdsLike(null));
|
|
|
-
|
|
|
IPage<OnlineDataDto> iPage = new Page<>(pageNum, pageSize);
|
|
|
iPage = onlineMonitorService.selectPage(iPage, onlineDataDto);
|
|
|
Pagination<OnlineDataDto> pages = new Pagination<>(iPage);
|
|
|
+
|
|
|
+ MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
|
|
|
+ List<Long> sceneIds = pages.getList().stream().map(OnlineDataDto::getSceneId).collect(Collectors.toList());
|
|
|
+ monitorDataCollectDto.setType(2);
|
|
|
+ monitorDataCollectDto.setSceneIds(sceneIds);
|
|
|
+ List<MonitorDataCollectDto> calculateRes=onlineMonitorService.selectSceneParam(monitorDataCollectDto);
|
|
|
+ GetCalOnlineData(pages.getList(),calculateRes);//获取在线数据及计算数据
|
|
|
return new AjaxMessage<>(ResultStatus.OK, pages);
|
|
|
}
|
|
|
|
|
|
@RequestMapping(value="selectAlarmStats" , method = RequestMethod.GET)
|
|
|
@ApiOperation(value = "查询设备报警分析")
|
|
|
public AjaxMessage<List<Map<String, Object>>> selectAlarmStats(
|
|
|
- @ApiParam(value = "一级场景类型名称", required = true) @RequestParam String sceneTypeName,
|
|
|
+ @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId,
|
|
|
@ApiParam(value = "查询天数 1、3、7", required = true) @RequestParam Integer days){
|
|
|
AlarmDetailsDto alarmDetailsDto=new AlarmDetailsDto();
|
|
|
- alarmDetailsDto.setSceneTypeName(sceneTypeName);
|
|
|
+ alarmDetailsDto.setId(sceneId);
|
|
|
alarmDetailsDto.setDays(days);
|
|
|
alarmDetailsDto.setSceneIds(sceneService.findByParentIdsLike(null));
|
|
|
return new AjaxMessage<>(ResultStatus.OK, onlineMonitorService.selectAlarmStats(alarmDetailsDto));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取在线数据
|
|
|
+ */
|
|
|
+ public void GetOnlineData(List<MonitorDataCollectDto> result){
|
|
|
+ for(MonitorDataCollectDto monDataCol : result) {
|
|
|
+ for(MonitorDataDto monData : monDataCol.getMonitorDataEntities()) {
|
|
|
+ //取缓存里的数据
|
|
|
+ byte[] bytes = redisUtil.get(("sms_water_"+monData.getDeviceCode()).getBytes());
|
|
|
+ if(bytes != null && bytes.length>0){
|
|
|
+ MonitorDataEntity monitorDataEntity= (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
|
|
|
+ //筛选该设备相同属性的值
|
|
|
+ List<MonitorDataValueEntity> attributeEntities=monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
|
|
|
+ ->m.getAttributeId().equals(monData.getAttributeId())).collect(Collectors.toList());
|
|
|
+ MonitorDataValueEntity attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
|
|
|
+ if(attributeEntity != null) {
|
|
|
+ //赋值
|
|
|
+ monData.setDataValue(attributeEntity.getDataValue());
|
|
|
+ monData.setUnit(attributeEntity.getUnit());
|
|
|
+ if (monData.getAttributeType() != null && (monData.getAttributeType().equals("1") || monData.getAttributeType().equals("2"))) {//如果是状态值 需转换
|
|
|
+ String specsValue = attributeEntity.getDataValue() == null ? null : attributeEntity.getDataValue().toString();
|
|
|
+ monData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 计算数据
|
|
|
+ */
|
|
|
+ public void CalculateOnlineData(List<MonitorDataCollectDto> result,List<MonitorDataCollectDto> calculateRes){
|
|
|
+ for(MonitorDataCollectDto calculate :calculateRes ) {
|
|
|
+ for(MonitorDataCollectDto monDataCol : result) {
|
|
|
+ //相同场景 则计算
|
|
|
+ if(monDataCol.getSceneId().equals(calculate.getSceneId())) {
|
|
|
+ for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
|
|
|
+ //取缓存里的数据
|
|
|
+ byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
|
|
|
+ if(bytes != null && bytes.length>0) {
|
|
|
+ MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
|
|
|
+ //筛选该设备相同属性的值
|
|
|
+ List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
|
|
|
+ -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
|
|
|
+ MonitorDataValueEntity attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
|
|
|
+ if (attributeEntity != null) {
|
|
|
+ Double attributeDiffValue =0d;
|
|
|
+ if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
|
|
|
+ attributeDiffValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
|
|
|
+ }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
|
|
|
+ attributeDiffValue=attributeEntity.getDataValue();
|
|
|
+ }
|
|
|
+ Double attributeValue = monitorData.getSumValue() != null ? monitorData.getSumValue() + attributeDiffValue : attributeDiffValue;
|
|
|
+ switch (monitorData.getAttributeType()) {
|
|
|
+ case "3":
|
|
|
+ monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 获取在线数据及计算数据
|
|
|
+ */
|
|
|
+ public void GetCalOnlineData(List<OnlineDataDto> result,List<MonitorDataCollectDto> calculateRes){
|
|
|
+ for(MonitorDataCollectDto calculate :calculateRes ) {
|
|
|
+ for(OnlineDataDto monDataCol : result) {
|
|
|
+ //相同场景 则计算
|
|
|
+ if(monDataCol.getSceneId().equals(calculate.getSceneId())) {
|
|
|
+ List<MonitorDataDto> pumpStatus=new ArrayList<>(0);//水泵状态
|
|
|
+ for(MonitorDataDto monitorData : calculate.getMonitorDataEntities()){
|
|
|
+ //取缓存里的数据
|
|
|
+ byte[] bytes = redisUtil.get(("sms_water_"+monitorData.getDeviceCode()).getBytes());
|
|
|
+ if(bytes != null && bytes.length>0) {
|
|
|
+ MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
|
|
|
+ //筛选该设备相同属性的值
|
|
|
+ List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m)
|
|
|
+ -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList());
|
|
|
+ MonitorDataValueEntity attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null;
|
|
|
+ if (attributeEntity != null) {
|
|
|
+ Double attributeDiffValue =0d;
|
|
|
+ if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){
|
|
|
+ attributeDiffValue=attributeEntity.getDataValue() - monitorData.getLatestValue();
|
|
|
+ }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) {
|
|
|
+ attributeDiffValue=attributeEntity.getDataValue();
|
|
|
+ }
|
|
|
+ Double attributeValue = monitorData.getSumValue() != null ? monitorData.getSumValue() + attributeDiffValue : attributeDiffValue;
|
|
|
+ //实时数据
|
|
|
+ monitorData.setDataValue(attributeEntity.getDataValue());
|
|
|
+ monitorData.setUnit(attributeEntity.getUnit());
|
|
|
+ switch (monitorData.getAttributeType()) {
|
|
|
+ case "3"://供水量or出水量
|
|
|
+ monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "4"://取水量or进水量
|
|
|
+ monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "5"://耗电量
|
|
|
+ monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "6"://耗药量
|
|
|
+ monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue);
|
|
|
+ break;
|
|
|
+ case "7"://取水PHor进水PH
|
|
|
+ monDataCol.setIntakePh(monitorData);
|
|
|
+ break;
|
|
|
+ case "8"://供水PHor出水PH
|
|
|
+ monDataCol.setYieldPh(monitorData);
|
|
|
+ break;
|
|
|
+ case "9"://取水浊度or进水浊度
|
|
|
+ monDataCol.setIntakeTurbidity(monitorData);
|
|
|
+ break;
|
|
|
+ case "10"://供水浊度or出水浊度
|
|
|
+ monDataCol.setYieldTurbidity(monitorData);
|
|
|
+ break;
|
|
|
+ case "11"://余氯
|
|
|
+ monDataCol.setResidualChlorine(monitorData);
|
|
|
+ break;
|
|
|
+ case "12"://水位
|
|
|
+ monDataCol.setWaterLevel(monitorData);
|
|
|
+ break;
|
|
|
+ case "13"://压力
|
|
|
+ monDataCol.setPressure(monitorData);
|
|
|
+ break;
|
|
|
+ case "14"://瞬时流量
|
|
|
+ monDataCol.setInstantFlow(monitorData);
|
|
|
+ break;
|
|
|
+ case "2"://水泵状态
|
|
|
+ String specsValue = attributeEntity.getDataValue() == null ? null : attributeEntity.getDataValue().toString();
|
|
|
+ monitorData.setSpecsName(specsValue == null ? null : deviceAttributeSpecsService.selectSpecsName(attributeEntity.getAttributeId(), specsValue));
|
|
|
+ pumpStatus.add(monitorData);
|
|
|
+ monDataCol.setPumpStatus(pumpStatus);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|