1.有组织废气污染物排放浓度监测数据统计表

2.废水污染物排放浓度监测数据统计表
main
Frank 2023-08-13 14:42:02 +08:00
parent b353b22f6f
commit e8719c4ec3
6 changed files with 581 additions and 0 deletions

View File

@ -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 "";
}
}

View File

@ -0,0 +1,10 @@
package cn.cecep.talroad.data.analyse.task.execute.report.specifications.month;
public interface ExhaustExceedingProcessService {
void exceededRateProcess();
void exhaustGasEmissionProcess();
void exhaustWaterEmissionProcess();
}

View File

@ -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); 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<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);
} }

View File

@ -3,6 +3,7 @@ package cn.cecep.talroad.task;
import cn.cecep.talroad.common.core.web.domain.AjaxResults; 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.PollutionDischargeProcessService;
import cn.cecep.talroad.data.analyse.task.execute.report.specifications.month.AnomalyAnalysisService; 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.data.analyse.task.label.ExecuteReportTaskService;
import cn.cecep.talroad.enums.EmlTypeEnums; import cn.cecep.talroad.enums.EmlTypeEnums;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -31,6 +32,10 @@ public class ExecuteReportController {
private final AnomalyAnalysisService anomalyAnalysisService; private final AnomalyAnalysisService anomalyAnalysisService;
private final ExhaustExceedingProcessService exhaustExceedingProcessService;
/** /**
* -- * --
*/ */
@ -99,5 +104,46 @@ public class ExecuteReportController {
return AjaxResults.error(); 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();
}
}
} }

View File

@ -223,4 +223,59 @@ public class SEnvGasMonRealVo
private BigDecimal oxygenEmissionAvg; 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;
}
} }

View File

@ -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 '%入口%'
and po.monitoring_point_name not like '%进口%' and po.monitoring_point_name not like '%进口%'
</select> </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 &lt;= 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 &lt;= 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 &lt;= 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 &lt;= 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 &lt;= t3.end_time
WHERE t2."id" IS NULL
AND t3."id" IS NULL
GROUP BY t1.outlet_id
</select>
</mapper> </mapper>