parent
e8719c4ec3
commit
bff8821957
|
@ -12,6 +12,7 @@ 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.cecep.talroad.vo.analysis.FactoryOutletStaticsVo;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
@ -43,6 +44,7 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
|
|||
|
||||
private final SEnvGasMonRealMapper sEnvGasMonRealMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public void exceededRateProcess() {
|
||||
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);
|
||||
Map<String, SEnvGasMonRealVo.EmissionAvgAndMax> emissionAvgAndMaxMap = emissionAvgAndMaxes.stream().collect(Collectors.toMap(SEnvGasMonRealVo.EmissionAvgAndMax::getOutletId, o -> o));
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
checkMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult);
|
||||
checkGasMaxAndAvg(emissionAvgAndMaxMap, dataList, resultList, queryActionReportsAuditResult);
|
||||
}
|
||||
for (SRaActionReportsAuditResult queryActionReportsAuditResult : queryActionReportsAuditResults) {
|
||||
Map<String, BigDecimal> emissionDataMap = getGasEmissionDataMap(factoryIdList, dataList);
|
||||
|
@ -101,7 +103,7 @@ 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) {
|
||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||
|
||||
|
@ -145,8 +147,82 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
|
|||
|
||||
|
||||
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
|
||||
|
@ -323,6 +399,25 @@ public class ExhaustExceedingProcessImpl implements ExhaustExceedingProcessServi
|
|||
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) {
|
||||
if ("二氧化硫".equals(pollutantName)) {
|
||||
return emissionAvgAndMax.getS02EmissionAvg();
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package cn.cecep.talroad.mapper;
|
||||
|
||||
import cn.cecep.talroad.domain.SEnvWaterMonDay;
|
||||
import cn.cecep.talroad.domain.SEnvWaterMonHour;
|
||||
import cn.cecep.talroad.vo.analysis.FactoryOutletStaticsVo;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
@ -9,6 +8,7 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 废水监测数据Mapper接口
|
||||
|
@ -24,4 +24,7 @@ public interface SEnvWaterMonDayMapper extends BaseMapper<SEnvWaterMonDay>
|
|||
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<FactoryOutletStaticsVo.EmissionAvgAndMax> selectEmissionAvgAndMax(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("outletIds") Set<String> outletIds);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package cn.cecep.talroad.vo.analysis;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @Auther: cjh
|
||||
* @Date: 2023-07-14 11:52
|
||||
|
@ -18,4 +21,21 @@ public class FactoryOutletStaticsVo {
|
|||
private String paramName;
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -74,4 +74,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<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>
|
||||
|
||||
|
||||
<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 <= 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