|
|
@@ -2,6 +2,7 @@ package com.usky.ems.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.usky.common.security.utils.SecurityUtils;
|
|
|
import com.usky.ems.domain.*;
|
|
|
import com.usky.ems.mapper.*;
|
|
|
@@ -12,7 +13,6 @@ import com.usky.ems.service.vo.EmsAttributePointVO;
|
|
|
import com.usky.ems.service.vo.EmsEnergyTypeVO;
|
|
|
import com.usky.ems.service.vo.EmsGatewayDeviceTreeNode;
|
|
|
import com.usky.ems.service.vo.EmsModelSaveRequest;
|
|
|
-import com.usky.ems.service.vo.EmsStructureTreeNode;
|
|
|
import com.usky.ems.service.vo.SimpleProductVO;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -27,6 +27,7 @@ import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
import java.util.UUID;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -36,6 +37,9 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class EmsModelServiceImpl implements EmsModelService {
|
|
|
|
|
|
+ /** 热循环,建模与概览页均不展示 */
|
|
|
+ private static final int EXCLUDED_ENERGY_TYPE = 5;
|
|
|
+
|
|
|
@Autowired
|
|
|
private BaseSpaceMapper baseSpaceMapper;
|
|
|
@Autowired
|
|
|
@@ -59,7 +63,15 @@ public class EmsModelServiceImpl implements EmsModelService {
|
|
|
@Autowired
|
|
|
private DmpProductMapper dmpProductMapper;
|
|
|
@Autowired
|
|
|
+ private EmsProductEnergyTypeMapper emsProductEnergyTypeMapper;
|
|
|
+ @Autowired
|
|
|
+ private DmpDeviceMapper dmpDeviceMapper;
|
|
|
+ @Autowired
|
|
|
+ private DmpDeviceStatusMapper dmpDeviceStatusMapper;
|
|
|
+ @Autowired
|
|
|
private BaseSpaceServiceImpl baseSpaceService;
|
|
|
+ @Autowired
|
|
|
+ private EmsEnergyItemCodeMapper emsEnergyItemCodeMapper;
|
|
|
|
|
|
private static final int SPACE_TYPE_PROJECT = 1;
|
|
|
private static final int SPACE_TYPE_REGION = 2;
|
|
|
@@ -153,20 +165,78 @@ public class EmsModelServiceImpl implements EmsModelService {
|
|
|
|
|
|
@Override
|
|
|
public List<EmsEnergyTypeVO> getEnergyTypeList() {
|
|
|
- String[] names = {"", "电", "水", "气"};
|
|
|
- String[] codes = {"", "electric", "water", "gas"};
|
|
|
- String[] units = {"", "kWh", "m³", "m³"};
|
|
|
- List<EmsEnergyTypeVO> result = new ArrayList<>();
|
|
|
- for (int i = 1; i <= 3; i++) {
|
|
|
- EmsEnergyTypeVO vo = new EmsEnergyTypeVO();
|
|
|
- vo.setId((long) i);
|
|
|
- vo.setName(names[i]);
|
|
|
- vo.setCode(codes[i]);
|
|
|
- vo.setUnit(units[i]);
|
|
|
- vo.setSortOrder(i - 1);
|
|
|
- result.add(vo);
|
|
|
+ List<DmpProduct> products = dmpProductMapper.selectList(
|
|
|
+ Wrappers.<DmpProduct>lambdaQuery()
|
|
|
+ .eq(DmpProduct::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .eq(DmpProduct::getDeleteFlag, 0)
|
|
|
+ );
|
|
|
+ if (products.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> productIds = products.stream()
|
|
|
+ .map(DmpProduct::getId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(Integer::longValue)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (productIds.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<EmsProductEnergyType> energyTypeList = emsProductEnergyTypeMapper.selectList(
|
|
|
+ Wrappers.<EmsProductEnergyType>lambdaQuery()
|
|
|
+ .in(EmsProductEnergyType::getProductId, productIds)
|
|
|
+ );
|
|
|
+ if (energyTypeList.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Integer, EmsEnergyItemCode> rootItemByEnergyType = emsEnergyItemCodeMapper.selectList(
|
|
|
+ Wrappers.<EmsEnergyItemCode>lambdaQuery()
|
|
|
+ .eq(EmsEnergyItemCode::getParentCode, "0")
|
|
|
+ ).stream()
|
|
|
+ .filter(item -> item.getEnergyType() != null)
|
|
|
+ .collect(Collectors.toMap(EmsEnergyItemCode::getEnergyType, item -> item, (a, b) -> a));
|
|
|
+
|
|
|
+ AtomicInteger sortOrder = new AtomicInteger(0);
|
|
|
+ return energyTypeList.stream()
|
|
|
+ .map(EmsProductEnergyType::getEnergyType)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .filter(type -> type != EXCLUDED_ENERGY_TYPE)
|
|
|
+ .distinct()
|
|
|
+ .sorted()
|
|
|
+ .map(type -> {
|
|
|
+ EmsEnergyItemCode itemCode = rootItemByEnergyType.get(type);
|
|
|
+ if (itemCode == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ EmsEnergyTypeVO vo = new EmsEnergyTypeVO();
|
|
|
+ vo.setId(type.longValue());
|
|
|
+ vo.setName(itemCode.getName());
|
|
|
+ vo.setCode(itemCode.getIdentifier());
|
|
|
+ vo.setUnit(StringUtils.isNotBlank(itemCode.getUnit()) ? itemCode.getUnit() : energyTypeUnit(type));
|
|
|
+ vo.setSortOrder(sortOrder.getAndIncrement());
|
|
|
+ return vo;
|
|
|
+ })
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String energyTypeUnit(Integer energyType) {
|
|
|
+ if (energyType == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ switch (energyType) {
|
|
|
+ case 1:
|
|
|
+ return "kWh";
|
|
|
+ case 2:
|
|
|
+ return "m³";
|
|
|
+ case 3:
|
|
|
+ case 4:
|
|
|
+ return "kWh";
|
|
|
+ default:
|
|
|
+ return "";
|
|
|
}
|
|
|
- return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -759,10 +829,10 @@ public class EmsModelServiceImpl implements EmsModelService {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- List<DmpGateway> gateways = dmpGatewayMapper.selectList(
|
|
|
- new LambdaQueryWrapper<DmpGateway>().in(DmpGateway::getDeviceUuid, normalizedUuids));
|
|
|
+ List<DmpDevice> gateways = dmpDeviceMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<DmpDevice>().in(DmpDevice::getDeviceUuid, normalizedUuids));
|
|
|
Set<String> existsGatewayUuids = gateways.stream()
|
|
|
- .map(DmpGateway::getDeviceUuid)
|
|
|
+ .map(DmpDevice::getDeviceUuid)
|
|
|
.filter(Objects::nonNull)
|
|
|
.collect(Collectors.toSet());
|
|
|
if (existsGatewayUuids.isEmpty()) {
|
|
|
@@ -826,31 +896,33 @@ public class EmsModelServiceImpl implements EmsModelService {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
- List<DmpGateway> gateways = dmpGatewayMapper.selectList(
|
|
|
- new LambdaQueryWrapper<DmpGateway>().in(DmpGateway::getDeviceUuid, gatewayUuids));
|
|
|
+ List<DmpDevice> gateways = dmpDeviceMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<DmpDevice>()
|
|
|
+ .in(DmpDevice::getDeviceUuid, gatewayUuids)
|
|
|
+ .eq(DmpDevice::getDeleteFlag, 0));
|
|
|
if (gateways == null || gateways.isEmpty()) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusMapper.selectList(
|
|
|
+ Wrappers.<DmpDeviceStatus>lambdaQuery().in(DmpDeviceStatus::getDeviceUuid, gatewayUuids));
|
|
|
+ Map<String, DmpDeviceStatus> statusByUuid = statusList == null ? Collections.emptyMap()
|
|
|
+ : statusList.stream()
|
|
|
+ .filter(s -> s.getDeviceUuid() != null)
|
|
|
+ .collect(Collectors.toMap(DmpDeviceStatus::getDeviceUuid, s -> s, (a, b) -> a));
|
|
|
+
|
|
|
return gateways.stream().map(item -> {
|
|
|
DmpGatewayDetailResponse resp = new DmpGatewayDetailResponse();
|
|
|
resp.setId(item.getId());
|
|
|
resp.setDeviceUuid(item.getDeviceUuid());
|
|
|
- resp.setName(item.getName());
|
|
|
- resp.setIp(item.getIp());
|
|
|
- resp.setPort(item.getPort());
|
|
|
- resp.setCommunicationStatus(item.getCommStatus());
|
|
|
- resp.setOnlineTime(item.getOnlineTime());
|
|
|
- resp.setOfflineTime(item.getOfflineTime());
|
|
|
- resp.setUpdateConfigTime(item.getUpdateConfigTime());
|
|
|
- resp.setUpdateProtocolTime(item.getUpdateProtocolTime());
|
|
|
- resp.setUpgradeTime(item.getUpgradeTime());
|
|
|
- resp.setVirtualDevice(item.getVirtualDevice());
|
|
|
- resp.setRemark(item.getRemark());
|
|
|
- resp.setUpdatedBy(item.getUpdatedBy());
|
|
|
- resp.setUpdateTime(item.getUpdateTime());
|
|
|
- resp.setCreatedBy(item.getCreatedBy());
|
|
|
- resp.setCreateTime(item.getCreateTime());
|
|
|
+ resp.setName(item.getDeviceName());
|
|
|
+ resp.setInstallAddress(item.getInstallAddress());
|
|
|
+ DmpDeviceStatus status = statusByUuid.get(item.getDeviceUuid());
|
|
|
+ if (status != null) {
|
|
|
+ resp.setCommunicationStatus(status.getDeviceStatus());
|
|
|
+ resp.setOnlineTime(status.getLastOnlineTime());
|
|
|
+ resp.setOfflineTime(status.getLastOfflineTime());
|
|
|
+ }
|
|
|
return resp;
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|