123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- package com.huaxu.service;
- import com.huaxu.common.StringUtils;
- import com.huaxu.dto.AlarmDetailsDto;
- import com.huaxu.dto.AppSmsDataDto;
- import com.huaxu.dto.SceneDataDto;
- import com.huaxu.dto.SceneDataForAppDto;
- import com.huaxu.entity.*;
- import com.huaxu.util.ByteArrayUtils;
- import com.huaxu.util.RedisUtil;
- import io.swagger.annotations.ApiParam;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.annotation.RequestParam;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- @Service
- public class AppDataService {
- @Autowired
- private MonitorDataReportService monitorDataReportService;
- @Autowired
- private MonitorInfoService monitorInfoService;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private AlarmDetailsService alarmDetailsService;
- @Autowired
- private DeviceAttributeSpecsService deviceAttributeSpecsService;
- @Autowired
- private DeviceParmService deviceParmService;
- @Autowired
- private SceneService sceneService;
- @Autowired
- private DeviceAttributeService deviceAttributeService;
- /**
- * 查询场景信息
- *
- * @param typeName 类型名称(水源、水厂、泵站、售水)
- * @return
- */
- public AppSmsDataDto getProductionDataForSameMonth(String typeName) {
- //3用水量or供水量or制水量 4 取水量or进水量 5耗电量 6耗药量
- AppSmsDataDto appSmsDataDto = new AppSmsDataDto();
- switch (typeName) {
- case "水源":
- appSmsDataDto.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, null, typeName, 4, 2).divide(BigDecimal.valueOf(10000)).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- appSmsDataDto.setPowerUsage(monitorDataReportService.getAmountCount(null, null, typeName, 5, 2).divide(BigDecimal.valueOf(10000)).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- break;
- case "水厂":
- appSmsDataDto.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, null, typeName, 3, 2).divide(BigDecimal.valueOf(10000)).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- appSmsDataDto.setPowerUsage(monitorDataReportService.getAmountCount(null, null, typeName, 5, 2).divide(BigDecimal.valueOf(10000)).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- appSmsDataDto.setDrugUsage(monitorDataReportService.getAmountCount(null, null, typeName, 6, 2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- break;
- case "泵站":
- appSmsDataDto.setYieldWaterUsage(monitorDataReportService.getAmountCount(null, null, typeName, 3, 2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- appSmsDataDto.setPowerUsage(monitorDataReportService.getAmountCount(null, null, typeName, 5, 2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- break;
- case "售水":
- appSmsDataDto.setYieldWaterUsage(monitorDataReportService.getAmountCount(null, null, "水厂", 3, 2).divide(BigDecimal.valueOf(10000)).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
- appSmsDataDto.setWaterUsage(monitorDataReportService.getUseAmount(null, 1).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue());
- double amount = appSmsDataDto.getYieldWaterUsage() - appSmsDataDto.getWaterUsage();
- if (appSmsDataDto.getYieldWaterUsage() != null && appSmsDataDto.getYieldWaterUsage() != 0d) {
- appSmsDataDto.setWaterFeeRecoveryRate(BigDecimal.valueOf(amount).divide(BigDecimal.valueOf(appSmsDataDto.getYieldWaterUsage()),5,BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
- }
- break;
- }
- return appSmsDataDto;
- }
- /**
- * 获取总量信息
- * @param typeName
- * @param id
- * @return
- */
- public void getTotalAmount(SceneDataForAppDto returnInfo,String typeName,Long id) {
- switch (typeName) {
- case "水源":
- returnInfo.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).divide(BigDecimal.valueOf(10000),3,BigDecimal.ROUND_HALF_UP).doubleValue() + "万m³");
- returnInfo.setPowerUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).divide(BigDecimal.valueOf(10000),3,BigDecimal.ROUND_HALF_UP).doubleValue() + "万kw");
- break;
- case "水厂":
- returnInfo.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).divide(BigDecimal.valueOf(10000),3,BigDecimal.ROUND_HALF_UP).doubleValue() + "万m³");
- returnInfo.setYieldWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 3, 1).divide(BigDecimal.valueOf(10000),3,BigDecimal.ROUND_HALF_UP).doubleValue() + "万m³");
- returnInfo.setPowerUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).divide(BigDecimal.valueOf(10000),3,BigDecimal.ROUND_HALF_UP).doubleValue() + "万kw");
- returnInfo.setDrugUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 6, 1).doubleValue() + "kg");
- break;
- case "泵站":
- returnInfo.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 4, 1).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue() + "m³");
- returnInfo.setYieldWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 3, 1).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue() + "m³");
- returnInfo.setPowerUsage(monitorDataReportService.getAmountCount(null, id.intValue(), typeName, 5, 1).setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue() + "kw");
- break;
- }
- }
- /**
- * 工艺场景(详情)
- * @param typeName 类型名称(水源、水厂、泵站、售水)
- * @param id 场景ID
- * @return
- */
- public SceneDataForAppDto getSceneDataForApp(String typeName,Long id) {
- SceneDataForAppDto returnInfo = new SceneDataForAppDto();
- SceneEntity sceneEntity = sceneService.findSceneByIdForApp(id);
- if (sceneEntity != null) {
- returnInfo.setAddress(sceneEntity.getAddress());
- returnInfo.setSceneName(sceneEntity.getSceneName());
- returnInfo.setImagePath(sceneEntity.getSceneImages().size() > 0 ? sceneEntity.getSceneImages().get(0).getImagePath() : null);
- getTotalAmount(returnInfo,typeName,id);
- } else {
- return null;
- }
- List<SceneDataDto> sceneDataDtos = new ArrayList<>();
- List<String> deviceCodes = new ArrayList<>();
- //查询到所有的测点信息
- List<DeviceParmEntity> deviceParmEntities = deviceParmService.selectByScendId(id.intValue());
- Map<String, List<AlarmDetailsDto>> alarms = new HashMap<>();
- Map<String, List<DeviceParmEntity>> parmMap = new HashMap<>();
- for (DeviceParmEntity deviceParmEntity : deviceParmEntities) {
- if (!deviceCodes.contains(deviceParmEntity.getDeviceCode())) {
- deviceCodes.add(deviceParmEntity.getDeviceCode());
- //查询报警信息
- List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailsService.selectByDeviceId(id,deviceParmEntity.getDeviceId());
- alarms.put(deviceParmEntity.getDeviceCode(), alarmDetailsDtos);
- List<DeviceParmEntity> deviceParms = new ArrayList<>();
- deviceParms.add(deviceParmEntity);
- parmMap.put(deviceParmEntity.getDeviceCode(), deviceParms);
- } else {
- parmMap.get(deviceParmEntity.getDeviceCode()).add(deviceParmEntity);
- }
- }
- for (String deveiceCode : deviceCodes) {
- byte[] bytes = redisUtil.get(("sms_water_" + deveiceCode).getBytes());
- //将报警信息放置map中
- Map<Integer, AlarmDetailsDto> mapAlarm = new HashMap<>();
- List<AlarmDetailsDto> alarmDetailsDtos = alarms.get(deveiceCode);
- mapAlarm = alarmDetailsDtos.stream().collect(Collectors.toMap(AlarmDetailsDto::getAttributeId, a -> a, (k1, k2) -> k1));
- //将缓存中的实时数据放到map中方便进行遍历
- if (bytes != null && bytes.length > 0) {
- MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
- Map<Long, MonitorDataValueEntity> map = new HashMap<>();
- returnInfo.setCollectDate(monitorDataEntity.getCollectDate());
- //将缓存中的实时数据放到map中方便进行遍历
- map = monitorDataEntity.getDataValues().stream().collect(Collectors.toMap(MonitorDataValueEntity::getAttributeId, a -> a, (k1, k2) -> k1));
- for (DeviceParmEntity item : parmMap.get(deveiceCode)) {
- SceneDataDto sceneDataDto = new SceneDataDto();
- sceneDataDto.setMonitorName(item.getAttributeName());
- //按属性ID查询标签值
- DeviceAttributeSpecsEntity deviceAttributeSpecsEntity = new DeviceAttributeSpecsEntity();
- deviceAttributeSpecsEntity.setAttributeId(Long.valueOf(item.getAttributeId()));
- List<DeviceAttributeSpecsEntity> deviceAttributeSpecsEntities = deviceAttributeSpecsService.findList(deviceAttributeSpecsEntity);
- if (map.containsKey(item.getAttributeId().longValue())) {
- Double value = map.get(item.getAttributeId().longValue()).getDataValue();
- if (value != null) {
- if (deviceAttributeSpecsEntities.size() > 0) {
- for (DeviceAttributeSpecsEntity specsEntity : deviceAttributeSpecsEntities)
- if (Integer.valueOf(specsEntity.getSpecsValue()) == value.intValue()) {
- sceneDataDto.setMonitorValue(specsEntity.getSpecsName());
- }
- } else {
- DeviceAttributeEntity deviceAttributeEntity = deviceAttributeService.getById(item.getAttributeId());
- String unit = "";
- if (deviceAttributeEntity != null && deviceAttributeEntity.getUnit() != null)
- unit = deviceAttributeEntity.getUnit();
- sceneDataDto.setMonitorValue(String.format("%.3f", map.get(item.getAttributeId().longValue()).getDataValue()) + unit);
- }
- }
- }
- //判断是否报警
- if (mapAlarm.containsKey(item.getAttributeId().intValue()))
- sceneDataDto.setIsAlarm(1);
- else
- sceneDataDto.setIsAlarm(0);
- sceneDataDtos.add(sceneDataDto);
- }
- }else
- {
- for (DeviceParmEntity item : parmMap.get(deveiceCode)) {
- SceneDataDto sceneDataDto = new SceneDataDto();
- sceneDataDto.setMonitorName(item.getAttributeName());
- sceneDataDtos.add(sceneDataDto);
- }
- }
- }
- returnInfo.setInfos(sceneDataDtos);
- return returnInfo;
- }
- }
|