@@ -1,8 +1,11 @@
package com.njcn.harmonic.service.impl ;
import cn.hutool.core.collection.CollUtil ;
import cn.hutool.core.date.DatePattern ;
import cn.hutool.core.date.DateUtil ;
import cn.hutool.core.date.LocalDateTimeUtil ;
import cn.hutool.core.io.IoUtil ;
import cn.hutool.core.text.StrBuilder ;
import cn.hutool.core.text.StrPool ;
import cn.hutool.core.util.CharsetUtil ;
import cn.hutool.core.util.StrUtil ;
@@ -13,6 +16,8 @@ import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException ;
import com.njcn.common.utils.FileUtil ;
import com.njcn.csdevice.api.CsCommTerminalFeignClient ;
import com.njcn.csdevice.api.WlRecordFeignClient ;
import com.njcn.csdevice.pojo.po.WlRecord ;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient ;
import com.njcn.device.pq.api.DeptLineFeignClient ;
import com.njcn.device.pq.api.DeviceUnitClient ;
@@ -62,10 +67,12 @@ import sun.reflect.generics.tree.Tree;
import javax.servlet.http.HttpServletResponse ;
import java.io.* ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.text.DateFormat ;
import java.text.ParseException ;
import java.text.SimpleDateFormat ;
import java.time.LocalDateTime ;
import java.time.format.DateTimeFormatter ;
import java.util.* ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
@@ -103,6 +110,8 @@ public class CustomReportServiceImpl implements CustomReportService {
private final CsCommTerminalFeignClient csCommTerminalFeignClient ;
private final WlRecordFeignClient wlRecordFeignClient ;
@Override
public boolean addCustomReportTemplate ( ReportTemplateParam reportTemplateParam ) {
checkName ( reportTemplateParam , false ) ;
@@ -206,6 +215,7 @@ public class CustomReportServiceImpl implements CustomReportService {
}
@Override
public List < ReportTemplateVO > getTemplateList ( ReportSearchParam reportSearchParam ) {
return excelRptTempMapper . getReportTemplateList ( reportSearchParam ) ;
@@ -241,8 +251,16 @@ public class CustomReportServiceImpl implements CustomReportService {
if ( Objects . isNull ( excelRptTemp ) ) {
throw new BusinessException ( HarmonicResponseEnum . CUSTOM_REPORT_ACTIVE ) ;
}
if ( Objects . isNull ( reportSearchParam . getCustomType ( ) ) ) {
//通用报表
analyzeReport ( reportSearchParam , excelRptTemp , response ) ;
} else {
//浙江无线报表
analyzeReportZhejiang ( reportSearchParam , excelRptTemp , response ) ;
}
}
@Override
@@ -657,27 +675,21 @@ public class CustomReportServiceImpl implements CustomReportService {
//处理指标是否合格
reportLimitList = reportLimitList . stream ( )
. collect ( Collectors . collectingAndThen ( Collectors . toCollection ( ( ) - > new TreeSet < > ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) ) ) , ArrayList : : new ) ) ;
reportLimitList = new LinkedHashSet < > ( reportLimitList ) .stream ( ) . sorted ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) ) . collect ( Collectors . toList ( ) ) ;
Map < String , Float > limitMap = overLimitDeal ( reportLimitList , reportSearchParam ) ;
//存放限值指标的map
Map < String , ReportTemplateDTO > limitTargetMapX = reportLimitList . stream ( ) . collect ( Collectors . toMap ( ReportTemplateDTO : : getItemName , Function . identity ( ) ) ) ;
List < ReportTemplateDTO > endList = new ArrayList < > ( ) ;
if ( CollUtil . isNotEmpty ( reportTemplateDTOList ) ) {
//开始组织sql
reportTemplateDTOList = reportTemplateDTOList . stream ( )
. collect ( Collectors . collectingAndThen ( Collectors . toCollection (
( ) - > new TreeSet < > ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) ) ) , ArrayList : : new ) ) ;
reportTemplateDTOList = new LinkedHashSet < > ( reportTemplateDTOList ) .stream ( ) . sorted ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) ) . collect ( Collectors . toList ( ) ) ;
Map < String , List < ReportTemplateDTO > > classMap = reportTemplateDTOList . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getResourceId ) ) ;
//定义存放越限指标的map
Map < String , ReportTemplateDTO > assNoPassMap = new HashMap < > ( ) ;
long deal = System . currentTimeMillis ( ) ;
classMap . forEach ( ( classKey , templateValue ) - > {
Map < String , List < ReportTemplateDTO > > valueTypeMap = templateValue . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getStatMethod ) ) ;
//avg.max,min,cp95
valueTypeMap . forEach ( ( valueTypeKey , valueTypeVal ) - > {
@@ -699,28 +711,8 @@ public class CustomReportServiceImpl implements CustomReportService {
} ) ;
//处理合格率
assNoPassMap . forEach ( ( key , val ) - > {
limitTargetMapX . remove ( key ) ;
if ( " Voltage_Dev " . equals ( val . getTemplateName ( ) ) | | " Freq_Dev " . equals ( val . getTemplateName ( ) ) ) {
val . setValue ( " ± " + val . getValue ( ) ) ;
}
if ( val . getOverLimitFlag ( ) = = 1 ) {
val . setValue ( " 不合格 ( " + val . getValue ( ) + " ) " ) ;
} else {
val . setValue ( " 合格 ( " + val . getValue ( ) + " ) " ) ;
}
endList . add ( val ) ;
} ) ;
limitTargetMapX . forEach ( ( key , val ) - > {
if ( Objects . isNull ( val . getOverLimitFlag ( ) ) ) {
val . setValue ( " / " ) ;
} else {
val . setValue ( " 合格 " ) ;
}
endList . add ( val ) ;
} ) ;
//处理指标最终判定合格还是不 合格
dealTargetResult ( assNoPassMap , limitTargetMapX , endList ) ;
long dealEnd = System . currentTimeMillis ( ) ;
System . out . println ( " 模板解析时间: " + ( temEnd - begin ) / 1000 + " S " ) ;
@@ -744,7 +736,6 @@ public class CustomReportServiceImpl implements CustomReportService {
//2、把itemName的value赋给v和m
jsonArray . forEach ( item - > {
JSONObject jsonObject = ( JSONObject ) item ;
JSONArray itemArr = ( JSONArray ) jsonObject . get ( " celldata " ) ;
@@ -958,6 +949,506 @@ public class CustomReportServiceImpl implements CustomReportService {
}
}
private void analyzeReportZhejiang ( ReportSearchParam reportSearchParam , ExcelRptTemp excelRptTemp , HttpServletResponse response ) {
//指标
List < ReportTemplateDTO > reportTemplateDTOList = new ArrayList < > ( ) ;
//限值
List < ReportTemplateDTO > reportLimitList = new ArrayList < > ( ) ;
//台账
List < ReportTemplateDTO > terminalList = new ArrayList < > ( ) ;
JSONArray jsonArray ;
try ( InputStream fileStream = fileStorageUtil . getFileStream ( excelRptTemp . getContent ( ) ) ) {
jsonArray = new JSONArray ( new JSONTokener ( fileStream , new JSONConfig ( ) ) ) ;
parseTemplateZhejiang ( jsonArray , reportTemplateDTOList , reportLimitList , terminalList ) ;
} catch ( Exception e ) {
throw new BusinessException ( HarmonicResponseEnum . CUSTOM_REPORT_JSON ) ;
}
long temEnd = System . currentTimeMillis ( ) ;
//处理指标是否合格
reportLimitList = new LinkedHashSet < > ( reportLimitList )
. stream ( )
. sorted ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) )
. collect ( Collectors . toList ( ) ) ;
Map < String , Float > limitMap = overLimitDeal ( reportLimitList , reportSearchParam ) ;
//存放限值指标的map
Map < String , ReportTemplateDTO > limitTargetMapX = reportLimitList . stream ( ) . collect ( Collectors . toMap ( ReportTemplateDTO : : getItemName , Function . identity ( ) ) ) ;
List < ReportTemplateDTO > endList = new ArrayList < > ( ) ;
if ( CollUtil . isNotEmpty ( reportTemplateDTOList ) ) {
//组装最后监测点条件
List < WlRecord > wlRecordList = wlRecordFeignClient . getWlAssByWlId ( reportSearchParam . getLineId ( ) ) . getData ( ) ;
if ( CollUtil . isEmpty ( wlRecordList ) ) {
throw new BusinessException ( " 当前测试项无测试数据 " ) ;
}
//开始组织sql
reportTemplateDTOList = new LinkedHashSet < > ( reportTemplateDTOList )
. stream ( )
. sorted ( Comparator . comparing ( ReportTemplateDTO : : getItemName ) )
. collect ( Collectors . toList ( ) ) ;
Map < String , List < ReportTemplateDTO > > classMap = reportTemplateDTOList . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getResourceId ) ) ;
Map < String , ReportTemplateDTO > assNoPassMap = new HashMap < > ( ) ;
long deal = System . currentTimeMillis ( ) ;
classMap . forEach ( ( classKey , templateValue ) - > {
Map < String , List < ReportTemplateDTO > > valueTypeMap = templateValue . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getStatMethod ) ) ;
//avg.max,min,cp95
valueTypeMap . forEach ( ( valueTypeKey , valueTypeVal ) - > {
//相别分组
Map < String , List < ReportTemplateDTO > > phaseMap = valueTypeVal . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getPhase ) ) ;
phaseMap . forEach ( ( phaseKey , phaseVal ) - > {
StringBuilder sql = new StringBuilder ( InfluxDbSqlConstant . SELECT ) ;
if ( InfluxDbSqlConstant . MAX . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlZhejiang ( phaseVal , sql , endList , InfluxDbSqlConstant . MAX , reportSearchParam , limitTargetMapX , limitMap , assNoPassMap , wlRecordList ) ;
} else if ( InfluxDbSqlConstant . MIN . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlZhejiang ( phaseVal , sql , endList , InfluxDbSqlConstant . MIN , reportSearchParam , limitTargetMapX , limitMap , assNoPassMap , wlRecordList ) ;
} else if ( InfluxDbSqlConstant . AVG_WEB . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlZhejiang ( phaseVal , sql , endList , InfluxDbSqlConstant . AVG , reportSearchParam , limitTargetMapX , limitMap , assNoPassMap , wlRecordList ) ;
} else if ( InfluxDbSqlConstant . CP95 . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlZhejiang ( phaseVal , sql , endList , InfluxDbSqlConstant . PERCENTILE , reportSearchParam , limitTargetMapX , limitMap , assNoPassMap , wlRecordList ) ;
}
} ) ;
} ) ;
} ) ;
//处理指标最终判定合格还是不合格
dealTargetResult ( assNoPassMap , limitTargetMapX , endList ) ;
long dealEnd = System . currentTimeMillis ( ) ;
System . out . println ( " 查询数据库花费时间 " + ( dealEnd - deal ) / 1000 + " S " ) ;
}
if ( CollUtil . isNotEmpty ( endList ) ) {
long jie = System . currentTimeMillis ( ) ;
//数据单位信息
Map < String , String > unit = unitMap ( reportSearchParam ) ;
//进行反向赋值到模板
//1、根据itemName分组
Map < String , List < ReportTemplateDTO > > assMap = endList . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getItemName ) ) ;
//处理台账信息
/*Map<String, String> terminalMap = null;
if (CollUtil.isNotEmpty(terminalList)) {
terminalMap = commTerminalGeneralClient.getCustomDetailByLineId(reportSearchParam.getLineId()).getData();
}
Map<String, String> finalTerminalMap = terminalMap;*/
//2、把itemName的value赋给v和m
dealExcelResult ( jsonArray , assMap , unit ) ;
long jieEnd = System . currentTimeMillis ( ) ;
System . out . println ( " 组装信息耗时 " + ( jieEnd - jie ) / 1000 + " S " ) ;
}
long daochu = System . currentTimeMillis ( ) ;
//导出自定义报表
downReport ( jsonArray , response ) ;
long daochuEnd = System . currentTimeMillis ( ) ;
System . out . println ( " 导出耗时 " + ( daochuEnd - daochu ) / 1000 + " S " ) ;
}
private void assSqlZhejiang ( List < ReportTemplateDTO > data , StringBuilder sql , List < ReportTemplateDTO > endList , String method , ReportSearchParam reportSearchParam , Map < String , ReportTemplateDTO > limitMap , Map < String , Float > overLimitMap , Map < String , ReportTemplateDTO > assNoPassMap , List < WlRecord > wlRecordList ) {
//sql拼接示例: select MAX(IHA2) as IHA2 from power_quality_data where Phase = 'A' and LineId='1324564568' and Stat_Method='max' tz('Asia/Shanghai')
//cp95函数特殊处理 PERCENTILE(field_key, N)
if ( InfluxDbSqlConstant . PERCENTILE . equals ( method ) ) {
for ( int i = 0 ; i < data . size ( ) ; i + + ) {
if ( i = = data . size ( ) - 1 ) {
sql . append ( InfluxDbSqlConstant . PERCENTILE )
. append ( InfluxDbSqlConstant . LBK )
. append ( data . get ( i ) . getTemplateName ( ) ) . append ( InfluxDbSqlConstant . NUM_95 )
. append ( InfluxDbSqlConstant . RBK )
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) ;
} else {
sql . append ( InfluxDbSqlConstant . PERCENTILE )
. append ( InfluxDbSqlConstant . LBK )
. append ( data . get ( i ) . getTemplateName ( ) ) . append ( InfluxDbSqlConstant . NUM_95 )
. append ( InfluxDbSqlConstant . RBK )
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) . append ( StrUtil . COMMA ) ;
}
}
} else {
for ( int i = 0 ; i < data . size ( ) ; i + + ) {
if ( i = = data . size ( ) - 1 ) {
sql . append ( method )
. append ( InfluxDbSqlConstant . LBK )
. append ( data . get ( i ) . getTemplateName ( ) )
. append ( InfluxDbSqlConstant . RBK )
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) ;
} else {
sql . append ( method )
. append ( InfluxDbSqlConstant . LBK )
. append ( data . get ( i ) . getTemplateName ( ) )
. append ( InfluxDbSqlConstant . RBK )
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) . append ( StrUtil . COMMA ) ;
}
}
}
sql . append ( StrPool . C_SPACE ) . append ( InfluxDbSqlConstant . FROM ) . append ( " pqd_data " ) ;
//相别特殊处理
sql . append ( InfluxDbSqlConstant . WHERE )
. append ( InfluxDBTableConstant . PHASIC_TYPE )
. append ( InfluxDbSqlConstant . EQ )
. append ( InfluxDbSqlConstant . QM )
. append ( data . get ( 0 ) . getPhase ( ) )
. append ( InfluxDbSqlConstant . QM ) ;
//data_flicker、data_fluc、data_plt 无 value_type
sql . append ( InfluxDbSqlConstant . AND )
. append ( InfluxDBTableConstant . VALUE_TYPE )
. append ( InfluxDbSqlConstant . EQ )
. append ( InfluxDbSqlConstant . QM )
. append ( data . get ( 0 ) . getStatMethod ( ) . toLowerCase ( ) )
. append ( InfluxDbSqlConstant . QM ) ;
List < Map < String , Object > > allList = new ArrayList < > ( ) ;
for ( WlRecord wlRecord : wlRecordList ) {
StringBuilder temSql = new StringBuilder ( sql ) ;
String start = LocalDateTimeUtil . format ( wlRecord . getStartTime ( ) , DateTimeFormatter . ofPattern ( DatePattern . NORM_DATETIME_PATTERN ) ) ;
String end = LocalDateTimeUtil . format ( wlRecord . getEndTime ( ) , DateTimeFormatter . ofPattern ( DatePattern . NORM_DATETIME_PATTERN ) ) ;
temSql . append ( " and line_id = ' " ) . append ( wlRecord . getLineId ( ) ) . append ( InfluxDbSqlConstant . QM )
. append ( InfluxDbSqlConstant . AND )
. append ( InfluxDbSqlConstant . TIME ) . append ( InfluxDbSqlConstant . GE ) . append ( InfluxDbSqlConstant . QM ) . append ( start ) . append ( InfluxDbSqlConstant . QM )
. append ( InfluxDbSqlConstant . AND )
. append ( InfluxDbSqlConstant . TIME ) . append ( InfluxDbSqlConstant . LT ) . append ( InfluxDbSqlConstant . QM ) . append ( end ) . append ( InfluxDbSqlConstant . QM )
. append ( InfluxDbSqlConstant . TZ ) ;
List < Map < String , Object > > temMapList = influxDbUtils . getMapResult ( temSql . toString ( ) ) ;
if ( CollUtil . isNotEmpty ( temMapList ) ) {
allList . add ( temMapList . get ( 0 ) ) ;
}
}
Map < String , Object > resultMap = dealResultMap ( method , allList ) ;
if ( resultMap . isEmpty ( ) ) {
data = data . stream ( ) . peek ( item - > item . setValue ( " / " ) ) . collect ( Collectors . toList ( ) ) ;
} else {
for ( ReportTemplateDTO item : data ) {
if ( resultMap . containsKey ( item . getItemName ( ) ) ) {
double v = ( Double ) resultMap . get ( item . getItemName ( ) ) ;
item . setValue ( String . format ( " %.3f " , v ) ) ;
if ( overLimitMap . containsKey ( item . getLimitName ( ) ) ) {
Float tagVal = overLimitMap . get ( item . getLimitName ( ) ) ;
if ( v > tagVal ) {
item . setOverLimitFlag ( 1 ) ;
} else {
item . setOverLimitFlag ( 0 ) ;
}
}
//结论判断是否越限
String key = item . getLimitName ( ) + " # " + item . getStatMethod ( ) . toLowerCase ( ) + " #pq_overlimit " ;
if ( limitMap . containsKey ( key ) ) {
ReportTemplateDTO tem = limitMap . get ( key ) ;
double limitVal = Double . parseDouble ( tem . getValue ( ) ) ;
if ( v > limitVal ) {
tem . setOverLimitFlag ( 1 ) ;
tem . setValue ( tem . getValue ( ) ) ;
assNoPassMap . put ( key , tem ) ;
} else if ( ! assNoPassMap . containsKey ( key ) ) {
tem . setOverLimitFlag ( 0 ) ;
tem . setValue ( tem . getValue ( ) ) ;
assNoPassMap . put ( key , tem ) ;
}
}
} else {
item . setValue ( " / " ) ;
}
}
}
endList . addAll ( data ) ;
}
private Map < String , Object > dealResultMap ( String method , List < Map < String , Object > > allList ) {
Map < String , Object > resultMap = new HashMap < > ( ) ;
// 遍历列表中的每个Map
if ( method . equals ( InfluxDbSqlConstant . MIN ) ) {
for ( Map < String , Object > map : allList ) {
// 遍历当前Map的键值对
for ( Map . Entry < String , Object > entry : map . entrySet ( ) ) {
String key = entry . getKey ( ) ;
if ( ! key . equals ( " time " ) ) {
double value = ( double ) entry . getValue ( ) ;
// 检查结果Map中是否已包含该键
if ( ! resultMap . containsKey ( key ) | | ( double ) resultMap . get ( key ) > value ) {
// 如果不包含, 或当前值更大, 则更新结果Map
resultMap . put ( key , value ) ;
}
}
}
}
} else if ( method . equals ( InfluxDbSqlConstant . MAX ) | | method . equals ( InfluxDbSqlConstant . PERCENTILE ) ) {
for ( Map < String , Object > map : allList ) {
// 遍历当前Map的键值对
for ( Map . Entry < String , Object > entry : map . entrySet ( ) ) {
String key = entry . getKey ( ) ;
if ( ! key . equals ( " time " ) ) {
double value = ( double ) entry . getValue ( ) ;
// 检查结果Map中是否已包含该键
if ( ! resultMap . containsKey ( key ) | | ( double ) resultMap . get ( key ) < value ) {
// 如果不包含, 或当前值更大, 则更新结果Map
resultMap . put ( key , value ) ;
}
}
}
}
} else if ( method . equals ( InfluxDbSqlConstant . AVG ) ) {
Map < String , Double > sumMap = new HashMap < > ( ) ;
Map < String , Integer > countMap = new HashMap < > ( ) ;
// 遍历列表中的每个Map
for ( Map < String , Object > map : allList ) {
// 遍历当前Map的键值对
for ( Map . Entry < String , Object > entry : map . entrySet ( ) ) {
String key = entry . getKey ( ) ;
if ( ! key . equals ( " time " ) ) {
double value = ( double ) entry . getValue ( ) ;
// 更新累计和
sumMap . put ( key , sumMap . getOrDefault ( key , 0 . 0 ) + value ) ;
// 更新计数
countMap . put ( key , countMap . getOrDefault ( key , 0 ) + 1 ) ;
}
}
}
// 计算平均值并存储到结果Map中
for ( String key : sumMap . keySet ( ) ) {
double sum = sumMap . get ( key ) ;
int count = countMap . get ( key ) ;
double average = BigDecimal . valueOf ( sum / count ) . setScale ( 3 , RoundingMode . HALF_UP ) . doubleValue ( ) ;
resultMap . put ( key , average ) ;
}
}
return resultMap ;
}
private void dealExcelResult ( JSONArray jsonArray , Map < String , List < ReportTemplateDTO > > assMap , Map < String , String > unit ) {
jsonArray . forEach ( item - > {
JSONObject jsonObject = ( JSONObject ) item ;
JSONArray itemArr = ( JSONArray ) jsonObject . get ( " celldata " ) ;
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 ( " # " ) ) {
String str = " " ;
List < ReportTemplateDTO > rDto = assMap . get ( v . replace ( " $ " , " " ) ) ;
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 ( " # " ) ) {
//指标合格情况
String str = " " ;
List < ReportTemplateDTO > rDto = assMap . get ( v . replace ( " % " , " " ) ) ;
if ( Objects . nonNull ( rDto ) ) {
str = rDto . get ( 0 ) . getValue ( ) ;
//没有值,赋"/"
if ( StringUtils . isBlank ( str ) ) {
str = " / " ;
}
son . set ( " v " , str ) ;
if ( " 不合格 " . equals ( str ) ) {
son . set ( " fc " , " #990000 " ) ;
}
}
} /*else if (v.charAt(0) == '&') {
//结论
String tem = v.replace("&", "");
if (Objects.nonNull(finalTerminalMap)) {
if ("statis_time".equals(tem)) {
son.set("v", reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + InfluxDbSqlConstant.END_TIME);
} else {
//台账信息
son.set("v", finalTerminalMap.getOrDefault(tem, "/"));
}
}
}*/ else if ( v . charAt ( 0 ) = = '@' & & v . contains ( " # " ) ) {
//解决数据单位问题 @指标#类型@
String replace = v . replace ( " @ " , " " ) ;
son . set ( " v " , unit . getOrDefault ( replace , " / " ) ) ;
}
}
}
} ) ;
} ) ;
}
/**
* 处理指标超标结论
*/
private void dealTargetResult ( Map < String , ReportTemplateDTO > assNoPassMap , Map < String , ReportTemplateDTO > limitTargetMapX , List < ReportTemplateDTO > endList ) {
assNoPassMap . forEach ( ( key , val ) - > {
limitTargetMapX . remove ( key ) ;
if ( " Voltage_Dev " . equals ( val . getTemplateName ( ) ) | | " Freq_Dev " . equals ( val . getTemplateName ( ) ) ) {
val . setValue ( " ± " + val . getValue ( ) ) ;
}
if ( val . getOverLimitFlag ( ) = = 1 ) {
val . setValue ( " 不合格 ( " + val . getValue ( ) + " ) " ) ;
} else {
val . setValue ( " 合格 ( " + val . getValue ( ) + " ) " ) ;
}
endList . add ( val ) ;
} ) ;
limitTargetMapX . forEach ( ( key , val ) - > {
if ( Objects . isNull ( val . getOverLimitFlag ( ) ) ) {
val . setValue ( " / " ) ;
} else {
val . setValue ( " 合格 " ) ;
}
endList . add ( val ) ;
} ) ;
}
/**
* 解析模板
*
* @author cdf
* @date 2023/10/20
*/
private void parseTemplateZhejiang ( JSONArray jsonArray , List < ReportTemplateDTO > reportTemplateDTOList , List < ReportTemplateDTO > reportLimitList , List < ReportTemplateDTO > terminalList ) {
try {
//通过文件服务器获取
jsonArray . forEach ( item - > {
JSONObject jsonObject = ( JSONObject ) item ;
JSONArray itemArr = ( JSONArray ) jsonObject . get ( " celldata " ) ;
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 ( " # " ) ) {
//剔除前后$
v = v . replace ( " $ " , " " ) ;
//封装ReportTemplateDTO
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO ( ) ;
reportTemplateDTO . setItemName ( v ) ;
//根据#分割数据
String [ ] vItem = v . split ( " # " ) ;
if ( vItem . length = = 5 ) {
//$HA[_25]#B#max#classId$
reportTemplateDTO . setTemplateName ( vItem [ 0 ] ) ;
reportTemplateDTO . setPhase ( vItem [ 1 ] ) ;
reportTemplateDTO . setStatMethod ( vItem [ 2 ] . toUpperCase ( ) ) ;
reportTemplateDTO . setResourceId ( vItem [ 3 ] ) ;
reportTemplateDTO . setLimitName ( vItem [ 4 ] ) ;
} else if ( vItem . length = = 4 ) {
//$HA[_25]#max#classId$
reportTemplateDTO . setTemplateName ( vItem [ 0 ] ) ;
reportTemplateDTO . setPhase ( " M " ) ;
reportTemplateDTO . setStatMethod ( vItem [ 1 ] . toUpperCase ( ) ) ;
reportTemplateDTO . setResourceId ( vItem [ 2 ] ) ;
reportTemplateDTO . setLimitName ( vItem [ 3 ] ) ;
}
reportTemplateDTOList . add ( reportTemplateDTO ) ;
} else if ( v . charAt ( 0 ) = = '%' & & v . contains ( " # " ) ) {
//封装ReportTemplateDTO
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO ( ) ;
v = v . replace ( " % " , " " ) ;
reportTemplateDTO . setItemName ( v ) ;
//根据#分割数据
String [ ] vItem = v . split ( " # " ) ;
if ( vItem . length = = 3 ) {
//$HA[_25]#B#max#classId$
reportTemplateDTO . setTemplateName ( vItem [ 0 ] ) ;
reportTemplateDTO . setStatMethod ( vItem [ 1 ] . toUpperCase ( ) ) ;
reportTemplateDTO . setResourceId ( vItem [ 2 ] ) ;
}
reportLimitList . add ( reportTemplateDTO ) ;
} else if ( v . charAt ( 0 ) = = '&' ) {
//封装ReportTemplateDTO
ReportTemplateDTO reportTemplateDTO = new ReportTemplateDTO ( ) ;
v = v . replace ( " & " , " " ) ;
reportTemplateDTO . setItemName ( v ) ;
reportTemplateDTO . setTemplateName ( v ) ;
terminalList . add ( reportTemplateDTO ) ;
}
}
}
} ) ;
} ) ;
} catch ( Exception e ) {
throw new BusinessException ( HarmonicResponseEnum . CUSTOM_REPORT_JSON ) ;
}
}
}