|
|
|
@ -10,15 +10,25 @@ import com.op.energy.base.mapper.BaseTypeRelationMapper;
|
|
|
|
|
import com.op.energy.base.service.IBaseMonitorInfoService;
|
|
|
|
|
import com.op.energy.base.utils.DateUtils;
|
|
|
|
|
import com.op.energy.base.utils.sortReportUitls;
|
|
|
|
|
import com.op.energy.record.domain.RecordDnbInstant;
|
|
|
|
|
import com.op.energy.record.mapper.RecordDnbInstantMapper;
|
|
|
|
|
import com.op.energy.report.domain.ReportOrderEnergyDTO;
|
|
|
|
|
import com.op.energy.report.domain.ReportPointDnb;
|
|
|
|
|
import com.op.energy.report.domain.ReportPointWater;
|
|
|
|
|
import com.op.energy.report.mapper.ReportPointDnbMapper;
|
|
|
|
|
import com.op.energy.report.mapper.ReportPointWaterMapper;
|
|
|
|
|
import com.op.energy.report.service.IDataAnalysisService;
|
|
|
|
|
import com.op.energy.report.service.IEnergyPreviewService;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
|
|
|
|
import static com.op.energy.base.utils.DateUtils.YYYY_MM_DD_HH_MM_SS;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 水整点数据Service业务层处理
|
|
|
|
@ -43,6 +53,9 @@ public class EnergyPreviewServiceImpl implements IEnergyPreviewService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private BaseBuildInfoMapper baseBuildInfoMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private RecordDnbInstantMapper recordDnbInstantMapper;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 电能源预览返回数据
|
|
|
|
|
*
|
|
|
|
@ -615,4 +628,217 @@ public class EnergyPreviewServiceImpl implements IEnergyPreviewService {
|
|
|
|
|
result.put("valueList", valueList);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 产线能耗占比统计
|
|
|
|
|
*
|
|
|
|
|
* @param paramMap
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@DS("#header.poolName")
|
|
|
|
|
public Map<String, Object> productionLineEnergyConsumption(Map paramMap) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
List<Map<String, String>> energyList = reportPointDnbMapper.productionLineEnergyConsumption(paramMap);
|
|
|
|
|
result.put("energyList", energyList);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 耗能趋势分析
|
|
|
|
|
*
|
|
|
|
|
* @param paramMap
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@DS("#header.poolName")
|
|
|
|
|
public Map<String, Object> energyConsumptionTrendAnalysis(Map paramMap) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
List<Map<String, String>> energyList = new ArrayList<>();
|
|
|
|
|
List<String> timeList = new ArrayList<>();
|
|
|
|
|
List<Long> monitorIdLists = new ArrayList<>();
|
|
|
|
|
LinkedHashMap<String, List<Float>> monitorInfoMap = new LinkedHashMap<>();
|
|
|
|
|
if (!paramMap.containsKey("type") || !paramMap.containsKey("energyType") ||
|
|
|
|
|
String.valueOf(paramMap.get("startTime")).equals("") || String.valueOf(paramMap.get("endTime")).equals("")) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
String energyType = String.valueOf(paramMap.get("energyType"));
|
|
|
|
|
//小时 天 月 年
|
|
|
|
|
String type = String.valueOf(paramMap.get("type"));
|
|
|
|
|
BaseBuildInfo baseBuildInfo = new BaseBuildInfo();
|
|
|
|
|
List<BaseBuildInfo> buildInfoList = baseBuildInfoMapper.selectBaseBuildInfoList(baseBuildInfo);
|
|
|
|
|
if (paramMap.containsKey("monitorIds")) {
|
|
|
|
|
String monitorIds = String.valueOf(paramMap.get("monitorIds"));
|
|
|
|
|
if (monitorIds.contains(",")) {
|
|
|
|
|
monitorIdLists = Arrays.stream(monitorIds.split(","))
|
|
|
|
|
.map(String::trim)
|
|
|
|
|
.map(Long::valueOf)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
} else {
|
|
|
|
|
if (!monitorIds.isEmpty()) {
|
|
|
|
|
monitorIdLists.add(Long.parseLong(monitorIds));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
case "month":
|
|
|
|
|
timeList = DateUtils.getSortedMonthList(DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))), type);
|
|
|
|
|
break;
|
|
|
|
|
case "year":
|
|
|
|
|
timeList = DateUtils.getSortedMonthList(DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))), type);
|
|
|
|
|
break;
|
|
|
|
|
case "hour":
|
|
|
|
|
timeList = DateUtils.getHourlyIntervals(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime")));
|
|
|
|
|
break;
|
|
|
|
|
case "day":
|
|
|
|
|
timeList = DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime")));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
List<List<Float>> lists = new ArrayList<>();
|
|
|
|
|
for (Long buildOId : monitorIdLists) {
|
|
|
|
|
List<Float> monitorValueList = new ArrayList<>();
|
|
|
|
|
List<String> monitorNameList = buildInfoList.stream().filter(e -> e.getObjid().equals(buildOId))
|
|
|
|
|
.map(BaseBuildInfo::getBuildName).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
BaseTypeRelation relation = new BaseTypeRelation();
|
|
|
|
|
relation.setType(0L);
|
|
|
|
|
relation.setRelationId(buildOId);
|
|
|
|
|
List<BaseTypeRelation> baseTypeRelations = baseTypeRelationMapper.selectBaseTypeRelationList(relation);
|
|
|
|
|
List<String> collect = baseTypeRelations.stream().map(BaseTypeRelation::getMonitorId).collect(Collectors.toList());
|
|
|
|
|
paramMap.put("monitorIdList", collect);
|
|
|
|
|
if (energyType.equals("2")) {
|
|
|
|
|
ReportPointDnb pointDnb = new ReportPointDnb();
|
|
|
|
|
pointDnb.setParams(paramMap);
|
|
|
|
|
List<ReportPointDnb> pointDnbList = reportPointDnbMapper.selectReportPointDnbList(pointDnb);
|
|
|
|
|
for (ReportPointDnb reportPointDnb : pointDnbList) {
|
|
|
|
|
Map<String, String> map = new HashMap<>();
|
|
|
|
|
map.put("recordTime", DateUtils.parseDateToStr("yyyy-MM-dd HH", reportPointDnb.getBeginTime()));
|
|
|
|
|
map.put("expend", reportPointDnb.getExpend().toString());
|
|
|
|
|
energyList.add(map);
|
|
|
|
|
}
|
|
|
|
|
} else if (energyType.equals("3")) {
|
|
|
|
|
ReportPointWater reportPointWater = new ReportPointWater();
|
|
|
|
|
reportPointWater.setParams(paramMap);
|
|
|
|
|
List<ReportPointWater> reportPointWaters = reportPointWaterMapper.selectReportPointWaterList(reportPointWater);
|
|
|
|
|
for (ReportPointWater pointWater : reportPointWaters) {
|
|
|
|
|
Map<String, String> map = new HashMap<>();
|
|
|
|
|
map.put("recordTime", DateUtils.parseDateToStr("yyyy-MM-dd HH", pointWater.getBeginTime()));
|
|
|
|
|
map.put("expend", pointWater.getExpend().toString());
|
|
|
|
|
energyList.add(map);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
timeList.forEach(date -> {
|
|
|
|
|
float expend = 0.00f;
|
|
|
|
|
for (Map<String, String> map : energyList) {
|
|
|
|
|
String recordTime = String.valueOf(map.get("recordTime"));
|
|
|
|
|
if (type.equals("month")) {
|
|
|
|
|
recordTime = recordTime.substring(0, 7);
|
|
|
|
|
} else if (type.equals("year")) {
|
|
|
|
|
recordTime = recordTime.substring(0, 4);
|
|
|
|
|
} else if (type.equals("hour")) {
|
|
|
|
|
date = date.substring(0, 13);
|
|
|
|
|
} else if (type.equals("day")) {
|
|
|
|
|
recordTime = recordTime.substring(0, 10);
|
|
|
|
|
}
|
|
|
|
|
if (date.equals(recordTime)) {
|
|
|
|
|
expend += Float.parseFloat(String.valueOf(map.get("expend")));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BigDecimal decimal = new BigDecimal(Float.toString(expend));
|
|
|
|
|
decimal = decimal.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
monitorValueList.add(decimal.floatValue());
|
|
|
|
|
});
|
|
|
|
|
if (monitorNameList.size() != 0) {
|
|
|
|
|
monitorInfoMap.put(monitorNameList.get(0), monitorValueList);
|
|
|
|
|
}
|
|
|
|
|
lists.add(monitorValueList);
|
|
|
|
|
}
|
|
|
|
|
if (lists.size() != 0) {
|
|
|
|
|
List<Float> sumLineList = IntStream.range(0, lists.get(0).size())
|
|
|
|
|
.mapToObj(i -> lists.stream()
|
|
|
|
|
.map(list -> list.get(i))
|
|
|
|
|
.reduce(0f, Float::sum))
|
|
|
|
|
.map(f -> Math.round(f * 100.0) / 100.0f)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
result.put("sumLineList", sumLineList);
|
|
|
|
|
}
|
|
|
|
|
List<String> monitorNameList = new ArrayList<>();
|
|
|
|
|
for (String monitorName : monitorInfoMap.keySet()) {
|
|
|
|
|
monitorNameList.add(monitorName);
|
|
|
|
|
}
|
|
|
|
|
result.put("monitorNameList", monitorNameList);
|
|
|
|
|
result.put("timeList", timeList);
|
|
|
|
|
result.put("monitorInfoMap", monitorInfoMap);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 产线单耗对比
|
|
|
|
|
*
|
|
|
|
|
* @param energyDTO
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@DS("#header.poolName")
|
|
|
|
|
public Map<String, Object> linesConsumptionComparison(ReportOrderEnergyDTO energyDTO) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
LinkedHashMap<String, BigDecimal> dataMap = new LinkedHashMap<>();
|
|
|
|
|
List<ReportOrderEnergyDTO> reportOrderEnergyDTOList = reportPointDnbMapper.linesConsumptionComparison(energyDTO);
|
|
|
|
|
if (reportOrderEnergyDTOList != null && reportOrderEnergyDTOList.size() > 0) {
|
|
|
|
|
for (ReportOrderEnergyDTO orderEnergyDTO : reportOrderEnergyDTOList) {
|
|
|
|
|
RecordDnbInstant recordDnbInstant = new RecordDnbInstant();
|
|
|
|
|
String startWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getStartWorkTime());
|
|
|
|
|
String endWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getEndWorkTime());
|
|
|
|
|
String electricityNo = orderEnergyDTO.getElectricityNo();
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
recordDnbInstant.setMonitorId(electricityNo);
|
|
|
|
|
map.put("beginCollectTime", startWorkTime);
|
|
|
|
|
map.put("endCollectTime", endWorkTime);
|
|
|
|
|
recordDnbInstant.setParams(map);
|
|
|
|
|
List<RecordDnbInstant> recordDnbInstantList = recordDnbInstantMapper.selectRecordDnbInstantByTime(recordDnbInstant);
|
|
|
|
|
if (recordDnbInstantList.size() == 2) {
|
|
|
|
|
BigDecimal kw = recordDnbInstantList.get(0).getKw().subtract(recordDnbInstantList.get(1).getKw()).abs();
|
|
|
|
|
BigDecimal decimal = kw.divide(new BigDecimal(orderEnergyDTO.getTotalQuantityFeedback()), 2, RoundingMode.HALF_UP);
|
|
|
|
|
dataMap.put(orderEnergyDTO.getEquipmentName(), decimal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result.put("data", dataMap);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 产品单耗对比
|
|
|
|
|
* @param energyDTO
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@DS("#header.poolName")
|
|
|
|
|
public Map<String, Object> productConsumptionComparison(ReportOrderEnergyDTO energyDTO) {
|
|
|
|
|
HashMap<String, Object> result = new HashMap<>();
|
|
|
|
|
LinkedHashMap<String, BigDecimal> dataMap = new LinkedHashMap<>();
|
|
|
|
|
List<ReportOrderEnergyDTO> reportOrderEnergyDTOList = reportPointDnbMapper.productConsumptionComparison(energyDTO);
|
|
|
|
|
if (reportOrderEnergyDTOList != null && reportOrderEnergyDTOList.size() > 0) {
|
|
|
|
|
for (ReportOrderEnergyDTO orderEnergyDTO : reportOrderEnergyDTOList) {
|
|
|
|
|
RecordDnbInstant recordDnbInstant = new RecordDnbInstant();
|
|
|
|
|
String startWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getStartWorkTime());
|
|
|
|
|
String endWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getEndWorkTime());
|
|
|
|
|
String electricityNo = orderEnergyDTO.getElectricityNo();
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
recordDnbInstant.setMonitorId(electricityNo);
|
|
|
|
|
map.put("beginCollectTime", startWorkTime);
|
|
|
|
|
map.put("endCollectTime", endWorkTime);
|
|
|
|
|
recordDnbInstant.setParams(map);
|
|
|
|
|
List<RecordDnbInstant> recordDnbInstantList = recordDnbInstantMapper.selectRecordDnbInstantByTime(recordDnbInstant);
|
|
|
|
|
if (recordDnbInstantList.size() == 2) {
|
|
|
|
|
BigDecimal kw = recordDnbInstantList.get(0).getKw().subtract(recordDnbInstantList.get(1).getKw()).abs();
|
|
|
|
|
BigDecimal decimal = kw.divide(new BigDecimal(orderEnergyDTO.getTotalQuantityFeedback()), 2, RoundingMode.HALF_UP);
|
|
|
|
|
dataMap.put(orderEnergyDTO.getProductName(), decimal);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result.put("data", dataMap);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|