@@ -3,6 +3,7 @@ package com.njcn.harmonic.service.impl;
import cn.hutool.core.collection.CollUtil ;
import cn.hutool.core.date.DateUtil ;
import cn.hutool.core.io.IoUtil ;
import cn.hutool.core.text.StrPool ;
import cn.hutool.core.util.CharsetUtil ;
import cn.hutool.core.util.StrUtil ;
import cn.hutool.json.* ;
@@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.enums.common.DataStateEnum ;
import com.njcn.common.pojo.exception.BusinessException ;
import com.njcn.common.utils.FileUtil ;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient ;
import com.njcn.device.pq.api.DeptLineFeignClient ;
import com.njcn.device.pq.api.DeviceUnitClient ;
import com.njcn.device.pq.pojo.po.DeptLine ;
@@ -42,6 +44,7 @@ import com.njcn.harmonic.pojo.vo.SysDeptTempVO;
import com.njcn.harmonic.service.CustomReportService ;
import com.njcn.oss.constant.OssPath ;
import com.njcn.oss.utils.FileStorageUtil ;
import com.njcn.user.api.DeptFeignClient ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.lang.StringUtils ;
@@ -92,10 +95,12 @@ public class CustomReportServiceImpl implements CustomReportService {
private final DeviceUnitClient deviceUnitClient ;
private final DicDataFeignClient dicDataFeignClient ;
private final DeptLine FeignClient deptLine FeignClient ;
private final DeptFeignClient deptFeignClient ;
private final InfluxDbUtils influxDbUtils ;
private final CommTerminalGeneralClient commTerminalGeneralClient ;
@Override
public boolean addCustomReportTemplate ( ReportTemplateParam reportTemplateParam ) {
checkName ( reportTemplateParam , false ) ;
@@ -112,6 +117,7 @@ public class CustomReportServiceImpl implements CustomReportService {
ExcelRptTemp excelRptTemp = new ExcelRptTemp ( ) ;
BeanUtils . copyProperties ( reportTemplateParam , excelRptTemp ) ;
excelRptTemp . setState ( DataStateEnum . ENABLE . getCode ( ) ) ;
excelRptTemp . setActivation ( DataStateEnum . ENABLE . getCode ( ) ) ;
excelRptTempMapper . insert ( excelRptTemp ) ;
//获取主键,并存入部门表
@@ -177,9 +183,8 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override
public List < ReportTemplateVO > getTemplateByDept ( String id ) {
//获取子孙部门,去重
DeptLine data = deptLineFeignClient . getLineByLineIds ( id ) . getData ( ) ;
return excelRptTempMapper . getReportTemplateByDept ( Arrays . asList ( data . getId ( ) ) ) ;
List < String > deptIds = deptFeignClient . getDepSonIdtByDeptId ( id ) . getData ( ) ;
return excelRptTempMapper . getReportTemplateByDept ( deptIds ) ;
}
@Override
@@ -307,7 +312,7 @@ public class CustomReportServiceImpl implements CustomReportService {
reportTreeVO . setShowName ( val . get ( 0 ) . getShowName ( ) ) ;
if ( Objects . nonNull ( val . get ( 0 ) . getHarmStart ( ) ) & & Objects . nonNull ( val . get ( 0 ) . getHarmEnd ( ) ) ) {
String [ ] str = val . get ( 0 ) . getLimitName ( ) . split ( " # " ) ;
String one = val . get ( 0 ) . getLimitName ( ) ;
List < ReportTreeVO > temList = new ArrayList < > ( ) ;
for ( int i = val . get ( 0 ) . getHarmStart ( ) ; i < = val . get ( 0 ) . getHarmEnd ( ) ; i + + ) {
double count ;
@@ -316,10 +321,10 @@ public class CustomReportServiceImpl implements CustomReportService {
if ( val . get ( 0 ) . getHarmStart ( ) = = 1 ) {
count = i + 0 . 5 ;
reportTreeItem . setShowName ( count + " 次 " + val . get ( 0 ) . getShowName ( ) ) ;
reportTreeItem . setName ( str [ 0 ] + count + " # " + str [ 1 ] + count + " # " + val . get ( 0 ) . getLimitTable ( ) ) ;
reportTreeItem . setName ( " % " + one + count + " # " + val . get ( 0 ) . getFormula ( ) + " # " + val . get ( 0 ) . getLimitTable ( ) + " % " ) ;
} else {
reportTreeItem . setShowName ( i + " 次 " + val . get ( 0 ) . getShowName ( ) ) ;
reportTreeItem . setName ( str [ 0 ] + i + " # " + str [ 1 ] + i + " # " + val . get ( 0 ) . getLimitTable ( ) ) ;
reportTreeItem . setName ( " % " + one + i + " # " + val . get ( 0 ) . getFormula ( ) + " # " + val . get ( 0 ) . getLimitTable ( ) + " % " ) ;
}
reportTreeItem . setFlag ( 1 ) ;
@@ -327,19 +332,30 @@ public class CustomReportServiceImpl implements CustomReportService {
}
reportTreeVO . setChildren ( temList ) ;
} else {
reportTreeVO . setName ( val . get ( 0 ) . getLimitName ( ) + " # " + val . get ( 0 ) . getFormula ( ) ) ;
reportTreeVO . setName ( " % " + val . get ( 0 ) . getLimitName ( ) + " # " + val . get ( 0 ) . getLimitTable ( ) + " % " + val . get ( 0 ) . getFormula( ) + " % " ) ;
reportTreeVO . setFlag ( 1 ) ;
}
result . add ( reportTreeVO ) ;
} ) ;
/*list.forEach(item->{
return result ;
}
@Override
public List < ReportTreeVO > terminalChooseTree ( ) {
List < ReportTreeVO > result = new ArrayList < > ( ) ;
DictData dic = dicDataFeignClient . getDicDataByCode ( DicDataEnum . TERMINAL_SORT . getCode ( ) ) . getData ( ) ;
LambdaQueryWrapper < EleEpdPqd > lambdaQueryWrapper = new LambdaQueryWrapper < > ( ) ;
lambdaQueryWrapper . eq ( EleEpdPqd : : getDataType , dic . getId ( ) ) . orderByAsc ( EleEpdPqd : : getSort ) ;
List < EleEpdPqd > list = eleEpdMapper . selectList ( lambdaQueryWrapper ) ;
list . forEach ( item - > {
ReportTreeVO reportTreeVO = new ReportTreeVO ( ) ;
reportTreeVO . setId ( item . getId ( ) ) ;
reportTreeVO. setName(item.getName());
reportTreeVO. setName( " & " + item . getName ( ) + " & " ) ;
reportTreeVO . setFlag ( 1 ) ;
reportTreeVO . setShowName ( item . getShowName ( ) ) ;
result . add ( reportTreeVO ) ;
});*/
} ) ;
return result ;
}
@@ -718,15 +734,14 @@ public class CustomReportServiceImpl implements CustomReportService {
/**
* @param data 同类型的cell模板
* @param sql 单个cell模板
* @param endList 用于返回最终组装好的数据, 类似data
* @param limitMap 指标是否合格模板
* @param data 同类型的cell模板
* @param sql 单个cell模板
* @param endList 用于返回最终组装好的数据, 类似data
* @param limitMap 指标是否合格模板
* @param assNoPassMap 用于存储不合格的指标
*
* @date 2023/10/20
*/
private void assSqlNew ( List < ReportTemplateDTO > data , StringBuilder sql , List < ReportTemplateDTO > endList , String method , ReportSearchParam reportSearchParam , Map < String , ReportTemplateDTO > limitMap , Map < String , Float > overLimitMap , Map < String , ReportTemplateDTO > assNoPassMap ) {
private void assSqlNew ( List < ReportTemplateDTO > data , StringBuilder sql , List < ReportTemplateDTO > endList , String method , ReportSearchParam reportSearchParam , Map < String , ReportTemplateDTO > limitMap , Map < String , Float > overLimitMap , Map < String , ReportTemplateDTO > assNoPassMap ) {
//sql拼接示例: select MAX(IHA2) as IHA2 from power_quality_data where Phase = 'A' and LineId='1324564568' and Stat_Method='max' tz('Asia/Shanghai')
@@ -740,16 +755,16 @@ public class CustomReportServiceImpl implements CustomReportService {
. append ( data . get ( i ) . getTemplateName ( ) )
. append ( InfluxDbSqlConstant . NUM_95 )
. append ( InfluxDbSqlConstant . RBK )
. append ( " as \" " )
. append ( data . get ( i ) . getItemName ( ) ) . append ( " \" " ) ;
. 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 . NUM_95 )
. append ( InfluxDbSqlConstant . RBK )
. append ( " as \" " )
. append ( data . get ( i ) . getItemName ( ) ) . append ( " \" " ) . append ( StrUtil . COMMA ) ;
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) . append ( StrUtil . COMMA ) ;
}
}
@@ -761,20 +776,21 @@ public class CustomReportServiceImpl implements CustomReportService {
. append ( InfluxDbSqlConstant . LBK )
. append ( data . get ( i ) . getTemplateName ( ) )
. append ( InfluxDbSqlConstant . RBK )
. append ( " as \" " )
. append ( data . get ( i ) . getItemName ( ) ) . append ( " \" " ) ;
. 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 ( " as \" " )
. append ( data . get ( i ) . getItemName ( ) ) . append ( " \" " ) . append ( StrUtil . COMMA ) ;
. append ( InfluxDbSqlConstant . AS ) . append ( InfluxDbSqlConstant . DQM )
. append ( data . get ( i ) . getItemName ( ) ) . append ( InfluxDbSqlConstant . DQM ) . append ( StrUtil . COMMA ) ;
}
}
}
sql . append ( StrPool . C_SPACE ) ;
if ( reportSearchParam . getResourceType ( ) = = 1 ) {
sql . append ( InfluxDbSqlConstant . FROM )
. append ( data . get ( 0 ) . getClassId ( ) . replace ( " data " , " day " ) ) ;
@@ -846,11 +862,11 @@ public class CustomReportServiceImpl implements CustomReportService {
double v = ( Double ) map . get ( item . getItemName ( ) ) ;
item . setValue ( String . format ( " %.3f " , v ) ) ;
if ( overLimitMap . containsKey ( item . getLimitName ( ) ) ) {
if ( overLimitMap . containsKey ( item . getLimitName ( ) ) ) {
Float tagVal = overLimitMap . get ( item . getLimitName ( ) ) ;
if ( v > tagVal ) {
item . setOverLimitFlag ( 1 ) ;
} else {
} else {
item . setOverLimitFlag ( 0 ) ;
}
}
@@ -862,10 +878,12 @@ public class CustomReportServiceImpl implements CustomReportService {
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 ) ;
assNoPassMap . put ( key , tem ) ;
tem . setValue ( tem . getValue ( ) ) ;
}
}
@@ -898,11 +916,13 @@ public class CustomReportServiceImpl implements CustomReportService {
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 ( ) ) ) ;
pareTemplate ( jsonArray , fileStream , excelRptTemp . getContent ( ) , reportTemplateDTOList , reportLimitList ) ;
} catch ( Exception e ) {
pars eTemplate ( jsonArray , reportTemplateDTOList , reportLimitList , terminalList );
} catch ( Exception e ) {
throw new BusinessException ( HarmonicResponseEnum . CUSTOM_REPORT_JSON ) ;
}
//处理查日表还是分钟表
@@ -910,42 +930,16 @@ public class CustomReportServiceImpl implements CustomReportService {
long temEnd = System . currentTimeMillis ( ) ;
//存放限值的map
Map < String , Float > limitMap = new HashMap < > ( ) ;
//存放限值指标的map
Map < String , ReportTemplateDTO > limitTargetMapX = new HashMap < > ( ) ;
//处理指标是否合格
if ( CollUtil . isNotEmpty ( reportLimitList ) ) {
StringBuilder sql = new StringBuilder ( " select " ) ;
for ( int i = 0 ; i < reportLimitList . size ( ) ; i + + ) {
if ( i = = reportLimitList . size ( ) - 1 ) {
sql . append ( reportLimitList . get ( i ) . getTemplateName ( ) ) ;
} else {
sql . append ( reportLimitList . get ( i ) . getTemplateName ( ) ) . append ( " , " ) ;
}
}
sql . append ( " from " ) . append ( reportLimitList . get ( 0 ) . getClassId ( ) ) . append ( " where id =' " ) . append ( reportSearchParam . getLineId ( ) ) . append ( " ' " ) ;
limitMap = excelRptTempMapper . dynamicSqlMap ( sql . toString ( ) ) ;
for ( ReportTemplateDTO item : reportLimitList ) {
if ( limitMap . containsKey ( item . getTemplateName ( ) ) ) {
item . setValue ( limitMap . get ( item . getTemplateName ( ) ) . toString ( ) ) ;
}
}
limitTargetMapX = reportLimitList . stream ( ) . collect ( Collectors . toMap ( ReportTemplateDTO : : getItemName , Function . identity ( ) ) ) ;
}
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 ) ) {
long deal = System . currentTimeMillis ( ) ;
Map < String , ReportTemplateDTO > finalLimitMapX = limitTargetMapX ;
Map < String , Float > overLimitMap = limitMap ;
//开始组织sql
Map < String , List < ReportTemplateDTO > > classMap = reportTemplateDTOList . stream ( ) . collect ( Collectors . groupingBy ( ReportTemplateDTO : : getClassId ) ) ;
Map < String , ReportTemplateDTO > assNoPassMap = new HashMap < > ( ) ;
@@ -958,33 +952,31 @@ public class CustomReportServiceImpl implements CustomReportService {
//相别分组
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 ) ) {
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . MAX , reportSearchParam , finalLimi tMapX, overL imitMap, assNoPassMap ) ;
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . MAX , reportSearchParam , limitTarge tMapX, l imitMap, assNoPassMap ) ;
} else if ( InfluxDbSqlConstant . MIN . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . MIN , reportSearchParam , finalLimi tMapX, overL imitMap, assNoPassMap ) ;
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . MIN , reportSearchParam , limitTarge tMapX, l imitMap, assNoPassMap ) ;
} else if ( InfluxDbSqlConstant . AVG_WEB . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . AVG , reportSearchParam , finalLimi tMapX, overL imitMap, assNoPassMap ) ;
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . AVG , reportSearchParam , limitTarge tMapX, l imitMap, assNoPassMap ) ;
} else if ( InfluxDbSqlConstant . CP95 . equalsIgnoreCase ( valueTypeKey ) ) {
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . PERCENTILE , reportSearchParam , finalLimi tMapX, overL imitMap, assNoPassMap ) ;
assSqlNew ( phaseVal , sql , endList , InfluxDbSqlConstant . PERCENTILE , reportSearchParam , limitTarge tMapX, l imitMap, assNoPassMap ) ;
}
} ) ;
} ) ;
} ) ;
assNoPassMap . forEach ( ( key , val ) - > {
finalLimi tMapX. remove ( key ) ;
limitTarge tMapX. remove ( key ) ;
if ( val . getOverLimitFlag ( ) = = 1 ) {
val . setValue ( " 不合格 " ) ;
val . setValue ( " 不合格 ( " + val . getValue ( ) + " ) " ) ;
} else {
val . setValue ( " 合格 " ) ;
val . setValue ( " 合格 ( " + val . getValue ( ) + " ) " ) ;
}
endList . add ( val ) ;
} ) ;
finalLimi tMapX. forEach ( ( key , val ) - > {
limitTarge tMapX. forEach ( ( key , val ) - > {
if ( Objects . isNull ( val . getOverLimitFlag ( ) ) ) {
val . setValue ( " / " ) ;
} else {
@@ -998,6 +990,10 @@ public class CustomReportServiceImpl implements CustomReportService {
System . out . println ( " 查询数据库花费时间 " + ( dealEnd - deal ) / 1000 + " S " ) ;
}
if ( CollUtil . isNotEmpty ( endList ) ) {
long jie = System . currentTimeMillis ( ) ;
//数据单位信息
@@ -1005,7 +1001,16 @@ public class CustomReportServiceImpl implements CustomReportService {
//进行反向赋值到模板
//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
jsonArray . forEach ( item - > {
JSONObject jsonObject = ( JSONObject ) item ;
JSONArray itemArr = ( JSONArray ) jsonObject . get ( " celldata " ) ;
@@ -1046,6 +1051,17 @@ public class CustomReportServiceImpl implements CustomReportService {
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 , " / " ) ) ;
}
}
}
//解决数据单位问题 @指标#类型@
if ( v . charAt ( 0 ) = = '@' & & v . contains ( " # " ) ) {
@@ -1102,10 +1118,11 @@ public class CustomReportServiceImpl implements CustomReportService {
/**
* 解析模板
*
* @author cdf
* @date 2023/10/20
*/
private void pareTemplate ( JSONArray jsonArray , InputStream fileStream , String conten t, List < ReportTemplateDTO > reportTemplateDTO List , List < ReportTemplateDTO > reportLimit List) {
private void pars eTemplate ( JSONArray jsonArray , List < ReportTemplateDTO > reportTemplateDTOLis t, List < ReportTemplateDTO > reportLimit List , List < ReportTemplateDTO > terminal List) {
try {
//通过文件服务器获取
@@ -1160,6 +1177,13 @@ public class CustomReportServiceImpl implements CustomReportService {
reportTemplateDTO . setClassId ( 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 ) ;
}
}
}
@@ -1172,10 +1196,11 @@ public class CustomReportServiceImpl implements CustomReportService {
/**
* 获取两个时间之间的天数
*
* @author cdf
* @date 2023/10/20
*/
private void rangeDate ( ReportSearchParam reportSearchParam ) {
private void rangeDate ( ReportSearchParam reportSearchParam ) {
long a ;
DateFormat dft = new SimpleDateFormat ( " yyyy-MM-dd " ) ;
try {
@@ -1195,10 +1220,38 @@ public class CustomReportServiceImpl implements CustomReportService {
reportSearchParam . setResourceType ( 0 ) ;
}
} catch ( ParseException e ) {
throw new BusinessException ( " 时间解析出错! " + e . getMessage ( ) ) ;
throw new BusinessException ( " 时间解析出错! " + e . getMessage ( ) ) ;
}
}
/**
* @author cdf
* @date 2023/10/23
*/
private Map < String , Float > overLimitDeal ( List < ReportTemplateDTO > reportLimitList , ReportSearchParam reportSearchParam ) {
Map < String , Float > limitMap = new HashMap < > ( ) ;
if ( CollUtil . isNotEmpty ( reportLimitList ) ) {
StringBuilder sql = new StringBuilder ( " select " ) ;
for ( int i = 0 ; i < reportLimitList . size ( ) ; i + + ) {
if ( i = = reportLimitList . size ( ) - 1 ) {
sql . append ( reportLimitList . get ( i ) . getTemplateName ( ) ) ;
} else {
sql . append ( reportLimitList . get ( i ) . getTemplateName ( ) ) . append ( " , " ) ;
}
}
sql . append ( " from " ) . append ( reportLimitList . get ( 0 ) . getClassId ( ) ) . append ( " where id =' " ) . append ( reportSearchParam . getLineId ( ) ) . append ( " ' " ) ;
limitMap = excelRptTempMapper . dynamicSqlMap ( sql . toString ( ) ) ;
for ( ReportTemplateDTO item : reportLimitList ) {
if ( limitMap . containsKey ( item . getTemplateName ( ) ) ) {
item . setValue ( limitMap . get ( item . getTemplateName ( ) ) . toString ( ) ) ;
}
}
}
return limitMap ;
}
}