|
@@ -3,10 +3,15 @@ package com.usky.ems.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
|
|
+import com.usky.common.security.utils.SecurityUtils;
|
|
|
|
|
+import com.usky.ems.domain.EmsDeviceItemCode;
|
|
|
import com.usky.ems.domain.EmsEnergyConsumptionFormula;
|
|
import com.usky.ems.domain.EmsEnergyConsumptionFormula;
|
|
|
import com.usky.ems.domain.EmsEnergyItemCode;
|
|
import com.usky.ems.domain.EmsEnergyItemCode;
|
|
|
|
|
+import com.usky.ems.domain.EmsProductEnergyType;
|
|
|
|
|
+import com.usky.ems.mapper.EmsDeviceItemCodeMapper;
|
|
|
import com.usky.ems.mapper.EmsEnergyConsumptionFormulaMapper;
|
|
import com.usky.ems.mapper.EmsEnergyConsumptionFormulaMapper;
|
|
|
import com.usky.ems.mapper.EmsEnergyItemCodeMapper;
|
|
import com.usky.ems.mapper.EmsEnergyItemCodeMapper;
|
|
|
|
|
+import com.usky.ems.mapper.EmsProductEnergyTypeMapper;
|
|
|
import com.usky.ems.service.EmsEnergyItemCodeService;
|
|
import com.usky.ems.service.EmsEnergyItemCodeService;
|
|
|
import com.usky.ems.service.vo.EnergyItemCodeVO;
|
|
import com.usky.ems.service.vo.EnergyItemCodeVO;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -25,6 +30,10 @@ public class EmsEnergyItemCodeServiceImpl
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private EmsEnergyConsumptionFormulaMapper energyConsumptionFormulaMapper;
|
|
private EmsEnergyConsumptionFormulaMapper energyConsumptionFormulaMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private EmsProductEnergyTypeMapper emsProductEnergyTypeMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private EmsDeviceItemCodeMapper emsDeviceItemCodeMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<EnergyItemCodeVO> querySpaceEnergyItem(Long spaceId) {
|
|
public List<EnergyItemCodeVO> querySpaceEnergyItem(Long spaceId) {
|
|
@@ -109,15 +118,21 @@ public class EmsEnergyItemCodeServiceImpl
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<EmsEnergyItemCode> listEnergyTypes() {
|
|
public List<EmsEnergyItemCode> listEnergyTypes() {
|
|
|
- return this.list(
|
|
|
|
|
- Wrappers.<EmsEnergyItemCode>lambdaQuery()
|
|
|
|
|
- .eq(EmsEnergyItemCode::getParentCode, "0")
|
|
|
|
|
- .orderByAsc(EmsEnergyItemCode::getCode));
|
|
|
|
|
|
|
+ List<EmsEnergyItemCode> energyTypes = listRootEnergyTypes();
|
|
|
|
|
+ if (energyTypes.isEmpty()) {
|
|
|
|
|
+ return energyTypes;
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<Integer, List<Long>> productIdsByEnergyType = loadProductIdsByEnergyType(SecurityUtils.getTenantId());
|
|
|
|
|
+ for (EmsEnergyItemCode energyType : energyTypes) {
|
|
|
|
|
+ energyType.setProductIdList(
|
|
|
|
|
+ productIdsByEnergyType.getOrDefault(energyType.getEnergyType(), Collections.emptyList()));
|
|
|
|
|
+ }
|
|
|
|
|
+ return energyTypes;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<EmsEnergyItemCode> listEnergySubItems() {
|
|
public List<EmsEnergyItemCode> listEnergySubItems() {
|
|
|
- List<String> rootCodes = listEnergyTypes().stream()
|
|
|
|
|
|
|
+ List<String> rootCodes = listRootEnergyTypes().stream()
|
|
|
.map(EmsEnergyItemCode::getCode)
|
|
.map(EmsEnergyItemCode::getCode)
|
|
|
.filter(Objects::nonNull)
|
|
.filter(Objects::nonNull)
|
|
|
.distinct()
|
|
.distinct()
|
|
@@ -125,10 +140,54 @@ public class EmsEnergyItemCodeServiceImpl
|
|
|
if (rootCodes.isEmpty()) {
|
|
if (rootCodes.isEmpty()) {
|
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
|
}
|
|
}
|
|
|
- return this.list(
|
|
|
|
|
|
|
+ List<EmsEnergyItemCode> energySubItems = this.list(
|
|
|
Wrappers.<EmsEnergyItemCode>lambdaQuery()
|
|
Wrappers.<EmsEnergyItemCode>lambdaQuery()
|
|
|
.in(EmsEnergyItemCode::getParentCode, rootCodes)
|
|
.in(EmsEnergyItemCode::getParentCode, rootCodes)
|
|
|
.orderByAsc(EmsEnergyItemCode::getParentCode, EmsEnergyItemCode::getCode));
|
|
.orderByAsc(EmsEnergyItemCode::getParentCode, EmsEnergyItemCode::getCode));
|
|
|
|
|
+ if (energySubItems.isEmpty()) {
|
|
|
|
|
+ return energySubItems;
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, List<String>> deviceUuidsByItemCode = loadDeviceUuidsByItemCode(SecurityUtils.getTenantId());
|
|
|
|
|
+ for (EmsEnergyItemCode energySubItem : energySubItems) {
|
|
|
|
|
+ energySubItem.setDeviceUuidList(
|
|
|
|
|
+ deviceUuidsByItemCode.getOrDefault(energySubItem.getCode(), Collections.emptyList()));
|
|
|
|
|
+ }
|
|
|
|
|
+ return energySubItems;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private List<EmsEnergyItemCode> listRootEnergyTypes() {
|
|
|
|
|
+ return this.list(
|
|
|
|
|
+ Wrappers.<EmsEnergyItemCode>lambdaQuery()
|
|
|
|
|
+ .eq(EmsEnergyItemCode::getParentCode, "0")
|
|
|
|
|
+ .orderByAsc(EmsEnergyItemCode::getCode));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Map<Integer, List<Long>> loadProductIdsByEnergyType(Integer tenantId) {
|
|
|
|
|
+ List<EmsProductEnergyType> bindings = emsProductEnergyTypeMapper.selectList(
|
|
|
|
|
+ Wrappers.<EmsProductEnergyType>lambdaQuery()
|
|
|
|
|
+ .eq(EmsProductEnergyType::getTenantId, tenantId));
|
|
|
|
|
+ if (bindings.isEmpty()) {
|
|
|
|
|
+ return Collections.emptyMap();
|
|
|
|
|
+ }
|
|
|
|
|
+ return bindings.stream()
|
|
|
|
|
+ .filter(binding -> binding.getEnergyType() != null && binding.getProductId() != null)
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ EmsProductEnergyType::getEnergyType,
|
|
|
|
|
+ Collectors.mapping(EmsProductEnergyType::getProductId, Collectors.toList())));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Map<String, List<String>> loadDeviceUuidsByItemCode(Integer tenantId) {
|
|
|
|
|
+ List<EmsDeviceItemCode> bindings = emsDeviceItemCodeMapper.selectList(
|
|
|
|
|
+ Wrappers.<EmsDeviceItemCode>lambdaQuery()
|
|
|
|
|
+ .eq(EmsDeviceItemCode::getTenantId, tenantId));
|
|
|
|
|
+ if (bindings.isEmpty()) {
|
|
|
|
|
+ return Collections.emptyMap();
|
|
|
|
|
+ }
|
|
|
|
|
+ return bindings.stream()
|
|
|
|
|
+ .filter(binding -> binding.getItemCode() != null && binding.getDeviceUuid() != null)
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ EmsDeviceItemCode::getItemCode,
|
|
|
|
|
+ Collectors.mapping(EmsDeviceItemCode::getDeviceUuid, Collectors.toList())));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|