报表添加合格率sheet
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package com.njcn.harmonic.common.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||
import com.njcn.harmonic.pojo.vo.MonitorOverLimitVO;
|
||||
import com.njcn.harmonic.pojo.vo.RStatLimitRateDVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 合格率统计日表(越限次数) Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author wr
|
||||
* @since 2023-04-03
|
||||
*/
|
||||
public interface RStatLimitRateDMapper extends BaseMapper<RStatLimitRateDPO> {
|
||||
|
||||
List<RStatLimitRateDVO> getSumPassRate(
|
||||
@Param("ids") List<String> lineIndexes,
|
||||
@Param("statTime") String searchBeginTime,
|
||||
@Param("endTime") String searchEndTime);
|
||||
|
||||
|
||||
List<MonitorOverLimitVO> getSumLimitRateByLineIndexes(
|
||||
@Param("ids") List<String> lineIndexes,
|
||||
@Param("statTime") String searchBeginTime,
|
||||
@Param("endTime") String searchEndTime);
|
||||
|
||||
Page<MonitorOverLimitVO> getSumLimitRatePage(Page<RStatLimitRateDPO> p,
|
||||
@Param("ids") List<String> lineIndexes,
|
||||
@Param("statTime") String searchBeginTime,
|
||||
@Param("endTime") String searchEndTime);
|
||||
|
||||
List<MonitorOverLimitVO.DataVO> getPercentages(
|
||||
@Param("ids") List<String> lineIndexes,
|
||||
@Param("statTime") String searchBeginTime,
|
||||
@Param("endTime") String searchEndTime);
|
||||
|
||||
|
||||
/**
|
||||
* 数据查询
|
||||
* @param list
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
*/
|
||||
List<RStatLimitRateDPO> getSumPassRateList( @Param("ids") List<String> list,
|
||||
@Param("statTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
/**
|
||||
* 获取综合评估下的指标完整率
|
||||
* @param list
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return111
|
||||
*/
|
||||
List<RStatLimitRateDPO> getAssessTargetRate( @Param("ids") List<String> list,
|
||||
@Param("statTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
/**
|
||||
* 获取监测点的超标次数
|
||||
* @param list
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
*/
|
||||
List<RStatLimitRateDPO> getAllOverTimes( @Param("ids") List<String> list,
|
||||
@Param("statTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
}
|
||||
@@ -0,0 +1,475 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.njcn.harmonic.common.mapper.RStatLimitRateDMapper">
|
||||
|
||||
<select id="getSumPassRate" resultType="com.njcn.harmonic.pojo.vo.RStatLimitRateDVO">
|
||||
SELECT
|
||||
SUM( all_time ) AS alltime,
|
||||
SUM( freq_dev_overtime ) AS frequency,
|
||||
SUM( ubalance_overtime ) AS uBalance,
|
||||
SUM( i_neg_overtime ) AS iNeg,
|
||||
SUM( iharm_13_overtime ) AS harmElec,
|
||||
SUM( uharm_4_overtime ) AS harmVoltage,
|
||||
SUM( flicker_overtime ) AS flicker,
|
||||
SUM( flicker_all_time ) AS allFlicker,
|
||||
SUM( voltage_dev_overtime ) AS voltageDeviation,
|
||||
SUM( inuharm_9_overtime ) AS inUharm
|
||||
FROM
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test=" statTime != null and statTime !=''">
|
||||
AND time_id >= #{statTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND time_id <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getSumLimitRateByLineIndexes" resultType="com.njcn.harmonic.pojo.vo.MonitorOverLimitVO">
|
||||
SELECT
|
||||
my_index AS id,
|
||||
SUM(all_time) AS overDay,
|
||||
SUM(freq_dev_overtime) AS freqOverDay,
|
||||
SUM(voltage_dev_overtime ) AS volDevOverDay,
|
||||
SUM(flicker_overtime) AS flickerOverDay,
|
||||
SUM(i_neg_overtime) AS negativeOverDay,
|
||||
SUM(ubalance_overtime) AS threeUnbalance,
|
||||
SUM(uaberrance_overtime) AS volDisOverDay,
|
||||
SUM(uharm_3_overtime) AS overVolThreeTimes,
|
||||
SUM(uharm_5_overtime) AS overVolFiveTimes,
|
||||
SUM(uharm_7_overtime) AS overVolSevenTimes,
|
||||
SUM(uharm_11_overtime) AS overVolElevenTimes,
|
||||
SUM(uharm_13_overtime) AS overVolThirteenTimes,
|
||||
SUM(uharm_23_overtime) AS overVolTwentyThreeTimes,
|
||||
SUM(uharm_25_overtime) AS overVolTwentyFiveTimes,
|
||||
SUM(uharm_2_overtime)
|
||||
+ SUM(uharm_4_overtime)
|
||||
+ SUM(uharm_6_overtime)
|
||||
+ SUM(uharm_8_overtime)
|
||||
+ SUM(uharm_9_overtime)
|
||||
+ SUM(uharm_10_overtime)
|
||||
+ SUM(uharm_12_overtime)
|
||||
+ SUM(uharm_14_overtime)
|
||||
+ SUM(uharm_15_overtime)
|
||||
+ SUM(uharm_16_overtime)
|
||||
+ SUM(uharm_17_overtime)
|
||||
+ SUM(uharm_18_overtime)
|
||||
+ SUM(uharm_19_overtime)
|
||||
+ SUM(uharm_20_overtime)
|
||||
+ SUM(uharm_21_overtime)
|
||||
+ SUM(uharm_22_overtime)
|
||||
+ SUM(uharm_24_overtime) AS overVolOtherTimes,
|
||||
SUM(iharm_3_overtime) AS overCurThreeTimes,
|
||||
SUM(iharm_5_overtime) AS overCurFiveTimes,
|
||||
SUM(iharm_7_overtime) AS overCurSevenTimes,
|
||||
SUM(iharm_11_overtime) AS overCurElevenTimes,
|
||||
SUM(iharm_13_overtime) AS overCurThirteenTimes,
|
||||
SUM(iharm_23_overtime) AS overCurTwentyThreeTimes,
|
||||
SUM(iharm_25_overtime) AS overCurTwentyFiveTimes,
|
||||
SUM(iharm_2_overtime)
|
||||
+ SUM(iharm_4_overtime)
|
||||
+ SUM(iharm_6_overtime)
|
||||
+ SUM(iharm_8_overtime)
|
||||
+ SUM(iharm_9_overtime)
|
||||
+ SUM(iharm_10_overtime)
|
||||
+ SUM(iharm_12_overtime)
|
||||
+ SUM(iharm_14_overtime)
|
||||
+ SUM(iharm_15_overtime)
|
||||
+ SUM(iharm_16_overtime)
|
||||
+ SUM(iharm_17_overtime)
|
||||
+ SUM(iharm_18_overtime)
|
||||
+ SUM(iharm_19_overtime)
|
||||
+ SUM(iharm_20_overtime)
|
||||
+ SUM(iharm_21_overtime)
|
||||
+ SUM(iharm_22_overtime)
|
||||
+ SUM(iharm_24_overtime) AS overCurOtherTimes
|
||||
FROM
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test=" statTime != null and statTime !=''">
|
||||
AND time_id >= #{statTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND time_id <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY my_index
|
||||
</select>
|
||||
<select id="getSumLimitRatePage" resultType="com.njcn.harmonic.pojo.vo.MonitorOverLimitVO">
|
||||
SELECT
|
||||
my_index AS id,
|
||||
SUM(all_time) AS overDay,
|
||||
SUM(freq_dev_overtime) AS freqOverDay,
|
||||
SUM(voltage_dev_overtime ) AS volDevOverDay,
|
||||
SUM(flicker_overtime) AS flickerOverDay,
|
||||
SUM(i_neg_overtime) AS negativeOverDay,
|
||||
SUM(ubalance_overtime) AS threeUnbalance,
|
||||
SUM(uaberrance_overtime) AS volDisOverDay,
|
||||
SUM(uharm_3_overtime) AS overVolThreeTimes,
|
||||
SUM(uharm_5_overtime) AS overVolFiveTimes,
|
||||
SUM(uharm_7_overtime) AS overVolSevenTimes,
|
||||
SUM(uharm_11_overtime) AS overVolElevenTimes,
|
||||
SUM(uharm_13_overtime) AS overVolThirteenTimes,
|
||||
SUM(uharm_23_overtime) AS overVolTwentyThreeTimes,
|
||||
SUM(uharm_25_overtime) AS overVolTwentyFiveTimes,
|
||||
SUM(uharm_2_overtime)
|
||||
+ SUM(uharm_4_overtime)
|
||||
+ SUM(uharm_6_overtime)
|
||||
+ SUM(uharm_8_overtime)
|
||||
+ SUM(uharm_9_overtime)
|
||||
+ SUM(uharm_10_overtime)
|
||||
+ SUM(uharm_12_overtime)
|
||||
+ SUM(uharm_14_overtime)
|
||||
+ SUM(uharm_15_overtime)
|
||||
+ SUM(uharm_16_overtime)
|
||||
+ SUM(uharm_17_overtime)
|
||||
+ SUM(uharm_18_overtime)
|
||||
+ SUM(uharm_19_overtime)
|
||||
+ SUM(uharm_20_overtime)
|
||||
+ SUM(uharm_21_overtime)
|
||||
+ SUM(uharm_22_overtime)
|
||||
+ SUM(uharm_24_overtime) AS overVolOtherTimes,
|
||||
SUM(iharm_3_overtime) AS overCurThreeTimes,
|
||||
SUM(iharm_5_overtime) AS overCurFiveTimes,
|
||||
SUM(iharm_7_overtime) AS overCurSevenTimes,
|
||||
SUM(iharm_11_overtime) AS overCurElevenTimes,
|
||||
SUM(iharm_13_overtime) AS overCurThirteenTimes,
|
||||
SUM(iharm_23_overtime) AS overCurTwentyThreeTimes,
|
||||
SUM(iharm_25_overtime) AS overCurTwentyFiveTimes,
|
||||
SUM(iharm_2_overtime)
|
||||
+ SUM(iharm_4_overtime)
|
||||
+ SUM(iharm_6_overtime)
|
||||
+ SUM(iharm_8_overtime)
|
||||
+ SUM(iharm_9_overtime)
|
||||
+ SUM(iharm_10_overtime)
|
||||
+ SUM(iharm_12_overtime)
|
||||
+ SUM(iharm_14_overtime)
|
||||
+ SUM(iharm_15_overtime)
|
||||
+ SUM(iharm_16_overtime)
|
||||
+ SUM(iharm_17_overtime)
|
||||
+ SUM(iharm_18_overtime)
|
||||
+ SUM(iharm_19_overtime)
|
||||
+ SUM(iharm_20_overtime)
|
||||
+ SUM(iharm_21_overtime)
|
||||
+ SUM(iharm_22_overtime)
|
||||
+ SUM(iharm_24_overtime) AS overCurOtherTimes
|
||||
FROM
|
||||
r_stat_limit_target_d
|
||||
<where>
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test=" statTime != null and statTime !=''">
|
||||
AND time_id >= #{statTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND time_id <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY my_index
|
||||
</select>
|
||||
|
||||
<select id="getPercentages" resultType="com.njcn.harmonic.pojo.vo.MonitorOverLimitVO$DataVO">
|
||||
SELECT
|
||||
<choose>
|
||||
<when test="_databaseId == 'mysql'">
|
||||
DATE_FORMAT(time_id, '%Y-%m-%d')
|
||||
</when>
|
||||
<otherwise>
|
||||
TO_CHAR(time_id, 'YYYY-MM-DD')
|
||||
</otherwise>
|
||||
</choose> AS time,
|
||||
<choose>
|
||||
<when test="_databaseId == 'mysql'">
|
||||
IFNULL(ROUND(
|
||||
</when>
|
||||
<otherwise>
|
||||
NVL(TRUNC(
|
||||
</otherwise>
|
||||
</choose>
|
||||
CASE
|
||||
WHEN SUM(all_time) = 0 THEN 0
|
||||
ELSE (1 - (
|
||||
-- 各类指标求和(保持原有逻辑不变)
|
||||
SUM(flicker_overtime) + SUM(flicker_all_time) + SUM(freq_dev_overtime) +
|
||||
SUM(voltage_dev_overtime) + SUM(ubalance_overtime) + SUM(uaberrance_overtime) +
|
||||
SUM(i_neg_overtime) +
|
||||
-- 电压谐波 (2-25)
|
||||
SUM(uharm_2_overtime) + SUM(uharm_3_overtime) + SUM(uharm_4_overtime) + SUM(uharm_5_overtime) +
|
||||
SUM(uharm_6_overtime) + SUM(uharm_7_overtime) + SUM(uharm_8_overtime) + SUM(uharm_9_overtime) +
|
||||
SUM(uharm_10_overtime) + SUM(uharm_11_overtime) + SUM(uharm_12_overtime) + SUM(uharm_13_overtime) +
|
||||
SUM(uharm_14_overtime) + SUM(uharm_15_overtime) + SUM(uharm_16_overtime) + SUM(uharm_17_overtime) +
|
||||
SUM(uharm_18_overtime) + SUM(uharm_19_overtime) + SUM(uharm_20_overtime) + SUM(uharm_21_overtime) +
|
||||
SUM(uharm_22_overtime) + SUM(uharm_23_overtime) + SUM(uharm_24_overtime) + SUM(uharm_25_overtime) +
|
||||
-- 电流谐波 (2-25)
|
||||
SUM(iharm_2_overtime) + SUM(iharm_3_overtime) + SUM(iharm_4_overtime) + SUM(iharm_5_overtime) +
|
||||
SUM(iharm_6_overtime) + SUM(iharm_7_overtime) + SUM(iharm_8_overtime) + SUM(iharm_9_overtime) +
|
||||
SUM(iharm_10_overtime) + SUM(iharm_11_overtime) + SUM(iharm_12_overtime) + SUM(iharm_13_overtime) +
|
||||
SUM(iharm_14_overtime) + SUM(iharm_15_overtime) + SUM(iharm_16_overtime) + SUM(iharm_17_overtime) +
|
||||
SUM(iharm_18_overtime) + SUM(iharm_19_overtime) + SUM(iharm_20_overtime) + SUM(iharm_21_overtime) +
|
||||
SUM(iharm_22_overtime) + SUM(iharm_23_overtime) + SUM(iharm_24_overtime) + SUM(iharm_25_overtime) +
|
||||
-- 间谐波 (1-16)
|
||||
SUM(inuharm_1_overtime) + SUM(inuharm_2_overtime) + SUM(inuharm_3_overtime) + SUM(inuharm_4_overtime) +
|
||||
SUM(inuharm_5_overtime) + SUM(inuharm_6_overtime) + SUM(inuharm_7_overtime) + SUM(inuharm_8_overtime) +
|
||||
SUM(inuharm_9_overtime) + SUM(inuharm_10_overtime) + SUM(inuharm_11_overtime) + SUM(inuharm_12_overtime) +
|
||||
SUM(inuharm_13_overtime) + SUM(inuharm_14_overtime) + SUM(inuharm_15_overtime) + SUM(inuharm_16_overtime)
|
||||
) / NULLIF(SUM(all_time) * 71, 0)) * 100
|
||||
END, 2), 0) AS data
|
||||
FROM
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
phasic_type = 'T'
|
||||
<if test="ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="statTime != null and statTime != ''">
|
||||
AND time_id >= #{statTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND time_id <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
<choose>
|
||||
<when test="_databaseId == 'mysql'">
|
||||
DATE_FORMAT(time_id, '%Y-%m-%d')
|
||||
</when>
|
||||
<otherwise>
|
||||
TO_CHAR(time_id, 'YYYY-MM-DD')
|
||||
</otherwise>
|
||||
</choose>
|
||||
ORDER BY time
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getSumPassRateList" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO">
|
||||
SELECT
|
||||
my_index as lineId ,
|
||||
sum(all_time) as all_time,
|
||||
sum(flicker_all_time) as flicker_all_time,
|
||||
sum(freq_dev_overtime) as freq_dev_overtime,
|
||||
sum(voltage_dev_overtime) as voltage_dev_overtime,
|
||||
sum(ubalance_overtime) as ubalance_overtime,
|
||||
sum(flicker_overtime) as flicker_overtime,
|
||||
sum(uaberrance_overtime) as uaberrance_overtime,
|
||||
sum(uharm_2_overtime) as uharm_2_overtime,
|
||||
sum(uharm_3_overtime) as uharm_3_overtime,
|
||||
sum(uharm_4_overtime) as uharm_4_overtime,
|
||||
sum(uharm_5_overtime) as uharm_5_overtime,
|
||||
sum(uharm_6_overtime) as uharm_6_overtime,
|
||||
sum(uharm_7_overtime) as uharm_7_overtime,
|
||||
sum(uharm_8_overtime) as uharm_8_overtime,
|
||||
sum(uharm_9_overtime) as uharm_9_overtime,
|
||||
sum(uharm_10_overtime) as uharm_10_overtime,
|
||||
sum(uharm_11_overtime) as uharm_11_overtime,
|
||||
sum(uharm_12_overtime) as uharm_12_overtime,
|
||||
sum(uharm_13_overtime) as uharm_13_overtime,
|
||||
sum(uharm_14_overtime) as uharm_14_overtime,
|
||||
sum(uharm_15_overtime) as uharm_15_overtime,
|
||||
sum(uharm_16_overtime) as uharm_16_overtime,
|
||||
sum(uharm_17_overtime) as uharm_17_overtime,
|
||||
sum(uharm_18_overtime) as uharm_18_overtime,
|
||||
sum(uharm_19_overtime) as uharm_19_overtime,
|
||||
sum(uharm_20_overtime) as uharm_20_overtime,
|
||||
sum(uharm_21_overtime) as uharm_21_overtime,
|
||||
sum(uharm_22_overtime) as uharm_22_overtime,
|
||||
sum(uharm_23_overtime) as uharm_23_overtime,
|
||||
sum(uharm_24_overtime) as uharm_24_overtime,
|
||||
sum(uharm_25_overtime) as uharm_25_overtime,
|
||||
sum(iharm_2_overtime) as iharm_2_overtime,
|
||||
sum(iharm_3_overtime) as iharm_3_overtime,
|
||||
sum(iharm_4_overtime) as iharm_4_overtime,
|
||||
sum(iharm_5_overtime) as iharm_5_overtime,
|
||||
sum(iharm_6_overtime) as iharm_6_overtime,
|
||||
sum(iharm_7_overtime) as iharm_7_overtime,
|
||||
sum(iharm_8_overtime) as iharm_8_overtime,
|
||||
sum(iharm_9_overtime) as iharm_9_overtime,
|
||||
sum(iharm_10_overtime) as iharm_10_overtime,
|
||||
sum(iharm_11_overtime) as iharm_11_overtime,
|
||||
sum(iharm_12_overtime) as iharm_12_overtime,
|
||||
sum(iharm_13_overtime) as iharm_13_overtime,
|
||||
sum(iharm_14_overtime) as iharm_14_overtime,
|
||||
sum(iharm_15_overtime) as iharm_15_overtime,
|
||||
sum(iharm_16_overtime) as iharm_16_overtime,
|
||||
sum(iharm_17_overtime) as iharm_17_overtime,
|
||||
sum(iharm_18_overtime) as iharm_18_overtime,
|
||||
sum(iharm_19_overtime) as iharm_19_overtime,
|
||||
sum(iharm_20_overtime) as iharm_20_overtime,
|
||||
sum(iharm_21_overtime) as iharm_21_overtime,
|
||||
sum(iharm_22_overtime) as iharm_22_overtime,
|
||||
sum(iharm_23_overtime) as iharm_23_overtime,
|
||||
sum(iharm_24_overtime) as iharm_24_overtime,
|
||||
sum(iharm_25_overtime) as iharm_25_overtime,
|
||||
sum(inuharm_1_overtime) as inuharm_1_overtime,
|
||||
sum(inuharm_2_overtime) as inuharm_2_overtime,
|
||||
sum(inuharm_3_overtime) as inuharm_3_overtime,
|
||||
sum(inuharm_4_overtime) as inuharm_4_overtime,
|
||||
sum(inuharm_5_overtime) as inuharm_5_overtime,
|
||||
sum(inuharm_6_overtime) as inuharm_6_overtime,
|
||||
sum(inuharm_7_overtime) as inuharm_7_overtime,
|
||||
sum(inuharm_8_overtime) as inuharm_8_overtime,
|
||||
sum(inuharm_9_overtime) as inuharm_9_overtime,
|
||||
sum(inuharm_10_overtime) as inuharm_10_overtime,
|
||||
sum(inuharm_11_overtime) as inuharm_11_overtime,
|
||||
sum(inuharm_12_overtime) as inuharm_12_overtime,
|
||||
sum(inuharm_13_overtime) as inuharm_13_overtime,
|
||||
sum(inuharm_14_overtime) as inuharm_14_overtime,
|
||||
sum(inuharm_15_overtime) as inuharm_15_overtime,
|
||||
sum(inuharm_16_overtime) as inuharm_16_overtime,
|
||||
sum(i_neg_overtime) as i_neg_overtime
|
||||
from
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
phasic_type = 'T'
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test=" statTime != null and statTime !=''">
|
||||
AND time_id >= #{statTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND time_id <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
my_index
|
||||
</select>
|
||||
|
||||
<select id="getAssessTargetRate" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO">
|
||||
select
|
||||
my_index as lineId,
|
||||
SUM(all_time) as allTime,
|
||||
SUM(flicker_all_time) as flickerAllTime,
|
||||
SUM(freq_dev_overtime) as freqDevOvertime,
|
||||
SUM(voltage_dev_overtime) as voltageDevOvertime,
|
||||
SUM(flicker_overtime) as flickerOvertime,
|
||||
SUM(ubalance_overtime) as ubalanceOvertime,
|
||||
SUM(uaberrance_overtime) as uaberranceOvertime,
|
||||
sum(uharm_2_overtime) uharm2Overtime,
|
||||
sum(uharm_3_overtime) uharm3Overtime,
|
||||
sum(uharm_4_overtime) uharm4Overtime,
|
||||
sum(uharm_5_overtime) uharm5Overtime,
|
||||
sum(uharm_6_overtime) uharm6Overtime,
|
||||
sum(uharm_7_overtime) uharm7Overtime,
|
||||
sum(uharm_8_overtime) uharm8Overtime,
|
||||
sum(uharm_9_overtime) uharm9Overtime,
|
||||
sum(uharm_10_overtime) uharm10Overtime,
|
||||
sum(uharm_11_overtime) uharm11Overtime,
|
||||
sum(uharm_12_overtime) uharm12Overtime,
|
||||
sum(uharm_13_overtime) uharm13Overtime,
|
||||
sum(uharm_14_overtime) uharm14Overtime,
|
||||
sum(uharm_15_overtime) uharm15Overtime,
|
||||
sum(uharm_16_overtime) uharm16Overtime,
|
||||
sum(uharm_17_overtime) uharm17Overtime,
|
||||
sum(uharm_18_overtime) uharm18Overtime,
|
||||
sum(uharm_19_overtime) uharm19Overtime,
|
||||
sum(uharm_20_overtime) uharm20Overtime,
|
||||
sum(uharm_21_overtime) uharm21Overtime,
|
||||
sum(uharm_22_overtime) uharm22Overtime,
|
||||
sum(uharm_23_overtime) uharm23Overtime,
|
||||
sum(uharm_24_overtime) uharm24Overtime,
|
||||
sum(uharm_25_overtime) uharm25Overtime,
|
||||
sum(iharm_2_overtime) iharm2Overtime,
|
||||
sum(iharm_3_overtime) iharm3Overtime,
|
||||
sum(iharm_4_overtime) iharm4Overtime,
|
||||
sum(iharm_5_overtime) iharm5Overtime,
|
||||
sum(iharm_6_overtime) iharm6Overtime,
|
||||
sum(iharm_7_overtime) iharm7Overtime,
|
||||
sum(iharm_8_overtime) iharm8Overtime,
|
||||
sum(iharm_9_overtime) iharm9Overtime,
|
||||
sum(iharm_10_overtime) iharm10Overtime,
|
||||
sum(iharm_11_overtime) iharm11Overtime,
|
||||
sum(iharm_12_overtime) iharm12Overtime,
|
||||
sum(iharm_13_overtime) iharm13Overtime,
|
||||
sum(iharm_14_overtime) iharm14Overtime,
|
||||
sum(iharm_15_overtime) iharm15Overtime,
|
||||
sum(iharm_16_overtime) iharm16Overtime,
|
||||
sum(iharm_17_overtime) iharm17Overtime,
|
||||
sum(iharm_18_overtime) iharm18Overtime,
|
||||
sum(iharm_19_overtime) iharm19Overtime,
|
||||
sum(iharm_20_overtime) iharm20Overtime,
|
||||
sum(iharm_21_overtime) iharm21Overtime,
|
||||
sum(iharm_22_overtime) iharm22Overtime,
|
||||
sum(iharm_23_overtime) iharm23Overtime,
|
||||
sum(iharm_24_overtime) iharm24Overtime,
|
||||
sum(iharm_25_overtime) iharm25Overtime,
|
||||
sum(inuharm_1_overtime) inuharm1Overtime,
|
||||
sum(inuharm_2_overtime) inuharm2Overtime,
|
||||
sum(inuharm_3_overtime) inuharm3Overtime,
|
||||
sum(inuharm_4_overtime) inuharm4Overtime,
|
||||
sum(inuharm_5_overtime) inuharm5Overtime,
|
||||
sum(inuharm_6_overtime) inuharm6Overtime,
|
||||
sum(inuharm_7_overtime) inuharm7Overtime,
|
||||
sum(inuharm_8_overtime) inuharm8Overtime,
|
||||
sum(inuharm_9_overtime) inuharm9Overtime,
|
||||
sum(inuharm_10_overtime) inuharm10Overtime,
|
||||
sum(inuharm_11_overtime) inuharm11Overtime,
|
||||
sum(inuharm_12_overtime) inuharm12Overtime,
|
||||
sum(inuharm_13_overtime) inuharm13Overtime,
|
||||
sum(inuharm_14_overtime) inuharm14Overtime,
|
||||
sum(inuharm_15_overtime) inuharm15Overtime,
|
||||
sum(inuharm_16_overtime) inuharm16Overtime,
|
||||
sum(i_neg_overtime) iNegOvertime
|
||||
from
|
||||
r_stat_limit_rate_d
|
||||
where
|
||||
time_id between #{statTime} and #{endTime}
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
group by
|
||||
my_index
|
||||
</select>
|
||||
|
||||
<select id="getAllOverTimes" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO">
|
||||
select
|
||||
my_index as lineId,
|
||||
SUM(freq_dev_overtime
|
||||
+ flicker_overtime
|
||||
+ voltage_dev_overtime
|
||||
+ ubalance_overtime
|
||||
+ uaberrance_overtime
|
||||
+ i_neg_overtime
|
||||
+ uharm_2_overtime + uharm_3_overtime + uharm_4_overtime + uharm_5_overtime + uharm_6_overtime + uharm_7_overtime + uharm_8_overtime + uharm_9_overtime + uharm_10_overtime + uharm_11_overtime + uharm_12_overtime + uharm_13_overtime + uharm_14_overtime + uharm_15_overtime + uharm_16_overtime + uharm_17_overtime + uharm_18_overtime + uharm_19_overtime + uharm_20_overtime + uharm_21_overtime + uharm_22_overtime + uharm_23_overtime + uharm_24_overtime + uharm_25_overtime
|
||||
+ iharm_2_overtime + iharm_3_overtime + iharm_4_overtime + iharm_5_overtime + iharm_6_overtime + iharm_7_overtime + iharm_8_overtime + iharm_9_overtime + iharm_10_overtime + iharm_11_overtime + iharm_12_overtime + iharm_13_overtime + iharm_14_overtime + iharm_15_overtime + iharm_16_overtime + iharm_17_overtime + iharm_18_overtime + iharm_19_overtime + iharm_20_overtime + iharm_21_overtime + iharm_22_overtime + iharm_23_overtime + iharm_24_overtime + iharm_25_overtime
|
||||
+ inuharm_1_overtime + inuharm_2_overtime + inuharm_3_overtime + inuharm_4_overtime + inuharm_5_overtime + inuharm_6_overtime + inuharm_7_overtime + inuharm_8_overtime + inuharm_9_overtime + inuharm_10_overtime + inuharm_11_overtime + inuharm_12_overtime + inuharm_13_overtime + inuharm_14_overtime + inuharm_15_overtime + inuharm_16_overtime
|
||||
) as allTime
|
||||
from
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
and time_id between #{statTime} and #{endTime}
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
group by
|
||||
my_index
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -7,6 +7,7 @@ import cn.hutool.core.date.TimeInterval;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.text.StrPool;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONConfig;
|
||||
@@ -14,17 +15,21 @@ import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONTokener;
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.harmonic.common.mapper.ExcelRptTempMapper;
|
||||
import com.njcn.harmonic.common.mapper.RStatLimitRateDMapper;
|
||||
import com.njcn.harmonic.common.pojo.dto.DeviceUnitCommDTO;
|
||||
import com.njcn.harmonic.common.service.CustomReportTableService;
|
||||
import com.njcn.harmonic.enums.HarmonicResponseEnum;
|
||||
import com.njcn.harmonic.pojo.dto.ReportTemplateDTO;
|
||||
import com.njcn.harmonic.pojo.param.ReportSearchParam;
|
||||
import com.njcn.harmonic.pojo.po.ExcelRptTemp;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
|
||||
import com.njcn.influx.constant.InfluxDbSqlConstant;
|
||||
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
||||
import com.njcn.influx.utils.InfluxDbUtils;
|
||||
@@ -45,9 +50,11 @@ import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
@@ -73,6 +80,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
private final EpdFeignClient epdFeignClient;
|
||||
private final FileStorageUtil fileStorageUtil;
|
||||
private final DicDataFeignClient dicDataFeignClient;
|
||||
private final RStatLimitRateDMapper rStatLimitRateDMapper;
|
||||
private final InfluxDbUtils influxDbUtils;
|
||||
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
|
||||
|
||||
@@ -218,8 +226,8 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
try {
|
||||
future.get(); // 这会阻塞直到任务完成或抛出异常
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
log.error("自定义报表多线程查询流程出错!错误信息{}", e.getMessage());
|
||||
throw new BusinessException(CommonResponseEnum.FAIL,"自定义报表多线程查询流程出错!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,7 +600,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
jsonArray = new JSONArray(new JSONTokener(defaultStream, new JSONConfig()));
|
||||
parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList);
|
||||
}
|
||||
}catch (Exception e1){
|
||||
} catch (Exception e1) {
|
||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||
}
|
||||
}
|
||||
@@ -655,9 +663,9 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
} else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) {
|
||||
assembleSqlAndQuery(tMap, ledgerMap.get("LEVEL"), ledgerMap.get("PT"), ledgerMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList, tableMap);
|
||||
} else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) {
|
||||
assembleSqlAndQuery(tMap, ledgerMap.get("LEVEL"), ledgerMap.get("PT"), ledgerMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList,tableMap);
|
||||
assembleSqlAndQuery(tMap, ledgerMap.get("LEVEL"), ledgerMap.get("PT"), ledgerMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList, tableMap);
|
||||
} else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) {
|
||||
assembleSqlAndQuery(tMap, ledgerMap.get("LEVEL"), ledgerMap.get("PT"), ledgerMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList,tableMap);
|
||||
assembleSqlAndQuery(tMap, ledgerMap.get("LEVEL"), ledgerMap.get("PT"), ledgerMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList, tableMap);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -673,8 +681,8 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
try {
|
||||
future.get(); // 这会阻塞直到任务完成或抛出异常
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
log.error("自定义报表多线程查询流程出错!错误信息{}", e.getMessage());
|
||||
throw new BusinessException(CommonResponseEnum.FAIL,"自定义报表多线程查询流程出错!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -687,6 +695,196 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 合格率sheet组装
|
||||
* @param reportSearchParam
|
||||
* @return
|
||||
*/
|
||||
public Map<String, String> assemblePassRateResult(ReportSearchParam reportSearchParam) {
|
||||
Map<String, String> resultMap = new HashMap<>();
|
||||
|
||||
// 1. 查询数据
|
||||
LambdaQueryWrapper<RStatLimitRateDPO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(RStatLimitRateDPO::getLineId, reportSearchParam.getLineId())
|
||||
.between(RStatLimitRateDPO::getTime, reportSearchParam.getStartTime(), reportSearchParam.getEndTime());
|
||||
List<RStatLimitRateDPO> list = rStatLimitRateDMapper.selectList(wrapper);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 2. 按相分组
|
||||
Map<String, List<RStatLimitRateDPO>> phaseMap = list.stream()
|
||||
.collect(Collectors.groupingBy(item -> item.getPhasicType() == null ? "" : item.getPhasicType()));
|
||||
|
||||
RStatLimitRateDPO A = assRStatLimitRateDPO(phaseMap.getOrDefault("A", Collections.emptyList()), false);
|
||||
RStatLimitRateDPO B = assRStatLimitRateDPO(phaseMap.getOrDefault("B", Collections.emptyList()), false);
|
||||
RStatLimitRateDPO C = assRStatLimitRateDPO(phaseMap.getOrDefault("C", Collections.emptyList()), false);
|
||||
RStatLimitRateDPO T = assRStatLimitRateDPO(phaseMap.getOrDefault("T", Collections.emptyList()), true);
|
||||
|
||||
if (getVal(A.getAllTime()) <= 0 || getVal(B.getAllTime()) <= 0 || getVal(C.getAllTime()) <= 0) {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 3. 工具:计算合过率
|
||||
java.util.function.BiFunction<Integer, Integer, Double> calc = (overtime, total) -> {
|
||||
int ot = overtime == null ? 0 : overtime;
|
||||
int tt = total == null ? 0 : total;
|
||||
return tt <= 0 ? 0 : (1 - ot * 1.0 / tt) * 100;
|
||||
};
|
||||
java.util.function.DoubleFunction<String> fmt = d -> BigDecimal.valueOf(d).setScale(2, RoundingMode.HALF_UP).toString();
|
||||
|
||||
// 4. 通用处理:把三项通过率算出来,put到map
|
||||
java.util.function.BiFunction<String, java.util.function.Function<RStatLimitRateDPO, Integer>, Void> process = (name, getter) -> {
|
||||
double a = calc.apply(getter.apply(A), A.getAllTime());
|
||||
double b = calc.apply(getter.apply(B), B.getAllTime());
|
||||
double c = calc.apply(getter.apply(C), C.getAllTime());
|
||||
resultMap.put("$" + name + "#A#pass$", fmt.apply(a));
|
||||
resultMap.put("$" + name + "#B#pass$", fmt.apply(b));
|
||||
resultMap.put("$" + name + "#C#pass$", fmt.apply(c));
|
||||
resultMap.put("$" + name + "#all$", fmt.apply(Math.min(a, Math.min(b, c))));
|
||||
return null;
|
||||
};
|
||||
|
||||
// 5. 电压偏差
|
||||
process.apply("voltageDevOvertime", RStatLimitRateDPO::getVoltageDevOvertime);
|
||||
// 6. 电压谐波畸变率
|
||||
process.apply("uaberranceOvertime", RStatLimitRateDPO::getUaberranceOvertime);
|
||||
|
||||
// 7. T相:三相不平衡 + 频率偏差
|
||||
double ubalance = calc.apply(T.getUbalanceOvertime(), A.getAllTime());
|
||||
double freqDev = calc.apply(T.getFreqDevOvertime(), A.getAllTime());
|
||||
resultMap.put("$ubalanceOvertime$", fmt.apply(ubalance));
|
||||
resultMap.put("$freqDevOvertime$", fmt.apply(freqDev));
|
||||
|
||||
// 8. 谐波 2~25(电压 + 电流)
|
||||
for (int i = 2; i <= 25; i++) {
|
||||
// 电压谐波
|
||||
String uField = "uharm" + i + "Overtime";
|
||||
double ua = calc.apply(getField(A, uField), A.getAllTime());
|
||||
double ub = calc.apply(getField(B, uField), B.getAllTime());
|
||||
double uc = calc.apply(getField(C, uField), C.getAllTime());
|
||||
resultMap.put("$" + uField + "#A#pass$", fmt.apply(ua));
|
||||
resultMap.put("$" + uField + "#B#pass$", fmt.apply(ub));
|
||||
resultMap.put("$" + uField + "#C#pass$", fmt.apply(uc));
|
||||
resultMap.put("$" + uField + "#all$", fmt.apply(Math.min(ua, Math.min(ub, uc))));
|
||||
|
||||
// 电流谐波
|
||||
String iField = "iharm" + i + "Overtime";
|
||||
double ia = calc.apply(getField(A, iField), A.getAllTime());
|
||||
double ib = calc.apply(getField(B, iField), B.getAllTime());
|
||||
double ic = calc.apply(getField(C, iField), C.getAllTime());
|
||||
resultMap.put("$" + iField + "#A#pass$", fmt.apply(ia));
|
||||
resultMap.put("$" + iField + "#B#pass$", fmt.apply(ib));
|
||||
resultMap.put("$" + iField + "#C#pass$", fmt.apply(ic));
|
||||
resultMap.put("$" + iField + "#all$", fmt.apply(Math.min(ia, Math.min(ib, ic))));
|
||||
}
|
||||
|
||||
// 9. 各相总次数
|
||||
resultMap.put("$harmOvertime#A#num$", String.valueOf(getVal(A.getAllTime())));
|
||||
resultMap.put("$harmOvertime#B#num$", String.valueOf(getVal(B.getAllTime())));
|
||||
resultMap.put("$harmOvertime#C#num$", String.valueOf(getVal(C.getAllTime())));
|
||||
|
||||
// 10. 闪变(单独处理,因为分母是 flickerAllTime)
|
||||
if (getVal(A.getFlickerAllTime()) > 0 && getVal(B.getFlickerAllTime()) > 0 && getVal(C.getFlickerAllTime()) > 0) {
|
||||
double fa = calc.apply(A.getFlickerOvertime(), A.getFlickerAllTime());
|
||||
double fb = calc.apply(B.getFlickerOvertime(), B.getFlickerAllTime());
|
||||
double fc = calc.apply(C.getFlickerOvertime(), C.getFlickerAllTime());
|
||||
resultMap.put("$flickerOvertime#A#pass$", fmt.apply(fa));
|
||||
resultMap.put("$flickerOvertime#B#pass$", fmt.apply(fb));
|
||||
resultMap.put("$flickerOvertime#C#pass$", fmt.apply(fc));
|
||||
resultMap.put("$flickerOvertime#all$", fmt.apply(Math.min(fa, Math.min(fb, fc))));
|
||||
resultMap.put("$flickerOvertime#A#num$", String.valueOf(getVal(A.getFlickerAllTime())));
|
||||
resultMap.put("$flickerOvertime#B#num$", String.valueOf(getVal(B.getFlickerAllTime())));
|
||||
resultMap.put("$flickerOvertime#C#num$", String.valueOf(getVal(C.getFlickerAllTime())));
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// ========== 两个小工具方法 ==========
|
||||
private int getVal(Integer v) {
|
||||
return v == null ? 0 : v;
|
||||
}
|
||||
|
||||
private Integer getField(RStatLimitRateDPO obj, String fieldName) {
|
||||
try {
|
||||
Field f = RStatLimitRateDPO.class.getDeclaredField(fieldName);
|
||||
f.setAccessible(true);
|
||||
return (Integer) f.get(obj);
|
||||
} catch (Exception e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private double limitPassRateForMap(Map<String, String> resultMap, RStatLimitRateDPO obj, String fieldName, String phase) {
|
||||
double tem = 0;
|
||||
try {
|
||||
Field fieldA = obj.getClass().getDeclaredField(fieldName);
|
||||
fieldA.setAccessible(true);
|
||||
int valA = (int) fieldA.get(obj);
|
||||
tem = (1 - valA * 1.0 / obj.getAllTime()) * 100;
|
||||
BigDecimal vA = new BigDecimal(tem).setScale(2, RoundingMode.HALF_UP);
|
||||
String keyA = "$" + fieldName + "#" + phase + "#pass$";
|
||||
|
||||
resultMap.put(keyA, vA.toString());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return tem;
|
||||
}
|
||||
|
||||
private RStatLimitRateDPO assRStatLimitRateDPO(List<RStatLimitRateDPO> limitRateA, boolean allFlag) {
|
||||
RStatLimitRateDPO a = new RStatLimitRateDPO();
|
||||
for (RStatLimitRateDPO b : limitRateA) {
|
||||
a.setAllTime(addInt(a.getAllTime(), b.getAllTime()));
|
||||
if (allFlag) {
|
||||
a.setFreqDevOvertime(addInt(a.getFreqDevOvertime(), b.getFreqDevOvertime()));
|
||||
a.setUbalanceOvertime(addInt(a.getUbalanceOvertime(), b.getUbalanceOvertime()));
|
||||
return a;
|
||||
}
|
||||
|
||||
a.setFlickerAllTime(addInt(a.getFlickerAllTime(), b.getFlickerAllTime()));
|
||||
a.setFlickerOvertime(addInt(a.getFlickerOvertime(), b.getFlickerOvertime()));
|
||||
a.setUaberranceOvertime(addInt(a.getUaberranceOvertime(), b.getUaberranceOvertime()));
|
||||
a.setVoltageDevOvertime(addInt(a.getVoltageDevOvertime(), b.getVoltageDevOvertime()));
|
||||
|
||||
// uharm2~25 用循环简化
|
||||
for (int i = 2; i <= 25; i++) {
|
||||
String fieldName = "uharm" + i + "Overtime";
|
||||
try {
|
||||
Field field = RStatLimitRateDPO.class.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
Integer valA = (Integer) field.get(a);
|
||||
Integer valB = (Integer) field.get(b);
|
||||
field.set(a, addInt(valA, valB));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// iharm2~25 用循环简化
|
||||
for (int i = 2; i <= 25; i++) {
|
||||
String fieldName = "iharm" + i + "Overtime";
|
||||
try {
|
||||
Field field = RStatLimitRateDPO.class.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
Integer valA = (Integer) field.get(a);
|
||||
Integer valB = (Integer) field.get(b);
|
||||
field.set(a, addInt(valA, valB));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
// 安全相加方法
|
||||
private Integer addInt(Integer a, Integer b) {
|
||||
return (a == null ? 0 : a) + (b == null ? 0 : b);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析模板
|
||||
*
|
||||
@@ -698,64 +896,66 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
//通过文件服务器获取
|
||||
jsonArray.forEach(item -> {
|
||||
JSONObject jsonObject = (JSONObject) item;
|
||||
JSONArray itemArr = (JSONArray) jsonObject.get(CELL_DATA);
|
||||
itemArr.forEach((it) -> {
|
||||
if (Objects.nonNull(it) && !"null".equals(it.toString())) {
|
||||
//获取到1列
|
||||
JSONObject data = (JSONObject) it;
|
||||
JSONObject son = (JSONObject) data.get(V);
|
||||
if (son.containsKey(V)) {
|
||||
String v = son.getStr(V);
|
||||
//数据格式:$HA[_25]#B#max#classId$ 或 $HA[_25]#max#classId$
|
||||
if (v.charAt(0) == '$' && v.contains(STR_ONE)) {
|
||||
//剔除前后$
|
||||
v = v.replace(STR_TWO, "");
|
||||
//封装ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
//根据#分割数据
|
||||
String[] vItem = v.split(STR_ONE);
|
||||
if (vItem.length == 5) {
|
||||
//$HA[_25]#B#max#classId$
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setPhase(vItem[1].substring(0, 1).toUpperCase());
|
||||
reportTemplateDTO.setStatMethod(vItem[2].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[3].toUpperCase());
|
||||
reportTemplateDTO.setLimitName(vItem[4].toUpperCase());
|
||||
} else if (vItem.length == 4) {
|
||||
//$HA[_25]#max#classId$
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setPhase("T");
|
||||
reportTemplateDTO.setStatMethod(vItem[1].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[2].toUpperCase());
|
||||
reportTemplateDTO.setLimitName(vItem[3].toUpperCase());
|
||||
}
|
||||
if (!"合格率".equals(jsonObject.getStr("name"))) {
|
||||
JSONArray itemArr = (JSONArray) jsonObject.get(CELL_DATA);
|
||||
itemArr.forEach((it) -> {
|
||||
if (Objects.nonNull(it) && !"null".equals(it.toString())) {
|
||||
//获取到1列
|
||||
JSONObject data = (JSONObject) it;
|
||||
JSONObject son = (JSONObject) data.get(V);
|
||||
if (son.containsKey(V)) {
|
||||
String v = son.getStr(V);
|
||||
//数据格式:$HA[_25]#B#max#classId$ 或 $HA[_25]#max#classId$
|
||||
if (v.charAt(0) == '$' && v.contains(STR_ONE)) {
|
||||
//剔除前后$
|
||||
v = v.replace(STR_TWO, "");
|
||||
//封装ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
//根据#分割数据
|
||||
String[] vItem = v.split(STR_ONE);
|
||||
if (vItem.length == 5) {
|
||||
//$HA[_25]#B#max#classId$
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setPhase(vItem[1].substring(0, 1).toUpperCase());
|
||||
reportTemplateDTO.setStatMethod(vItem[2].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[3].toUpperCase());
|
||||
reportTemplateDTO.setLimitName(vItem[4].toUpperCase());
|
||||
} else if (vItem.length == 4) {
|
||||
//$HA[_25]#max#classId$
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setPhase("T");
|
||||
reportTemplateDTO.setStatMethod(vItem[1].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[2].toUpperCase());
|
||||
reportTemplateDTO.setLimitName(vItem[3].toUpperCase());
|
||||
}
|
||||
|
||||
reportTemplateDTOList.add(reportTemplateDTO);
|
||||
} else if (v.charAt(0) == '%' && v.contains(STR_ONE)) {
|
||||
//封装指标结论ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
v = v.replace(STR_FOUR, "");
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
//根据#分割数据
|
||||
String[] vItem = v.split(STR_ONE);
|
||||
if (vItem.length == 3) {
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setStatMethod(vItem[1].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[2].toUpperCase());
|
||||
reportTemplateDTOList.add(reportTemplateDTO);
|
||||
} else if (v.charAt(0) == '%' && v.contains(STR_ONE)) {
|
||||
//封装指标结论ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
v = v.replace(STR_FOUR, "");
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
//根据#分割数据
|
||||
String[] vItem = v.split(STR_ONE);
|
||||
if (vItem.length == 3) {
|
||||
reportTemplateDTO.setTemplateName(vItem[0].toUpperCase());
|
||||
reportTemplateDTO.setStatMethod(vItem[1].toUpperCase());
|
||||
reportTemplateDTO.setResourceId(vItem[2].toUpperCase());
|
||||
}
|
||||
reportLimitList.add(reportTemplateDTO);
|
||||
} else if (v.charAt(0) == '&') {
|
||||
//封装ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
v = v.replace(STR_THREE, "");
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
reportTemplateDTO.setTemplateName(v.toUpperCase());
|
||||
terminalList.add(reportTemplateDTO);
|
||||
}
|
||||
reportLimitList.add(reportTemplateDTO);
|
||||
} else if (v.charAt(0) == '&') {
|
||||
//封装ReportTemplateDTO
|
||||
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO();
|
||||
v = v.replace(STR_THREE, "");
|
||||
reportTemplateDTO.setItemName(v.toUpperCase());
|
||||
reportTemplateDTO.setTemplateName(v.toUpperCase());
|
||||
terminalList.add(reportTemplateDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||
@@ -1188,7 +1388,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
.append(InfluxDbSqlConstant.QM)
|
||||
.append(InfluxDBTableConstant.PHASE_TYPE_T)
|
||||
.append(InfluxDbSqlConstant.QM);
|
||||
}else {
|
||||
} else {
|
||||
sql.append(InfluxDbSqlConstant.AND)
|
||||
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||
.append(InfluxDbSqlConstant.EQ)
|
||||
@@ -1220,7 +1420,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
aggregateFunc = isAvg ? InfluxDbSqlConstant.AVG:method;
|
||||
aggregateFunc = isAvg ? InfluxDbSqlConstant.AVG : method;
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
sql.append(aggregateFunc)
|
||||
.append(InfluxDbSqlConstant.LBK)
|
||||
@@ -1305,7 +1505,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList());
|
||||
} else {
|
||||
// 兼容达梦数据库方法
|
||||
if(Objects.nonNull(mapList.get(0))) {
|
||||
if (Objects.nonNull(mapList.get(0))) {
|
||||
Map<String, Object> map = convertKeysToUpperCase(mapList.get(0));
|
||||
for (ReportTemplateDTO item : data) {
|
||||
if (map.containsKey(item.getItemName())) {
|
||||
@@ -1447,74 +1647,123 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
||||
//2、把itemName的value赋给v和m
|
||||
jsonArray.forEach(item -> {
|
||||
JSONObject jsonObject = (JSONObject) item;
|
||||
JSONArray itemArr = (JSONArray) jsonObject.get(CELL_DATA);
|
||||
itemArr.forEach((it) -> {
|
||||
if (Objects.nonNull(it) && !"null".equals(it.toString())) {
|
||||
//获取到1列
|
||||
JSONObject data = (JSONObject) it;
|
||||
JSONObject son = (JSONObject) data.get(V);
|
||||
if (son.containsKey(V)) {
|
||||
String v = son.getStr(V);
|
||||
//数据格式:$HA[_25]#B#max#classId$ 或 $HA[_25]#max#classId$
|
||||
if (v.charAt(0) == '$' && v.contains(STR_ONE)) {
|
||||
String str = "";
|
||||
List<ReportTemplateDTO> rDto = assMap.get(v.replace(STR_TWO, "").toUpperCase());
|
||||
if (Objects.nonNull(rDto)) {
|
||||
str = rDto.get(0).getValue();
|
||||
//没有值,赋"/"
|
||||
if (StringUtils.isBlank(str)) {
|
||||
str = "/";
|
||||
}
|
||||
son.set(V, str);
|
||||
if (Objects.nonNull(rDto.get(0).getOverLimitFlag()) && rDto.get(0).getOverLimitFlag() == 1) {
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '%' && v.contains(STR_ONE)) {
|
||||
//指标结论情况
|
||||
String str = "";
|
||||
List<ReportTemplateDTO> rDto = assMap.get(v.replace(STR_FOUR, "").toUpperCase());
|
||||
if (Objects.nonNull(rDto)) {
|
||||
str = rDto.get(0).getValue();
|
||||
//没有值,赋"/"
|
||||
if (StringUtils.isBlank(str)) {
|
||||
str = "/";
|
||||
}
|
||||
son.set(V, str);
|
||||
if (str.contains("不合格")) {
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '&') {
|
||||
//结论
|
||||
String tem = v.replace(STR_THREE, "").toUpperCase();
|
||||
if (!finalTerminalMap.isEmpty()) {
|
||||
if ("STATIS_TIME".equals(tem)) {
|
||||
//如何时间是大于当前时间则用当前时间
|
||||
String localTime = InfluxDbSqlConstant.END_TIME;
|
||||
LocalDate localDate = LocalDateTimeUtil.parseDate(reportSearchParam.getEndTime(), DatePattern.NORM_DATE_PATTERN);
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
if (nowDate.isAfter(localDate)) {
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + localTime);
|
||||
} else {
|
||||
localTime = " " + LocalTime.now().format(DatePattern.NORM_TIME_FORMATTER);
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + nowDate + localTime);
|
||||
}
|
||||
} else {
|
||||
//台账信息
|
||||
son.set(V, finalTerminalMap.getOrDefault(tem, "/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
//解决数据单位问题 @指标#类型@
|
||||
if (v.charAt(0) == '@' && v.contains(STR_ONE)) {
|
||||
String replace = v.replace("@", "");
|
||||
son.set(V, unit.getOrDefault(replace, "/"));
|
||||
if ("合格率".equals(jsonObject.getStr("name"))) {
|
||||
//新增合格率sheet处理
|
||||
Map<String, String> rateMap = assemblePassRateResult(reportSearchParam);
|
||||
|
||||
JSONArray itemArr = (JSONArray) jsonObject.get(CELL_DATA);
|
||||
itemArr.forEach((it) -> {
|
||||
if (Objects.nonNull(it) && !"null".equals(it.toString())) {
|
||||
//获取到1列
|
||||
JSONObject data = (JSONObject) it;
|
||||
JSONObject son = (JSONObject) data.get(V);
|
||||
if (son.containsKey(V)) {
|
||||
String v = son.getStr(V);
|
||||
|
||||
if (v.charAt(0) == '&') {
|
||||
//结论
|
||||
String tem = v.replace(STR_THREE, "").toUpperCase();
|
||||
if (!finalTerminalMap.isEmpty()) {
|
||||
if ("STATIS_TIME".equals(tem)) {
|
||||
//如何时间是大于当前时间则用当前时间
|
||||
String localTime = InfluxDbSqlConstant.END_TIME;
|
||||
LocalDate localDate = LocalDateTimeUtil.parseDate(reportSearchParam.getEndTime(), DatePattern.NORM_DATE_PATTERN);
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
if (nowDate.isAfter(localDate)) {
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + localTime);
|
||||
} else {
|
||||
localTime = " " + LocalTime.now().format(DatePattern.NORM_TIME_FORMATTER);
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + nowDate + localTime);
|
||||
}
|
||||
} else {
|
||||
//台账信息
|
||||
son.set(V, finalTerminalMap.getOrDefault(tem, "/"));
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '$') {
|
||||
if (rateMap.containsKey(v)) {
|
||||
String val = rateMap.get(v);
|
||||
son.set(V,val);
|
||||
if(v.contains("#all$")){
|
||||
if(Double.parseDouble(val) < 98){
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
JSONArray itemArr = (JSONArray) jsonObject.get(CELL_DATA);
|
||||
itemArr.forEach((it) -> {
|
||||
if (Objects.nonNull(it) && !"null".equals(it.toString())) {
|
||||
//获取到1列
|
||||
JSONObject data = (JSONObject) it;
|
||||
JSONObject son = (JSONObject) data.get(V);
|
||||
if (son.containsKey(V)) {
|
||||
String v = son.getStr(V);
|
||||
//数据格式:$HA[_25]#B#max#classId$ 或 $HA[_25]#max#classId$
|
||||
if (v.charAt(0) == '$' && v.contains(STR_ONE)) {
|
||||
String str = "";
|
||||
List<ReportTemplateDTO> rDto = assMap.get(v.replace(STR_TWO, "").toUpperCase());
|
||||
if (Objects.nonNull(rDto)) {
|
||||
str = rDto.get(0).getValue();
|
||||
//没有值,赋"/"
|
||||
if (StringUtils.isBlank(str)) {
|
||||
str = "/";
|
||||
}
|
||||
son.set(V, str);
|
||||
if (Objects.nonNull(rDto.get(0).getOverLimitFlag()) && rDto.get(0).getOverLimitFlag() == 1) {
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '%' && v.contains(STR_ONE)) {
|
||||
//指标结论情况
|
||||
String str = "";
|
||||
List<ReportTemplateDTO> rDto = assMap.get(v.replace(STR_FOUR, "").toUpperCase());
|
||||
if (Objects.nonNull(rDto)) {
|
||||
str = rDto.get(0).getValue();
|
||||
//没有值,赋"/"
|
||||
if (StringUtils.isBlank(str)) {
|
||||
str = "/";
|
||||
}
|
||||
son.set(V, str);
|
||||
if (str.contains("不合格")) {
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '&') {
|
||||
//结论
|
||||
String tem = v.replace(STR_THREE, "").toUpperCase();
|
||||
if (!finalTerminalMap.isEmpty()) {
|
||||
if ("STATIS_TIME".equals(tem)) {
|
||||
//如何时间是大于当前时间则用当前时间
|
||||
String localTime = InfluxDbSqlConstant.END_TIME;
|
||||
LocalDate localDate = LocalDateTimeUtil.parseDate(reportSearchParam.getEndTime(), DatePattern.NORM_DATE_PATTERN);
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
if (nowDate.isAfter(localDate)) {
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + localTime);
|
||||
} else {
|
||||
localTime = " " + LocalTime.now().format(DatePattern.NORM_TIME_FORMATTER);
|
||||
son.set(V, reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + nowDate + localTime);
|
||||
}
|
||||
} else {
|
||||
//台账信息
|
||||
son.set(V, finalTerminalMap.getOrDefault(tem, "/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
//解决数据单位问题 @指标#类型@
|
||||
if (v.charAt(0) == '@' && v.contains(STR_ONE)) {
|
||||
String replace = v.replace("@", "");
|
||||
son.set(V, unit.getOrDefault(replace, "/"));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user