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.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,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) {
|
List<SRaActionReportsAuditResult> resultList, SRaActionReportsAuditResult queryActionReportsAuditResult) {
|
||||||
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
for (BStatTableZxbgGasEmission statTableZxbgGasEmission : dataList) {
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 <= 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>
|
</mapper>
|
||||||
|
|
Loading…
Reference in New Issue