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

2.废水污染物排放浓度监测数据统计表
3.(正常监测时段)超标率
main
Frank 2023-08-13 15:42:07 +08:00
parent e8719c4ec3
commit bff8821957
4 changed files with 180 additions and 5 deletions

View File

@ -12,6 +12,7 @@ import cn.cecep.talroad.mapper.analysis.SRaActionReportsAuditResultMapper;
import cn.cecep.talroad.util.DateUtil; import cn.cecep.talroad.util.DateUtil;
import cn.cecep.talroad.util.NumberUtils; import cn.cecep.talroad.util.NumberUtils;
import cn.cecep.talroad.vo.SEnvGasMonRealVo; import cn.cecep.talroad.vo.SEnvGasMonRealVo;
import cn.cecep.talroad.vo.analysis.FactoryOutletStaticsVo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -43,6 +44,7 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
private final SEnvGasMonRealMapper sEnvGasMonRealMapper; private final SEnvGasMonRealMapper sEnvGasMonRealMapper;
@Override @Override
public void exceededRateProcess() { public void exceededRateProcess() {
List<SRaActionReportsAuditResult> queryActionReportsAuditResults = getAuditResultData(); List<SRaActionReportsAuditResult> queryActionReportsAuditResults = getAuditResultData();
@ -69,7 +71,7 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
, DateUtil.format(DateUtil.getLastDayOfMonth(-1), "yyyy-MM-dd HH:mm:ss"), outletCodes); , 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)); Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap = emissionAvgAndMaxes.stream().collect(Collectors.toMap(SEnvGasMonRealVo.EmissionAvgAndMax::getOutletId, o -> o));
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) { for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
checkMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult); checkGasMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult);
} }
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) { for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList); Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList);
@ -101,8 +103,8 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
} }
private void checkMaxAndAvg(Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap, List<BStatTableZxbgGasEmission> dataList, private void checkGasMaxAndAvg(Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap, List<BStatTableZxbgGasEmission> dataList,
List<SRaActionReportsAuditResult> resultList, SRaActionReportsAuditResult queryActionReportsAuditResult) { List<SRaActionReportsAuditResult> resultList, SRaActionReportsAuditResult queryActionReportsAuditResult) {
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) { for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
String outletCode = statTableZxbgGasEmission.getOutletCode(); String outletCode = statTableZxbgGasEmission.getOutletCode();
@ -145,8 +147,82 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
private List<SRaActionReportsAuditResult> waterEmissionProcess(List<SRaActionReportsAuditResult> queryActionReportsAuditResults) { private List<SRaActionReportsAuditResult> waterEmissionProcess(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<FactoryOutletStaticsVo.EmissionAvgAndMax> emissionAvgAndMaxes = sEnvWaterMonDayMapper.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, FactoryOutletStaticsVo.EmissionAvgAndMax> emissionAvgAndMaxMap = emissionAvgAndMaxes.stream().collect(Collectors.toMap(FactoryOutletStaticsVo.EmissionAvgAndMax::getOutletId, o -> o));
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
checkWaterMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult);
}
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList);
checkExceededData(dataList, resultList, queryActionReportsAuditResult, emissionDataMap);
}
return null; return resultList;
}
private void checkWaterMaxAndAvg(Map<String, FactoryOutletStaticsVo.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)) {
FactoryOutletStaticsVo.EmissionAvgAndMax emissionAvgAndMax = emissionAvgAndMaxMap.get(outletCode);
if (Objects.nonNull(emissionAvgAndMax)) {
StringBuilder allMessage = new StringBuilder();
BigDecimal gasEmissionMax = getWaterEmissionMax(pollutantName, emissionAvgAndMax);
BigDecimal gasEmissionAvg = getWaterEmissionAvg(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 BigDecimal getWaterEmissionAvg(String pollutantName, FactoryOutletStaticsVo.EmissionAvgAndMax emissionAvgAndMax) {
if ("污水".equals(pollutantName)) {
return emissionAvgAndMax.getSewageEmissionAvg();
}
if ("化学需氧量".equals(pollutantName)) {
return emissionAvgAndMax.getCodEmissionAvg();
}
if ("氨氮".equals(pollutantName)) {
return emissionAvgAndMax.getAmmoniaNitrogenEmissionAvg();
}
if ("总氮浓度".equals(pollutantName)) {
return emissionAvgAndMax.getNitrogenConcentrationEmissionAvg();
}
if ("总磷浓度".equals(pollutantName)) {
return emissionAvgAndMax.getPhosphorusConcentrationEmissionAvg();
}
return BigDecimal.ZERO;
} }
@Override @Override
@ -323,6 +399,25 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
private BigDecimal getWaterEmissionMax(String pollutantName, FactoryOutletStaticsVo.EmissionAvgAndMax emissionAvgAndMax) {
if ("污水".equals(pollutantName)) {
return emissionAvgAndMax.getSewageEmissionMax();
}
if ("化学需氧量".equals(pollutantName)) {
return emissionAvgAndMax.getCodEmissionMax();
}
if ("氨氮".equals(pollutantName)) {
return emissionAvgAndMax.getAmmoniaNitrogenEmissionMax();
}
if ("总氮浓度".equals(pollutantName)) {
return emissionAvgAndMax.getNitrogenConcentrationEmissionMax();
}
if ("总磷浓度".equals(pollutantName)) {
return emissionAvgAndMax.getPhosphorusConcentrationEmissionMax();
}
return BigDecimal.ZERO;
}
private BigDecimal getGasEmissionAvg(String pollutantName, SEnvGasMonRealVo.EmissionAvgAndMax emissionAvgAndMax) { private BigDecimal getGasEmissionAvg(String pollutantName, SEnvGasMonRealVo.EmissionAvgAndMax emissionAvgAndMax) {
if ("二氧化硫".equals(pollutantName)) { if ("二氧化硫".equals(pollutantName)) {
return emissionAvgAndMax.getS02EmissionAvg(); return emissionAvgAndMax.getS02EmissionAvg();

View File

@ -1,7 +1,6 @@
package cn.cecep.talroad.mapper; package cn.cecep.talroad.mapper;
import cn.cecep.talroad.domain.SEnvWaterMonDay; import cn.cecep.talroad.domain.SEnvWaterMonDay;
import cn.cecep.talroad.domain.SEnvWaterMonHour;
import cn.cecep.talroad.vo.analysis.FactoryOutletStaticsVo; import cn.cecep.talroad.vo.analysis.FactoryOutletStaticsVo;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -9,6 +8,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Set;
/** /**
* Mapper * Mapper
@ -24,4 +24,7 @@ public interface SEnvWaterMonDayMapper extends BaseMapper<SEnvWaterMonDay>
List<FactoryOutletStaticsVo> selectLastDayCountData(@Param("lastDayBegin") DateTime queryBeginTime, @Param("lastDayEnd") DateTime queryEndTime); List<FactoryOutletStaticsVo> selectLastDayCountData(@Param("lastDayBegin") DateTime queryBeginTime, @Param("lastDayEnd") DateTime queryEndTime);
List<SEnvWaterMonDay> selectHourDataByTime(@Param("factoryId") String factoryId, @Param("monitorId") String monitorId, @Param("monitorTime") Date monitorTime); List<SEnvWaterMonDay> selectHourDataByTime(@Param("factoryId") String factoryId, @Param("monitorId") String monitorId, @Param("monitorTime") Date monitorTime);
List<FactoryOutletStaticsVo.EmissionAvgAndMax> selectEmissionAvgAndMax(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("outletIds") Set<String> outletIds);
} }

View File

@ -1,7 +1,10 @@
package cn.cecep.talroad.vo.analysis; package cn.cecep.talroad.vo.analysis;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
/** /**
* @Auther: cjh * @Auther: cjh
* @Date: 2023-07-14 11:52 * @Date: 2023-07-14 11:52
@ -18,4 +21,21 @@ public class FactoryOutletStaticsVo {
private String paramName; private String paramName;
private Integer actualCount; private Integer actualCount;
@Data
public static class EmissionAvgAndMax {
private String factoryId;
private String outletId;
private BigDecimal sewageEmissionAvg;
private BigDecimal sewageEmissionMax;
private BigDecimal codEmissionAvg;
private BigDecimal codEmissionMax;
private BigDecimal ammoniaNitrogenEmissionAvg;
private BigDecimal ammoniaNitrogenEmissionMax;
private BigDecimal nitrogenConcentrationEmissionAvg;
private BigDecimal nitrogenConcentrationEmissionMax;
private BigDecimal phosphorusConcentrationEmissionAvg;
private BigDecimal phosphorusConcentrationEmissionMax;
}
} }

View File

@ -74,4 +74,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectHourDataByTime" resultMap="SEnvWaterMonDayResult"> <select id="selectHourDataByTime" resultMap="SEnvWaterMonDayResult">
select * from s_env_water_mon_day where factory_id = #{factoryId} and outlet_id = #{outletId} and data_type ='H' and monitoring_time = #{monitorTime} select * from s_env_water_mon_day where factory_id = #{factoryId} and outlet_id = #{outletId} and data_type ='H' and monitoring_time = #{monitorTime}
</select> </select>
<select id="selectEmissionAvgAndMax" resultType="cn.cecep.talroad.vo.analysis.FactoryOutletStaticsVo$EmissionAvgAndMax">
SELECT t1.outlet_id,
round(avg(t1.sewage_mission::numeric), 6) sewageEmissionAvg,
round(MAX(t1.sewage_mission::numeric), 6) sewageEmissionMax,
round(avg(t1.cod_emission::numeric), 6) codEmissionAvg,
round(MAX(t1.cod_emission::numeric), 6) codEmissionMax,
round(avg(t1.ammonia_nitrogen_emission::numeric), 6) ammoniaNitrogenEmissionAvg,
round(MAX(t1.ammonia_nitrogen_emission::numeric), 6) ammoniaNitrogenEmissionMax,
round(avg(t1.nitrogen_oncentration_emission::numeric), 6) nitrogenConcentrationEmissionAvg,
round(MAX(t1.nitrogen_oncentration_emission::numeric), 6) nitrogenConcentrationEmissionMax,
round(avg(t1.phosphorus_oncentration_emission::numeric), 6) phosphorusConcentrationEmissionAvg,
round(MAX(t1.phosphorus_oncentration_emission::numeric), 6)phosphorusConcentrationEmissionMax
FROM (
SELECT
outlet_id,
sewage_mission,
cod_emission,
ammonia_nitrogen_emission,
nitrogen_oncentration_emission,
phosphorus_oncentration_emission
FROM s_env_water_mon_day
WHERE data_type = 'd'
AND data_flag not in ('C', 'M', 'D', 'MD', 'K', 'P', 'VGD', 'TD', 'F')
AND monitoring_time >= to_timestamp(#{startTime}, 'yyyy-mm-dd hh24:MI:SS')
AND monitoring_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>