parent
b353b22f6f
commit
e8719c4ec3
|
@ -0,0 +1,402 @@
|
|||
package cn.cecep.talroad.data.analyse.task.execute.report.specifications.month;
|
||||
|
||||
import cn.cecep.talroad.domain.BStatTableZxbgGasEmission;
|
||||
import cn.cecep.talroad.domain.SEnvGasMonHour;
|
||||
import cn.cecep.talroad.domain.SEnvWaterMonDay;
|
||||
import cn.cecep.talroad.domain.analysis.SRaActionReportsAuditResult;
|
||||
import cn.cecep.talroad.mapper.BStatTableZxbgGasEmissionMapper;
|
||||
import cn.cecep.talroad.mapper.SEnvGasMonHourMapper;
|
||||
import cn.cecep.talroad.mapper.SEnvGasMonRealMapper;
|
||||
import cn.cecep.talroad.mapper.SEnvWaterMonDayMapper;
|
||||
import cn.cecep.talroad.mapper.analysis.SRaActionReportsAuditResultMapper;
|
||||
import cn.cecep.talroad.util.DateUtil;
|
||||
import cn.cecep.talroad.util.NumberUtils;
|
||||
import cn.cecep.talroad.vo.SEnvGasMonRealVo;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.google.common.collect.Maps;
|
||||
import io.seata.common.util.StringUtils;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
@Slf4j
|
||||
public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessService {
|
||||
|
||||
private final BStatTableZxbgGasEmissionMapper statTableZxbgGasEmissionMapper;
|
||||
|
||||
private final SRaActionReportsAuditResultMapper sRaActionReportsAuditResultMapper;
|
||||
private final SEnvGasMonHourMapper sEnvGasMonHourMapper;
|
||||
|
||||
private final SEnvWaterMonDayMapper sEnvWaterMonDayMapper;
|
||||
|
||||
private final SEnvGasMonRealMapper sEnvGasMonRealMapper;
|
||||
|
||||
@Override
|
||||
public void exceededRateProcess() {
|
||||
List<SRaActionReportsAuditResult> queryActionReportsAuditResults = getAuditResultData();
|
||||
List<SRaActionReportsAuditResult> resultList = Lists.newArrayList();
|
||||
resultList.addAll(exhaustGasExceededRateProcess(queryActionReportsAuditResults));
|
||||
resultList.addAll(exhaustWaterExceededRateProcess(queryActionReportsAuditResults));
|
||||
auditResultChange(resultList);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exhaustGasEmissionProcess() {
|
||||
List<SRaActionReportsAuditResult> queryActionReportsAuditResults = getAuditResultData();
|
||||
auditResultChange(gasEmissionProcess(queryActionReportsAuditResults));
|
||||
}
|
||||
|
||||
private List<SRaActionReportsAuditResult> gasEmissionProcess(List<SRaActionReportsAuditResult> queryActionReportsAuditResults) {
|
||||
List<SRaActionReportsAuditResult> resultList = Lists.newArrayList();
|
||||
List<String> factoryIdList = queryActionReportsAuditResults.stream().map(SRaActionReportsAuditResult::getFactoryId).collect(Collectors.toList());
|
||||
List<BStatTableZxbgGasEmission> dataList = getDataList(factoryIdList);
|
||||
Set<String> outletCodes = dataList.stream().map(BStatTableZxbgGasEmission::getOutletCode).collect(Collectors.toSet());
|
||||
List<SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxes = sEnvGasMonRealMapper.selectEmissionAvgAndMax(DateUtil.format(DateUtil.getFirstDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss")
|
||||
, DateUtil.format(DateUtil.getLastDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"), outletCodes);
|
||||
Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap = emissionAvgAndMaxes.stream().collect(Collectors.toMap(SEnvGasMonRealVo.EmissionAvgAndMax::getOutletId, o -> o));
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
checkMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult);
|
||||
}
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList);
|
||||
checkExceededData(dataList, resultList, queryActionReportsAuditResult, emissionDataMap);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private void checkExceededData(List<BStatTableZxbgGasEmission> dataList, List<SRaActionReportsAuditResult> resultList,
|
||||
SRaActionReportsAuditResult queryActionReportsAuditResult, Map<String, BigDecimal> emissionDataMap) {
|
||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||
String pollutantName = statTableZxbgGasEmission.getPollutantName();
|
||||
String exceededData = statTableZxbgGasEmission.getExceededData();
|
||||
String key = statTableZxbgGasEmission.getFactoryId() + pollutantName;
|
||||
BigDecimal exceededNumber = emissionDataMap.get(key);
|
||||
BigDecimal computeExceededRateNumber = NumberUtils.getBigDecimalDefaultNull(exceededData).divide(exceededNumber).multiply(new BigDecimal("100"));
|
||||
BigDecimal multiply = computeExceededRateNumber.multiply(exceededNumber);
|
||||
if (new BigDecimal(exceededData).compareTo(multiply) != 0) {
|
||||
SRaActionReportsAuditResult sRaActionReportsAuditResult = new SRaActionReportsAuditResult();
|
||||
sRaActionReportsAuditResult.setId(queryActionReportsAuditResult.getId());
|
||||
sRaActionReportsAuditResult.setOrganizedGasMonitoringData("根据有组织废气污染物超标时段小时均值报表中填报的数据," + statTableZxbgGasEmission.getOutletCode() +
|
||||
pollutantName + "超标数据数量应为" + multiply + ",企业填报数据为" + exceededData + "数据不符。");
|
||||
resultList.add(sRaActionReportsAuditResult);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void checkMaxAndAvg(Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap, List<BStatTableZxbgGasEmission> dataList,
|
||||
List<SRaActionReportsAuditResult> resultList, SRaActionReportsAuditResult queryActionReportsAuditResult) {
|
||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||
|
||||
String outletCode = statTableZxbgGasEmission.getOutletCode();
|
||||
String pollutantName = statTableZxbgGasEmission.getPollutantName();
|
||||
String detectionMaxHour = statTableZxbgGasEmission.getDetectionMaxHour();
|
||||
String detectionAvgHour = statTableZxbgGasEmission.getDetectionAvgHour();
|
||||
|
||||
if (emissionAvgAndMaxMap.containsKey(outletCode)) {
|
||||
SEnvGasMonRealVo.EmissionAvgAndMax emissionAvgAndMax = emissionAvgAndMaxMap.get(outletCode);
|
||||
if (Objects.nonNull(emissionAvgAndMax)) {
|
||||
StringBuilder allMessage = new StringBuilder();
|
||||
BigDecimal gasEmissionMax = getGasEmissionMax(pollutantName, emissionAvgAndMax);
|
||||
BigDecimal gasEmissionAvg = getGasEmissionAvg(pollutantName, emissionAvgAndMax);
|
||||
StringBuilder message = new StringBuilder();
|
||||
if (NumberUtils.getBigDecimalDefaultZero(detectionMaxHour).compareTo(gasEmissionMax) < 0) {
|
||||
log.info("企业ID:{},提示语句:{}", queryActionReportsAuditResult.getFactoryId(), "企业填报数值不应低于平台核算数值。");
|
||||
message.append("排口编号:" + outletCode + "污染物种类:" + pollutantName +
|
||||
"最大值平台根据其他系统数据核算为" + gasEmissionMax + ",企业填报数据为" + detectionMaxHour + "企业填报数值不应低于平台核算数值。");
|
||||
allMessage.append(message);
|
||||
allMessage.append(";");
|
||||
}
|
||||
|
||||
if (NumberUtils.getBigDecimalDefaultZero(detectionAvgHour).compareTo(new BigDecimal("0.80").multiply(gasEmissionAvg)) < 0) {
|
||||
log.info("企业ID:{},提示语句:{}", queryActionReportsAuditResult.getFactoryId(), "企业填报数值低于平台核算数值的80%。");
|
||||
message.append("排口编号:" + outletCode + "污染物种类:" + pollutantName +
|
||||
"平均值平台根据其他系统数据核算为" + gasEmissionAvg + ",企业填报数据为" + detectionAvgHour + "企业填报数值低于平台核算数值的80%。");
|
||||
allMessage.append(message);
|
||||
allMessage.append(";");
|
||||
}
|
||||
SRaActionReportsAuditResult sRaActionReportsAuditResult = new SRaActionReportsAuditResult();
|
||||
sRaActionReportsAuditResult.setId(queryActionReportsAuditResult.getId());
|
||||
sRaActionReportsAuditResult.setWaterPreventionFacilities(allMessage.toString());
|
||||
resultList.add(sRaActionReportsAuditResult);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private List<SRaActionReportsAuditResult> waterEmissionProcess(List<SRaActionReportsAuditResult> queryActionReportsAuditResults) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exhaustWaterEmissionProcess() {
|
||||
List<SRaActionReportsAuditResult> queryActionReportsAuditResults = getAuditResultData();
|
||||
auditResultChange(waterEmissionProcess(queryActionReportsAuditResults));
|
||||
}
|
||||
|
||||
private List<SRaActionReportsAuditResult> getAuditResultData() {
|
||||
String period = LocalDate.now().toString().substring(0, 4);
|
||||
SRaActionReportsAuditResult queryResult = new SRaActionReportsAuditResult();
|
||||
queryResult.setReportTime(period);
|
||||
return sRaActionReportsAuditResultMapper.selectSRaActionReportsAuditResultList(queryResult);
|
||||
}
|
||||
|
||||
private void auditResultChange(List<SRaActionReportsAuditResult> resultList) {
|
||||
if (CollUtil.isNotEmpty(resultList)) {
|
||||
List<List<SRaActionReportsAuditResult>> partition = ListUtils.partition(resultList, 10);
|
||||
for (List<SRaActionReportsAuditResult> sRaActionReportsAuditResultList : partition) {
|
||||
sRaActionReportsAuditResultMapper.batchUpdate(sRaActionReportsAuditResultList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<SRaActionReportsAuditResult> exhaustWaterExceededRateProcess(List<SRaActionReportsAuditResult> queryActionReportsAuditResults) {
|
||||
List<String> factoryIdList = queryActionReportsAuditResults.stream().map(SRaActionReportsAuditResult::getFactoryId).collect(Collectors.toList());
|
||||
List<BStatTableZxbgGasEmission> dataList = getDataList(factoryIdList);
|
||||
Map<String, BigDecimal> emissionDataMap = getWaterEmissionDataMap(factoryIdList, dataList);
|
||||
List<SRaActionReportsAuditResult> resultList = Lists.newArrayList();
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
fifterExceedingData(queryActionReportsAuditResult, dataList, resultList, emissionDataMap);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private List<SRaActionReportsAuditResult> exhaustGasExceededRateProcess(List<SRaActionReportsAuditResult> queryActionReportsAuditResults) {
|
||||
List<String> factoryIdList = queryActionReportsAuditResults.stream().map(SRaActionReportsAuditResult::getFactoryId).collect(Collectors.toList());
|
||||
List<BStatTableZxbgGasEmission> dataList = getDataList(factoryIdList);
|
||||
Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList);
|
||||
List<SRaActionReportsAuditResult> resultList = Lists.newArrayList();
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
fifterExceedingData(queryActionReportsAuditResult, dataList, resultList, emissionDataMap);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private Map<String, BigDecimal> getGasEmissionDataMap(List<String> factoryIdList, List<BStatTableZxbgGasEmission> dataList) {
|
||||
List<String> outletCodes = dataList.stream().map(BStatTableZxbgGasEmission::getOutletCode).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
|
||||
LambdaQueryWrapper<SEnvGasMonHour> queryWrapper = new QueryWrapper<SEnvGasMonHour>().lambda().
|
||||
eq(SEnvGasMonHour::getDataType, "h")
|
||||
.in(SEnvGasMonHour::getFactoryId, factoryIdList)
|
||||
.in(SEnvGasMonHour::getOutletId, outletCodes)
|
||||
.ge(SEnvGasMonHour::getMonitoringTime, DateUtil.format(DateUtil.getFirstDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"))
|
||||
.le(SEnvGasMonHour::getMonitoringTime, DateUtil.format(DateUtil.getLastDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"));
|
||||
List<SEnvGasMonHour> sEnvGasMonHours = sEnvGasMonHourMapper.selectList(queryWrapper);
|
||||
HashMap<String, BigDecimal> dataMap = Maps.newHashMap();
|
||||
if (CollUtil.isNotEmpty(sEnvGasMonHours)) {
|
||||
for (SEnvGasMonHour sEnvGasMonHour : sEnvGasMonHours) {
|
||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||
String pollutantName = statTableZxbgGasEmission.getPollutantName();
|
||||
String emission = getGasEmission(pollutantName, sEnvGasMonHour);
|
||||
String key = sEnvGasMonHour.getFactoryId() + pollutantName;
|
||||
dataMap.put(key, NumberUtils.getBigDecimalDefaultNull(emission));
|
||||
}
|
||||
}
|
||||
}
|
||||
return dataMap;
|
||||
}
|
||||
|
||||
private Map<String, BigDecimal> getWaterEmissionDataMap(List<String> factoryIdList, List<BStatTableZxbgGasEmission> dataList) {
|
||||
List<String> outletCodes = dataList.stream().map(BStatTableZxbgGasEmission::getOutletCode).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
|
||||
LambdaQueryWrapper<SEnvWaterMonDay> queryWrapper = new QueryWrapper<SEnvWaterMonDay>().lambda().
|
||||
eq(SEnvWaterMonDay::getDataType, "d")
|
||||
.in(SEnvWaterMonDay::getFactoryId, factoryIdList)
|
||||
.in(SEnvWaterMonDay::getOutletId, outletCodes)
|
||||
.ge(SEnvWaterMonDay::getMonitoringTime, DateUtil.format(DateUtil.getFirstDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"))
|
||||
.le(SEnvWaterMonDay::getMonitoringTime, DateUtil.format(DateUtil.getLastDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"));
|
||||
List<SEnvWaterMonDay> sEnvWaterMonDays = sEnvWaterMonDayMapper.selectList(queryWrapper);
|
||||
HashMap<String, BigDecimal> dataMap = Maps.newHashMap();
|
||||
if (CollUtil.isNotEmpty(sEnvWaterMonDays)) {
|
||||
for (SEnvWaterMonDay sEnvWaterMonDay : sEnvWaterMonDays) {
|
||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||
String pollutantName = statTableZxbgGasEmission.getPollutantName();
|
||||
String emission = getWaterEmission(pollutantName, sEnvWaterMonDay);
|
||||
String key = sEnvWaterMonDay.getFactoryId() + pollutantName;
|
||||
dataMap.put(key, NumberUtils.getBigDecimalDefaultNull(emission));
|
||||
}
|
||||
}
|
||||
}
|
||||
return dataMap;
|
||||
}
|
||||
|
||||
|
||||
private void fifterExceedingData(SRaActionReportsAuditResult queryActionReportsAuditResult, List<BStatTableZxbgGasEmission> dataList,
|
||||
List<SRaActionReportsAuditResult> resultList, Map<String, BigDecimal> emissionDataMap) {
|
||||
String factoryId = queryActionReportsAuditResult.getFactoryId();
|
||||
List<BStatTableZxbgGasEmission> filteredList = dataList.stream()
|
||||
.filter(item -> item.getFactoryId().equals(factoryId))
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(filteredList)) return;
|
||||
for (BStatTableZxbgGasEmission bStatTableZxbgGasEmission : filteredList) {
|
||||
|
||||
String exceededData = bStatTableZxbgGasEmission.getExceededData(); //企业填报超标数据个数
|
||||
String fillExceededRate = bStatTableZxbgGasEmission.getExceededRate(); //企业填报超标率
|
||||
String key = bStatTableZxbgGasEmission.getFactoryId() + bStatTableZxbgGasEmission.getPollutantName();
|
||||
BigDecimal exceededNumber = emissionDataMap.get(key);
|
||||
BigDecimal computeExceededRateNumber = NumberUtils.getBigDecimalDefaultNull(exceededData).divide(exceededNumber).multiply(new BigDecimal("100"));
|
||||
if (computeExceededRateNumber.compareTo(new BigDecimal(fillExceededRate)) != 0) {
|
||||
SRaActionReportsAuditResult sRaActionReportsAuditResult = new SRaActionReportsAuditResult();
|
||||
sRaActionReportsAuditResult.setId(queryActionReportsAuditResult.getId());
|
||||
sRaActionReportsAuditResult.setExceedingRate(buildMessage(bStatTableZxbgGasEmission, computeExceededRateNumber));
|
||||
resultList.add(sRaActionReportsAuditResult);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String buildMessage(BStatTableZxbgGasEmission bStatTableZxbgGasEmission, BigDecimal computeExceededRateNumber) {
|
||||
|
||||
log.info("企业ID:{},提示语句:{}", bStatTableZxbgGasEmission.getFactoryId(), String.format("根据企业填报数值%s %s ,超标率计算应为%s,实际填报为%s,计算不正确。",
|
||||
bStatTableZxbgGasEmission.getOutletCode(),
|
||||
bStatTableZxbgGasEmission.getPollutantName(),
|
||||
computeExceededRateNumber.toString(),
|
||||
bStatTableZxbgGasEmission.getExceededRate()));
|
||||
//根据企业填报数值,“排口编号”“污染物种类”“超标率”计算应为“xxx",实际填报为"xxx”,计算不正确。
|
||||
return String.format("根据企业填报数值%s %s ,超标率计算应为%s,实际填报为%s,计算不正确。",
|
||||
bStatTableZxbgGasEmission.getOutletCode(),
|
||||
bStatTableZxbgGasEmission.getPollutantName(),
|
||||
computeExceededRateNumber,
|
||||
bStatTableZxbgGasEmission.getExceededRate()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private List<BStatTableZxbgGasEmission> getDataList(List<String> factoryIdList) {
|
||||
//TODO 执行周期暂定为月
|
||||
String period = LocalDate.now().minusMonths(1).toString().substring(0, 7);
|
||||
LambdaQueryWrapper<BStatTableZxbgGasEmission> queryWrapper =
|
||||
new QueryWrapper<BStatTableZxbgGasEmission>().lambda()
|
||||
.in(BStatTableZxbgGasEmission::getFactoryId, factoryIdList)
|
||||
.eq(BStatTableZxbgGasEmission::getZxbgType, 0)
|
||||
.eq(BStatTableZxbgGasEmission::getZxbgPeriod, period);
|
||||
List<BStatTableZxbgGasEmission> dataList = statTableZxbgGasEmissionMapper.selectList(queryWrapper);
|
||||
log.info("ExhaustGasExceedingProcessService->getDataList:{}", JSON.toJSONString(dataList));
|
||||
return dataList;
|
||||
}
|
||||
|
||||
|
||||
private BigDecimal getGasEmissionMax(String pollutantName, SEnvGasMonRealVo.EmissionAvgAndMax emissionAvgAndMax) {
|
||||
if ("二氧化硫".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getS02EmissionMax();
|
||||
}
|
||||
if ("氮氧化物".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNoxEmissionMax();
|
||||
}
|
||||
if ("一氧化氮".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNoEmissionMax();
|
||||
}
|
||||
if ("二氧化氮".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNo2EmissionMax();
|
||||
}
|
||||
if ("烟尘".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getSmokeDustEmissionMax();
|
||||
}
|
||||
if ("颗粒物实测".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getPmEmissionMax();
|
||||
}
|
||||
if ("vocs实测".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getVocsEmissionMax();
|
||||
}
|
||||
if ("废气".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getOxygenEmissionMax();
|
||||
}
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
private BigDecimal getGasEmissionAvg(String pollutantName, SEnvGasMonRealVo.EmissionAvgAndMax emissionAvgAndMax) {
|
||||
if ("二氧化硫".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getS02EmissionAvg();
|
||||
}
|
||||
if ("氮氧化物".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNoxEmissionAvg();
|
||||
}
|
||||
if ("一氧化氮".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNoEmissionAvg();
|
||||
}
|
||||
if ("二氧化氮".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getNo2EmissionAvg();
|
||||
}
|
||||
if ("烟尘".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getSmokeDustEmissionAvg();
|
||||
}
|
||||
if ("颗粒物实测".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getPmEmissionAvg();
|
||||
}
|
||||
if ("vocs实测".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getVocsEmissionAvg();
|
||||
}
|
||||
if ("废气".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getOxygenEmissionAvg();
|
||||
}
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
private String getWaterEmission(String pollutantName, SEnvWaterMonDay sEnvWaterMonDay) {
|
||||
if ("污水".equals(pollutantName)) {
|
||||
return sEnvWaterMonDay.getSewageEmission();
|
||||
}
|
||||
if ("化学需氧量".equals(pollutantName)) {
|
||||
return sEnvWaterMonDay.getCodEmission();
|
||||
}
|
||||
if ("氨氮".equals(pollutantName)) {
|
||||
return sEnvWaterMonDay.getAmmoniaNitrogenEmission();
|
||||
}
|
||||
if ("总氮浓度".equals(pollutantName)) {
|
||||
return sEnvWaterMonDay.getNitrogenConcentrationEmission();
|
||||
}
|
||||
if ("总磷浓度".equals(pollutantName)) {
|
||||
return sEnvWaterMonDay.getPhosphorusConcentrationEmission();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private String getGasEmission(String pollutantName, SEnvGasMonHour sEnvGasMonHour) {
|
||||
if ("二氧化硫".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getSo2Emission();
|
||||
}
|
||||
if ("氮氧化物".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getNoxEmission();
|
||||
}
|
||||
if ("一氧化氮".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getNoEmission();
|
||||
}
|
||||
if ("二氧化氮".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getNo2Emission();
|
||||
}
|
||||
if ("烟尘".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getSmokeDustEmission();
|
||||
}
|
||||
if ("颗粒物实测".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getPmEmission();
|
||||
}
|
||||
if ("vocs实测".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getVocsEmission();
|
||||
}
|
||||
if ("废气".equals(pollutantName)) {
|
||||
return sEnvGasMonHour.getOxygenEmission();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package cn.cecep.talroad.data.analyse.task.execute.report.specifications.month;
|
||||
|
||||
public interface ExhaustExceedingProcessService {
|
||||
|
||||
void exceededRateProcess();
|
||||
|
||||
void exhaustGasEmissionProcess();
|
||||
|
||||
void exhaustWaterEmissionProcess();
|
||||
}
|
|
@ -61,4 +61,6 @@ public interface SEnvGasMonRealMapper extends BaseMapper<SEnvGasMonReal>
|
|||
BigDecimal selectByOutLetId(@Param("factoryId") String factoryId, @Param("outLetId") String id, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
||||
|
||||
List<FactoryOutletStaticsVo> selectLastDayData(@Param("lastDayBegin") DateTime queryBeginTime, @Param("lastDayEnd") DateTime queryEndTime);
|
||||
|
||||
List<SEnvGasMonRealVo.EmissionAvgAndMax> selectEmissionAvgAndMax(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("outletIds") Set<String> outletIds);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.cecep.talroad.task;
|
|||
import cn.cecep.talroad.common.core.web.domain.AjaxResults;
|
||||
import cn.cecep.talroad.data.analyse.task.execute.report.PollutionDischargeProcessService;
|
||||
import cn.cecep.talroad.data.analyse.task.execute.report.specifications.month.AnomalyAnalysisService;
|
||||
import cn.cecep.talroad.data.analyse.task.execute.report.specifications.month.ExhaustExceedingProcessService;
|
||||
import cn.cecep.talroad.data.analyse.task.label.ExecuteReportTaskService;
|
||||
import cn.cecep.talroad.enums.EmlTypeEnums;
|
||||
import io.swagger.annotations.Api;
|
||||
|
@ -31,6 +32,10 @@ public class ExecuteReportController {
|
|||
|
||||
private final AnomalyAnalysisService anomalyAnalysisService;
|
||||
|
||||
private final ExhaustExceedingProcessService exhaustExceedingProcessService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 定时更新 执行报告-排污单位基本信息表-审核
|
||||
*/
|
||||
|
@ -99,5 +104,46 @@ public class ExecuteReportController {
|
|||
return AjaxResults.error();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 定时更新 执行报告-废气超标率
|
||||
*/
|
||||
@GetMapping("/exhaust/exceeded/rate/process")
|
||||
public AjaxResults<Void> exhaustExceededRateProcess() {
|
||||
try {
|
||||
exhaustExceedingProcessService.exceededRateProcess();
|
||||
return AjaxResults.success();
|
||||
} catch (Exception e) {
|
||||
log.error("定时执行执行报告-废气超标率任务失败. 原因:{}", e.getMessage(), e);
|
||||
return AjaxResults.error();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时更新 执行报告-有组织废气污染物排放浓度监测数据统计表
|
||||
*/
|
||||
@GetMapping("/exhaust/gas/emission/process")
|
||||
public AjaxResults<Void> exhaustGasEmissionProcess() {
|
||||
try {
|
||||
exhaustExceedingProcessService.exhaustGasEmissionProcess();
|
||||
return AjaxResults.success();
|
||||
} catch (Exception e) {
|
||||
log.error("定时执行执行报告-有组织废气污染物排放浓度监测数据统计表任务失败. 原因:{}", e.getMessage(), e);
|
||||
return AjaxResults.error();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 定时更新 执行报告-废水污染物排放浓度监测数据统计表
|
||||
*/
|
||||
@GetMapping("/exhaust/water/emission/process")
|
||||
public AjaxResults<Void> exhaustWaterEmissionProcess() {
|
||||
try {
|
||||
exhaustExceedingProcessService.exhaustWaterEmissionProcess();
|
||||
return AjaxResults.success();
|
||||
} catch (Exception e) {
|
||||
log.error("定时执行废水污染物排放浓度监测数据统计表任务失败. 原因:{}", e.getMessage(), e);
|
||||
return AjaxResults.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -223,4 +223,59 @@ public class SEnvGasMonRealVo
|
|||
private BigDecimal oxygenEmissionAvg;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class EmissionAvgAndMax {
|
||||
@ApiModelProperty(value = "企业id")
|
||||
private String factoryId;
|
||||
@ApiModelProperty(value = "排口id")
|
||||
private String outletId;
|
||||
|
||||
@ApiModelProperty(value = "SO2排放量平均值")
|
||||
private BigDecimal s02EmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "SO2排放量最大值")
|
||||
private BigDecimal s02EmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "NOx排放量平均值")
|
||||
private BigDecimal noxEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "NOx排放量最大值")
|
||||
private BigDecimal noxEmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "一氧化氮排放量平均值")
|
||||
private BigDecimal noEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "一氧化氮排放量最大值")
|
||||
private BigDecimal noEmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "二氧化氮排放量平均值")
|
||||
private BigDecimal no2EmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "二氧化氮排放量最大值")
|
||||
private BigDecimal no2EmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "烟尘排放量平均值")
|
||||
private BigDecimal smokeDustEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "烟尘排放量最大值")
|
||||
private BigDecimal smokeDustEmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "颗粒物排放量平均值")
|
||||
private BigDecimal pmEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "颗粒物排放量最大值")
|
||||
private BigDecimal pmEmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "VOCs排放量平均值")
|
||||
private BigDecimal vocsEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "VOCs排放量最大值")
|
||||
private BigDecimal vocsEmissionMax;
|
||||
|
||||
@ApiModelProperty(value = "废气排放量平均值")
|
||||
private BigDecimal oxygenEmissionAvg;
|
||||
|
||||
@ApiModelProperty(value = "废气排放量最大值")
|
||||
private BigDecimal oxygenEmissionMax;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -548,4 +548,70 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
and po.monitoring_point_name not like '%入口%'
|
||||
and po.monitoring_point_name not like '%进口%'
|
||||
</select>
|
||||
|
||||
<select id="selectEmissionAvgAndMax" resultType="cn.cecep.talroad.vo.SEnvGasMonRealVo$EmissionAvgAndMax">
|
||||
SELECT t1.outlet_id,
|
||||
round(avg(t1.so2_emission::numeric), 6) s02EmissionAvg,
|
||||
round(MAX(t1.so2_emission::numeric), 6) s02EmissionMax,
|
||||
round(avg(t1.nox_emission::numeric), 6) noxEmissionAvg,
|
||||
round(MAX(t1.nox_emission::numeric), 6) noxEmissionMax,
|
||||
round(avg(t1.no_emission::numeric), 6) noEmissionAvg,
|
||||
round(MAX(t1.no_emission::numeric), 6) noEmissionMax,
|
||||
round(avg(t1.no2_emission::numeric), 6) no2EmissionAvg,
|
||||
round(MAX(t1.no2_emission::numeric), 6) no2EmissionMax,
|
||||
round(avg(t1.smoke_dust_emission::numeric), 6) smokeDustEmissionAvg,
|
||||
round(MAX(t1.smoke_dust_emission::numeric), 6) smokeDustEmissionMax,
|
||||
round(avg(t1.pm_emission::numeric), 6) pmEmissionAvg,
|
||||
round(MAX(t1.pm_emission::numeric), 6) pmEmissionMax,
|
||||
round(avg(t1.vocs_emission::numeric), 6) vocsEmissionAvg,
|
||||
round(MAX(t1.vocs_emission::numeric), 6) vocsEmissionMax,
|
||||
round(avg(t1.oxygen_emission::numeric), 6) oxygenEmissionAvg,
|
||||
round(MAX(t1.oxygen_emission::numeric), 6) oxygenEmissionMax
|
||||
FROM (
|
||||
SELECT outlet_id,
|
||||
date_time,
|
||||
oxygen_emission,
|
||||
factory_id,
|
||||
so2_emission,
|
||||
nox_emission,
|
||||
no_emission,
|
||||
no2_emission,
|
||||
smoke_dust_emission,
|
||||
pm_emission,
|
||||
vocs_emission
|
||||
FROM s_env_gas_mon_real
|
||||
WHERE data_type = 'H'
|
||||
AND data_flag in ('N/S', '')
|
||||
AND date_time >= to_timestamp(#{startTime}, 'yyyy-mm-dd hh24:MI:SS')
|
||||
AND date_time <= to_timestamp(#{endTime}, 'yyyy-mm-dd hh24:MI:SS')
|
||||
AND outlet_Id IN
|
||||
<foreach collection="outletIds" open="(" separator="," close=")" item="item">
|
||||
#{item}
|
||||
</foreach>
|
||||
) t1
|
||||
<!-- 关联查询监测点停产记录 -->
|
||||
LEFT JOIN (SELECT t2.id, t3.start_time, t3.end_time
|
||||
FROM pc_outlet t2
|
||||
INNER JOIN ods_online_ol_stopinfo_a t3
|
||||
ON t2.outlet_code = t3.port_num AND t2.factory_id = t3.factory_id
|
||||
WHERE t3.start_time >= to_timestamp(#{startTime}, 'yyyy-mm-dd hh24:MI:SS')
|
||||
and t3.end_time <= to_timestamp(#{endTime}, 'yyyy-mm-dd hh24:MI:SS')) t2
|
||||
ON t1.outlet_id = t2."id" AND t1.date_time >= t2.start_time AND t1.date_time <= t2.end_time
|
||||
|
||||
<!-- 关联查询监测点白名单记录 -->
|
||||
LEFT JOIN (SELECT t2.id,
|
||||
t3.start_time,
|
||||
t3.end_time
|
||||
FROM pc_outlet t2
|
||||
INNER JOIN ods_online_ol_ps_whitelist_a t3
|
||||
ON t2.outlet_code = t3.port_num AND t2.factory_id = t3.factory_id
|
||||
WHERE t3.start_time >= to_timestamp(#{startTime}, 'yyyy-mm-dd hh24:MI:SS')
|
||||
and t3.end_time <= to_timestamp(#{endTime}, 'yyyy-mm-dd hh24:MI:SS')
|
||||
AND upper(t3.pollutant_code) IN
|
||||
(SELECT upper(poll_code) FROM pc_pollutant WHERE is_gas_type = '1')) t3
|
||||
ON t1.outlet_id = t3."id" AND t1.date_time >= t3.start_time AND t1.date_time <= t3.end_time
|
||||
WHERE t2."id" IS NULL
|
||||
AND t3."id" IS NULL
|
||||
GROUP BY t1.outlet_id
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
Loading…
Reference in New Issue