|
|
|
|
@ -15,13 +15,20 @@ import com.os.ems.report.domain.EnergyStatisticalReport;
|
|
|
|
|
import com.os.ems.report.domain.PeaksValleysConsumptionReport;
|
|
|
|
|
import com.os.ems.report.domain.RealTimeDataBo;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportMapper;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportPointAirMapper;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportPointDnbMapper;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportPointNitrogenMapper;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportPointSteamMapper;
|
|
|
|
|
import com.os.ems.report.mapper.EmsReportPointWaterMapper;
|
|
|
|
|
import com.os.ems.report.service.IEmsBoardService;
|
|
|
|
|
import com.os.ems.report.service.IEmsReportService;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@ -58,6 +65,18 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportPointDnbMapper emsReportPointDnbMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportPointWaterMapper emsReportPointWaterMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportPointSteamMapper emsReportPointSteamMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportPointAirMapper emsReportPointAirMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportPointNitrogenMapper emsReportPointNitrogenMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsBaseWorkUnitMapper emsBaseWorkUnitMapper;
|
|
|
|
|
|
|
|
|
|
@ -73,6 +92,9 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private EmsReportMapper emsReportMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IEmsReportService emsReportService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 实时数据接口
|
|
|
|
|
*
|
|
|
|
|
@ -101,6 +123,27 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
return reportList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<RealTimeDataBo> realTimeDataByEnergy(Map hashMap) {
|
|
|
|
|
if (!hashMap.containsKey("monitorType")) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
String monitorType = String.valueOf(hashMap.get("monitorType"));
|
|
|
|
|
List<RealTimeDataBo> reportList = new ArrayList<>();
|
|
|
|
|
if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) {
|
|
|
|
|
reportList = emsRecordDnbInstantMapper.realTimeDataByEnergy(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) {
|
|
|
|
|
reportList = emsRecordWaterInstantMapper.realTimeDataByEnergy(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) {
|
|
|
|
|
reportList = emsRecordSteamInstantMapper.realTimeDataByEnergy(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) {
|
|
|
|
|
reportList = emsRecordAirInstantMapper.realTimeDataByEnergy(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) {
|
|
|
|
|
reportList = emsRecordNitrogenInstantMapper.realTimeDataByEnergy(hashMap);
|
|
|
|
|
}
|
|
|
|
|
return reportList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 厂区看板-设备总览接口
|
|
|
|
|
* @param hashMap
|
|
|
|
|
@ -114,6 +157,7 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
List<EmsBaseCollectDeviceInfo> deviceInfoList = emsBaseCollectDeviceInfoMapper.selectEmsBaseCollectDeviceInfoList(deviceInfo);
|
|
|
|
|
EmsBaseMonitorInfo monitorInfo = new EmsBaseMonitorInfo();
|
|
|
|
|
monitorInfo.setIsAmmeter(EmsConstants.EMS_IS_AMMETER_NO);
|
|
|
|
|
monitorInfo.setMonitorStatus(0L);
|
|
|
|
|
List<EmsBaseMonitorInfo> monitorInfoList = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoList(monitorInfo);
|
|
|
|
|
Long dnbSum = 0L;
|
|
|
|
|
Long waterSum = 0L;
|
|
|
|
|
@ -163,6 +207,14 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
hashMap.put("endCollectTime", monthEnd);
|
|
|
|
|
if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) {
|
|
|
|
|
reportList = emsReportPointDnbMapper.selectWorkUnitTotalConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) {
|
|
|
|
|
reportList = emsReportPointWaterMapper.selectWorkUnitTotalConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) {
|
|
|
|
|
reportList = emsReportPointSteamMapper.selectWorkUnitTotalConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) {
|
|
|
|
|
reportList = emsReportPointAirMapper.selectWorkUnitTotalConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) {
|
|
|
|
|
reportList = emsReportPointNitrogenMapper.selectWorkUnitTotalConsumption(hashMap);
|
|
|
|
|
}
|
|
|
|
|
result.put("ranking", reportList);
|
|
|
|
|
result.put("statistics", reportList);
|
|
|
|
|
@ -177,7 +229,46 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
@Override
|
|
|
|
|
public HashMap<String, Object> peaksValleysConsumption(Map hashMap) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
List<HashMap<String, String>> reportList = emsReportPointDnbMapper.peaksValleysConsumption(hashMap);
|
|
|
|
|
if (hashMap == null) {
|
|
|
|
|
hashMap = new HashMap();
|
|
|
|
|
}
|
|
|
|
|
String monitorType = String.valueOf(hashMap.getOrDefault("monitorType", EmsConstants.EMS_ENERGY_TYPE_DNB));
|
|
|
|
|
Map<String, String> dateTimeRanges = DateUtils.getDateTimeRanges();
|
|
|
|
|
String currentTime = dateTimeRanges.get("currentTime");
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
String beginTime = LocalDateTime.parse(dateTimeRanges.get("todayStart"), formatter).minusDays(6).format(formatter);
|
|
|
|
|
|
|
|
|
|
HashMap<String, Object> queryMap = new HashMap<>();
|
|
|
|
|
queryMap.put("energyType", monitorType);
|
|
|
|
|
queryMap.put("dateType", 10);
|
|
|
|
|
queryMap.put("beginCollectTime", beginTime);
|
|
|
|
|
queryMap.put("endCollectTime", currentTime);
|
|
|
|
|
queryMap.put("excludeObjId", 1);
|
|
|
|
|
|
|
|
|
|
List<EnergyStatisticalReport> sourceList = emsReportService.energyStatisticalReportList(queryMap);
|
|
|
|
|
if (sourceList == null) {
|
|
|
|
|
sourceList = new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 按 日期+统计单元 聚合,供前端饼图/柱图使用
|
|
|
|
|
Map<String, BigDecimal> groupedMap = new LinkedHashMap<>();
|
|
|
|
|
for (EnergyStatisticalReport item : sourceList) {
|
|
|
|
|
String date = item.getBeginTime();
|
|
|
|
|
String unitName = item.getWorkUnitName();
|
|
|
|
|
String key = date + "|" + unitName;
|
|
|
|
|
BigDecimal expend = item.getExpend() == null ? BigDecimal.ZERO : item.getExpend();
|
|
|
|
|
groupedMap.put(key, groupedMap.getOrDefault(key, BigDecimal.ZERO).add(expend));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<HashMap<String, String>> reportList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, BigDecimal> entry : groupedMap.entrySet()) {
|
|
|
|
|
String[] keyPart = entry.getKey().split("\\|", 2);
|
|
|
|
|
HashMap<String, String> row = new HashMap<>();
|
|
|
|
|
row.put("date", keyPart[0]);
|
|
|
|
|
row.put("unitName", keyPart.length > 1 ? keyPart[1] : "");
|
|
|
|
|
row.put("expend", entry.getValue().setScale(2, RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
reportList.add(row);
|
|
|
|
|
}
|
|
|
|
|
result.put("reportList", reportList);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
@ -190,16 +281,32 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
@Override
|
|
|
|
|
public HashMap<String, Object> fiveConsumptionStatistics(Map hashMap) {
|
|
|
|
|
HashMap<String, Object> result = new LinkedHashMap<>();
|
|
|
|
|
result.put("dnbSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random()))));
|
|
|
|
|
result.put("waterSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random()))));
|
|
|
|
|
result.put("steamSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random()))));
|
|
|
|
|
result.put("airSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random()))));
|
|
|
|
|
result.put("nitrogenSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random()))));
|
|
|
|
|
result.put("dnbRate", new BigDecimal(String.format("%.2f", 100 * Math.random())));
|
|
|
|
|
result.put("waterRate", new BigDecimal(String.format("%.2f", 100 * Math.random())));
|
|
|
|
|
result.put("steamRate", new BigDecimal(String.format("%.2f", -100 * Math.random())));
|
|
|
|
|
result.put("airRate", new BigDecimal(String.format("%.2f", 100 * Math.random())));
|
|
|
|
|
result.put("nitrogenRate", new BigDecimal(String.format("%.2f", -100 * Math.random())));
|
|
|
|
|
Map<String, String> dateTimeRanges = DateUtils.getDateTimeRanges();
|
|
|
|
|
String todayStart = dateTimeRanges.get("todayStart");
|
|
|
|
|
String currentTime = dateTimeRanges.get("currentTime");
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
String yesterdayStart = LocalDateTime.parse(todayStart, formatter).minusDays(1).format(formatter);
|
|
|
|
|
String yesterdayCurrentTime = LocalDateTime.parse(currentTime, formatter).minusDays(1).format(formatter);
|
|
|
|
|
|
|
|
|
|
Map<String, BigDecimal> currentMap = getTodayConsumptionMap(todayStart, currentTime);
|
|
|
|
|
Map<String, BigDecimal> yesterdayMap = getTodayConsumptionMap(yesterdayStart, yesterdayCurrentTime);
|
|
|
|
|
|
|
|
|
|
BigDecimal dnbSum = currentMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_DNB, BigDecimal.ZERO);
|
|
|
|
|
BigDecimal waterSum = currentMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_WATER, BigDecimal.ZERO);
|
|
|
|
|
BigDecimal steamSum = currentMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_STEAM, BigDecimal.ZERO);
|
|
|
|
|
BigDecimal airSum = currentMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_Air, BigDecimal.ZERO);
|
|
|
|
|
BigDecimal nitrogenSum = currentMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_NITROGEN, BigDecimal.ZERO);
|
|
|
|
|
|
|
|
|
|
result.put("dnbSum", dnbSum);
|
|
|
|
|
result.put("waterSum", waterSum);
|
|
|
|
|
result.put("steamSum", steamSum);
|
|
|
|
|
result.put("airSum", airSum);
|
|
|
|
|
result.put("nitrogenSum", nitrogenSum);
|
|
|
|
|
result.put("dnbRate", calculateRate(dnbSum, yesterdayMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_DNB, BigDecimal.ZERO)));
|
|
|
|
|
result.put("waterRate", calculateRate(waterSum, yesterdayMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_WATER, BigDecimal.ZERO)));
|
|
|
|
|
result.put("steamRate", calculateRate(steamSum, yesterdayMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_STEAM, BigDecimal.ZERO)));
|
|
|
|
|
result.put("airRate", calculateRate(airSum, yesterdayMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_Air, BigDecimal.ZERO)));
|
|
|
|
|
result.put("nitrogenRate", calculateRate(nitrogenSum, yesterdayMap.getOrDefault(EmsConstants.EMS_ENERGY_TYPE_NITROGEN, BigDecimal.ZERO)));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -238,6 +345,14 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
}
|
|
|
|
|
if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) {
|
|
|
|
|
reportList = emsReportPointDnbMapper.selectWorkUnitDateConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) {
|
|
|
|
|
reportList = emsReportPointWaterMapper.selectWorkUnitDateConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) {
|
|
|
|
|
reportList = emsReportPointSteamMapper.selectWorkUnitDateConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) {
|
|
|
|
|
reportList = emsReportPointAirMapper.selectWorkUnitDateConsumption(hashMap);
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) {
|
|
|
|
|
reportList = emsReportPointNitrogenMapper.selectWorkUnitDateConsumption(hashMap);
|
|
|
|
|
}
|
|
|
|
|
result.put("reportList", reportList);
|
|
|
|
|
return result;
|
|
|
|
|
@ -260,12 +375,33 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public HashMap<String, Object> workshopColumns(Map hashMap) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
HashMap<String, Object> result = workshopEnergyBoard(hashMap);
|
|
|
|
|
Object column = result.get("column");
|
|
|
|
|
List<Map<String, Object>> columns = new ArrayList<>();
|
|
|
|
|
if (column instanceof Map) {
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
Map<String, Object> col = (Map<String, Object>) column;
|
|
|
|
|
columns.add(col);
|
|
|
|
|
}
|
|
|
|
|
result.put("columns", columns);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public HashMap<String, Object> workshopEnergyBoard(Map hashMap) {
|
|
|
|
|
Map<String, String> dateTimeRanges = DateUtils.getDateTimeRanges();
|
|
|
|
|
String monitorType = hashMap != null && hashMap.get("monitorType") != null
|
|
|
|
|
? String.valueOf(hashMap.get("monitorType"))
|
|
|
|
|
: EmsConstants.EMS_ENERGY_TYPE_DNB;
|
|
|
|
|
return buildWorkshopEnergyBoardResult(monitorType, dateTimeRanges);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private HashMap<String, Object> buildWorkshopEnergyBoardResult(String monitorType, Map<String, String> dateTimeRanges) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
HashMap<String, Object> query = new HashMap<>();
|
|
|
|
|
query.put("monitorType", monitorType);
|
|
|
|
|
query.put("beginCollectTime", dateTimeRanges.get("todayStart"));
|
|
|
|
|
query.put("endCollectTime", dateTimeRanges.get("currentTime"));
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> latestRows = emsReportMapper.selectWorkshopLatestRows(query);
|
|
|
|
|
List<Map<String, Object>> consumptionList = emsReportMapper.selectWorkshopTodayConsumption(query);
|
|
|
|
|
List<Map<String, Object>> perDeviceList = emsReportMapper.selectWorkshopTodayPerDevice(query);
|
|
|
|
|
@ -283,27 +419,26 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
perDeviceConsumption.put(type + "_" + code, toBigDecimal(row.get("rowTodayConsumption")));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LinkedHashMap<String, Map<String, Object>> colMap = new LinkedHashMap<>();
|
|
|
|
|
colMap.put(EmsConstants.EMS_ENERGY_TYPE_DNB, createColumn(EmsConstants.EMS_ENERGY_TYPE_DNB, "电", "kWh", consumptionMap));
|
|
|
|
|
colMap.put(EmsConstants.EMS_ENERGY_TYPE_WATER, createColumn(EmsConstants.EMS_ENERGY_TYPE_WATER, "水", "m³", consumptionMap));
|
|
|
|
|
colMap.put(EmsConstants.EMS_ENERGY_TYPE_STEAM, createColumn(EmsConstants.EMS_ENERGY_TYPE_STEAM, "蒸汽", "t", consumptionMap));
|
|
|
|
|
colMap.put(EmsConstants.EMS_ENERGY_TYPE_Air, createColumn(EmsConstants.EMS_ENERGY_TYPE_Air, "压缩空气", "m³", consumptionMap));
|
|
|
|
|
colMap.put(EmsConstants.EMS_ENERGY_TYPE_NITROGEN, createColumn(EmsConstants.EMS_ENERGY_TYPE_NITROGEN, "氮气", "m³", consumptionMap));
|
|
|
|
|
|
|
|
|
|
Map<String, Object> column = createColumn(
|
|
|
|
|
monitorType,
|
|
|
|
|
getEnergyName(monitorType),
|
|
|
|
|
getEnergyUnit(monitorType),
|
|
|
|
|
consumptionMap
|
|
|
|
|
);
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
List<Map<String, Object>> rows = (List<Map<String, Object>>) column.get("rows");
|
|
|
|
|
for (Map<String, Object> row : latestRows) {
|
|
|
|
|
String type = String.valueOf(row.get("monitorType"));
|
|
|
|
|
Map<String, Object> col = colMap.get(type);
|
|
|
|
|
if (col == null) {
|
|
|
|
|
if (!Objects.equals(type, monitorType)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
String code = String.valueOf(row.get("monitorCode"));
|
|
|
|
|
row.put("rowTodayConsumption", perDeviceConsumption.getOrDefault(type + "_" + code, BigDecimal.ZERO));
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
List<Map<String, Object>> rows = (List<Map<String, Object>>) col.get("rows");
|
|
|
|
|
rows.add(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result.put("columns", new ArrayList<>(colMap.values()));
|
|
|
|
|
result.put("column", column);
|
|
|
|
|
result.put("trend24h", build24hTrendByDevice(monitorType, dateTimeRanges.get("currentTime")));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -317,6 +452,133 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
return col;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getEnergyName(String monitorType) {
|
|
|
|
|
if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) {
|
|
|
|
|
return "水";
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) {
|
|
|
|
|
return "蒸汽";
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) {
|
|
|
|
|
return "压缩空气";
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) {
|
|
|
|
|
return "氮气";
|
|
|
|
|
}
|
|
|
|
|
return "电";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getEnergyUnit(String monitorType) {
|
|
|
|
|
if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) {
|
|
|
|
|
return "kWh";
|
|
|
|
|
} else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) {
|
|
|
|
|
return "t";
|
|
|
|
|
}
|
|
|
|
|
return "m³";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Map<String, Object>> build24hTrendByDevice(String monitorType, String currentTime) {
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
DateTimeFormatter keyFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH");
|
|
|
|
|
DateTimeFormatter showFormatter = DateTimeFormatter.ofPattern("MM-dd HH:00");
|
|
|
|
|
LocalDateTime now = LocalDateTime.parse(currentTime, formatter);
|
|
|
|
|
LocalDateTime endHour = now.withMinute(0).withSecond(0).withNano(0).minusHours(1);
|
|
|
|
|
LocalDateTime begin = endHour.minusHours(23);
|
|
|
|
|
LocalDateTime queryEnd = endHour.plusHours(1).minusSeconds(1);
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> reportList = queryTrendByRange(monitorType, begin, queryEnd, formatter);
|
|
|
|
|
if (reportList == null || reportList.isEmpty()) {
|
|
|
|
|
reportList = queryTrendByRange(monitorType, queryEnd.minusDays(7), queryEnd, formatter);
|
|
|
|
|
if (reportList == null || reportList.isEmpty()) {
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
LocalDateTime maxTime = resolveMaxTime(reportList, keyFormatter);
|
|
|
|
|
if (maxTime != null) {
|
|
|
|
|
endHour = maxTime;
|
|
|
|
|
begin = endHour.minusHours(23);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Set<String> slotSet = new HashSet<>();
|
|
|
|
|
|
|
|
|
|
List<String> slots = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i < 24; i++) {
|
|
|
|
|
LocalDateTime slot = begin.plusHours(i);
|
|
|
|
|
String key = slot.format(keyFormatter);
|
|
|
|
|
slots.add(key);
|
|
|
|
|
slotSet.add(key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LinkedHashMap<String, Map<String, Object>> deviceMap = new LinkedHashMap<>();
|
|
|
|
|
if (reportList != null) {
|
|
|
|
|
for (Map<String, Object> row : reportList) {
|
|
|
|
|
String monitorCode = String.valueOf(row.get("monitorCode"));
|
|
|
|
|
String monitorName = String.valueOf(row.get("monitorName"));
|
|
|
|
|
String timeKey = String.valueOf(row.get("timeKey"));
|
|
|
|
|
if (!slotSet.contains(timeKey)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
BigDecimal expend = toBigDecimal(row.get("expend")).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
|
|
|
|
|
Map<String, Object> item = deviceMap.computeIfAbsent(monitorCode, k -> {
|
|
|
|
|
Map<String, Object> m = new HashMap<>();
|
|
|
|
|
m.put("monitorCode", monitorCode);
|
|
|
|
|
m.put("monitorName", monitorName);
|
|
|
|
|
m.put("data", new HashMap<String, BigDecimal>());
|
|
|
|
|
return m;
|
|
|
|
|
});
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
Map<String, BigDecimal> data = (Map<String, BigDecimal>) item.get("data");
|
|
|
|
|
data.put(timeKey, expend);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> trend = new ArrayList<>();
|
|
|
|
|
for (Map<String, Object> item : deviceMap.values()) {
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
Map<String, BigDecimal> data = (Map<String, BigDecimal>) item.get("data");
|
|
|
|
|
List<Map<String, Object>> points = new ArrayList<>();
|
|
|
|
|
for (String slot : slots) {
|
|
|
|
|
Map<String, Object> point = new HashMap<>();
|
|
|
|
|
point.put("timeKey", slot);
|
|
|
|
|
LocalDateTime time = LocalDateTime.parse(slot + ":00:00", formatter);
|
|
|
|
|
point.put("time", time.format(showFormatter));
|
|
|
|
|
point.put("expend", data.getOrDefault(slot, BigDecimal.ZERO));
|
|
|
|
|
points.add(point);
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> series = new HashMap<>();
|
|
|
|
|
series.put("monitorCode", item.get("monitorCode"));
|
|
|
|
|
series.put("monitorName", item.get("monitorName"));
|
|
|
|
|
series.put("points", points);
|
|
|
|
|
trend.add(series);
|
|
|
|
|
}
|
|
|
|
|
return trend;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Map<String, Object>> queryTrendByRange(String monitorType, LocalDateTime begin, LocalDateTime end, DateTimeFormatter formatter) {
|
|
|
|
|
HashMap<String, Object> trendQuery = new HashMap<>();
|
|
|
|
|
trendQuery.put("monitorType", monitorType);
|
|
|
|
|
trendQuery.put("beginCollectTime", begin.format(formatter));
|
|
|
|
|
trendQuery.put("endCollectTime", end.format(formatter));
|
|
|
|
|
return emsReportMapper.selectWorkshop24hPerDeviceTrend(trendQuery);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private LocalDateTime resolveMaxTime(List<Map<String, Object>> reportList, DateTimeFormatter keyFormatter) {
|
|
|
|
|
LocalDateTime max = null;
|
|
|
|
|
for (Map<String, Object> row : reportList) {
|
|
|
|
|
Object timeKeyObj = row.get("timeKey");
|
|
|
|
|
if (timeKeyObj == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
LocalDateTime current = LocalDateTime.parse(String.valueOf(timeKeyObj), keyFormatter);
|
|
|
|
|
if (max == null || current.isAfter(max)) {
|
|
|
|
|
max = current;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ignored) {
|
|
|
|
|
// 跳过异常时间格式,避免影响整批趋势生成
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return max;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BigDecimal toBigDecimal(Object value) {
|
|
|
|
|
if (value == null) {
|
|
|
|
|
return BigDecimal.ZERO;
|
|
|
|
|
@ -327,5 +589,28 @@ public class EmsBoardServiceImpl implements IEmsBoardService {
|
|
|
|
|
return new BigDecimal(String.valueOf(value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BigDecimal calculateRate(BigDecimal current, BigDecimal previous) {
|
|
|
|
|
if (previous == null || previous.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
return BigDecimal.ZERO;
|
|
|
|
|
}
|
|
|
|
|
return current.subtract(previous)
|
|
|
|
|
.divide(previous, 4, RoundingMode.HALF_UP)
|
|
|
|
|
.multiply(new BigDecimal("100"))
|
|
|
|
|
.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, BigDecimal> getTodayConsumptionMap(String beginCollectTime, String endCollectTime) {
|
|
|
|
|
HashMap<String, Object> query = new HashMap<>();
|
|
|
|
|
query.put("beginCollectTime", beginCollectTime);
|
|
|
|
|
query.put("endCollectTime", endCollectTime);
|
|
|
|
|
List<Map<String, Object>> consumptionList = emsReportMapper.selectWorkshopTodayConsumption(query);
|
|
|
|
|
Map<String, BigDecimal> resultMap = new HashMap<>();
|
|
|
|
|
for (Map<String, Object> row : consumptionList) {
|
|
|
|
|
String type = String.valueOf(row.get("monitorType"));
|
|
|
|
|
resultMap.put(type, toBigDecimal(row.get("todayConsumption")));
|
|
|
|
|
}
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|