1.台账增加默认排序
2.增加场站/用户监测规模接口
This commit is contained in:
@@ -58,6 +58,16 @@ public class GridDiagramHarmController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subLineGiveAnAlarm, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/getAreaObjAlarm")
|
||||
@ApiOperation("区域场站监测点规模")
|
||||
@ApiImplicitParam(name = "param", value = "区域场站监测点规模参数", required = true)
|
||||
public HttpResult<GridDiagramVO> getAreaObjAlarm(@RequestBody StatSubstationBizBaseParam param) {
|
||||
String methodDescribe = getMethodDescribe("getAreaObjAlarm");
|
||||
GridDiagramVO subLineGiveAnAlarm = irMpTargetWarnDService.getAreaObjAlarm(param);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subLineGiveAnAlarm, methodDescribe);
|
||||
}
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/getPollutionAlarmData")
|
||||
@ApiOperation("变电站污染告警占比")
|
||||
|
||||
@@ -20,4 +20,6 @@ public interface IRMpTargetWarnDService extends IService<RMpTargetWarnDPO> {
|
||||
|
||||
|
||||
GridDiagramVO getSubLineGiveAnAlarm(StatSubstationBizBaseParam param);
|
||||
|
||||
GridDiagramVO getAreaObjAlarm(StatSubstationBizBaseParam param);
|
||||
}
|
||||
|
||||
@@ -329,7 +329,8 @@ public class HistoryResultServiceImpl implements HistoryResultService {
|
||||
DictData dictData = dicDataFeignClient.getDicDataById(lineDetailDataVO.getVoltageLevel()).getData();
|
||||
float voltageLevel = Float.parseFloat(dictData.getValue());
|
||||
float shortVal = COverlimitUtil.getDlCapByVoltageLevel(voltageLevel);
|
||||
overlimit = COverlimitUtil.globalAssemble(voltageLevel, 10f, 10f, shortVal, 1, 1);
|
||||
float devVal = COverlimitUtil.getDefaultDevCapacity(voltageLevel);
|
||||
overlimit = COverlimitUtil.globalAssemble(voltageLevel, devVal, devVal, shortVal, 1, 0);
|
||||
}
|
||||
|
||||
//组装sql语句
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.njcn.harmonic.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||
import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
|
||||
import com.njcn.device.biz.pojo.dto.SubGetBase;
|
||||
import com.njcn.device.biz.pojo.dto.*;
|
||||
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
||||
import com.njcn.device.pq.api.LineIntegrityClient;
|
||||
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
|
||||
@@ -124,6 +124,74 @@ public class RMpTargetWarnDServiceImpl extends ServiceImpl<RMpTargetWarnDMapper,
|
||||
return gridDiagramVO;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GridDiagramVO getAreaObjAlarm(StatSubstationBizBaseParam param) {
|
||||
//获取电压等级
|
||||
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData();
|
||||
|
||||
List<DictData> v = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.PANORAMIC_VOLTAGE.getCode()).getData();
|
||||
List<String> voltageIds;
|
||||
//获取电压等级550 220 110 35
|
||||
if(CollUtil.isNotEmpty(v)){
|
||||
List<String> vName = v.stream().map(DictData::getName).collect(Collectors.toList());
|
||||
voltageIds = dictDataList.stream().filter(item -> vName.contains(item.getName())).sorted(Comparator.comparing(DictData::getSort).reversed()).map(DictData::getId).collect(Collectors.toList());
|
||||
}else{
|
||||
voltageIds = dictDataList.stream().filter(item -> Objects.equals(DicDataEnum.DY_500KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_220KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_110KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_35KV.getCode(), item.getCode())).sorted(Comparator.comparing(DictData::getSort).reversed()).map(DictData::getId).collect(Collectors.toList());
|
||||
}
|
||||
GridDiagramVO gridDiagramVO = new GridDiagramVO();
|
||||
List<GridDiagramVO.LineStatistics> info = new ArrayList<>();
|
||||
List<GridDiagramVO.LineStatistics> gwInfo = new ArrayList<>();
|
||||
|
||||
//获取部门数据关系
|
||||
List<Dept> data = deptFeignClient.getDirectSonSelf(param.getId()).getData();
|
||||
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
|
||||
deptGetLineParam.setDeptId(param.getId());
|
||||
deptGetLineParam.setMonitorStateRunning(false);
|
||||
List<DeptGetChildrenMoreDTO> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
|
||||
|
||||
Map<String,DeptGetChildrenMoreDTO> listMap = deptGetChildrenMoreDTOS.stream().collect(Collectors.toMap(DeptGetChildrenMoreDTO::getUnitId,Function.identity()));
|
||||
|
||||
GridDiagramVO.LineStatistics lineStatistics;
|
||||
GridDiagramVO.LineStatistics gwLineStatistics;
|
||||
for (Dept datum : data) {
|
||||
if (listMap.containsKey(datum.getId())) {
|
||||
lineStatistics = new GridDiagramVO.LineStatistics();
|
||||
lineStatistics.setOrgId(datum.getId());
|
||||
lineStatistics.setOrgName(datum.getName());
|
||||
gwLineStatistics = new GridDiagramVO.LineStatistics();
|
||||
gwLineStatistics.setOrgId(datum.getId());
|
||||
gwLineStatistics.setOrgName(datum.getName());
|
||||
List<LineDevGetDTO> baseList = listMap.get(datum.getId()).getLineBaseList().stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
|
||||
Map<String,List<LineDevGetDTO>> voltageMonitorMap = baseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
|
||||
List<GridDiagramVO.StatisticsData> statisticsData = new ArrayList<>();
|
||||
List<GridDiagramVO.StatisticsData> gwStatisticsData = new ArrayList<>();
|
||||
|
||||
for(String voltage:voltageIds){
|
||||
GridDiagramVO.StatisticsData voltageItem = new GridDiagramVO.StatisticsData();
|
||||
voltageItem.setColumnName(voltage);
|
||||
if(voltageMonitorMap.containsKey(voltage)){
|
||||
List<String> ids = voltageMonitorMap.get(voltage).stream().map(LineDevGetDTO::getObjId).distinct().collect(Collectors.toList());
|
||||
voltageItem.setNumOne((long)ids.size());
|
||||
voltageItem.setNumOneList(ids);
|
||||
}else {
|
||||
voltageItem.setNumOne(0L);
|
||||
voltageItem.setNumOneList(new ArrayList<>());
|
||||
}
|
||||
statisticsData.add(voltageItem);
|
||||
}
|
||||
lineStatistics.setData(statisticsData);
|
||||
gwLineStatistics.setData(gwStatisticsData);
|
||||
|
||||
info.add(lineStatistics);
|
||||
gwInfo.add(gwLineStatistics);
|
||||
}
|
||||
}
|
||||
gridDiagramVO.setInfo(info);
|
||||
gridDiagramVO.setGwInfo(gwInfo);
|
||||
return gridDiagramVO;
|
||||
}
|
||||
|
||||
private void getSubStationStatisticsData(List<GridDiagramVO.StatisticsData> statisticsData,
|
||||
List<GridDiagramVO.StatisticsData> gwStatisticsData,
|
||||
List<SubGetBase> subBaseList,
|
||||
|
||||
@@ -106,7 +106,6 @@ public class CustomReportServiceImpl implements CustomReportService {
|
||||
|
||||
private final WlRecordFeignClient wlRecordFeignClient;
|
||||
|
||||
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
|
||||
|
||||
private final String CELL_DATA = "celldata";
|
||||
private final String V = "v";
|
||||
@@ -863,260 +862,7 @@ public class CustomReportServiceImpl implements CustomReportService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2023/10/8
|
||||
*/
|
||||
|
||||
/*
|
||||
private void analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp, HttpServletResponse response) {
|
||||
//定义一个线程集合
|
||||
List<Future<?>> futures = new ArrayList<>();
|
||||
//指标
|
||||
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()));
|
||||
parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList);
|
||||
} catch (Exception e) {
|
||||
if(e instanceof BusinessException){
|
||||
throw new BusinessException(e.getMessage());
|
||||
}else {
|
||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||
}
|
||||
}
|
||||
//查询不分相别的指标
|
||||
DictData dictData = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.EPD.getCode(), DicDataTypeEnum.CS_DATA_TYPE.getCode()).getData();
|
||||
if(Objects.isNull(dictData)){
|
||||
throw new BusinessException(CommonResponseEnum.FAIL,"字典类型模板缺少!");
|
||||
}
|
||||
List<EleEpdPqd> temTargetList = eleEpdMapper.selectList(new LambdaQueryWrapper<EleEpdPqd>().eq(EleEpdPqd::getDataType,dictData.getId()).in(EleEpdPqd::getPhase,Arrays.asList("T", "M")));
|
||||
List<String> noPhaseList = temTargetList.stream().filter(it->StrUtil.isNotBlank(it.getOtherName())).map(it->it.getOtherName().toUpperCase()).collect(Collectors.toList());
|
||||
|
||||
//处理指标是否合格
|
||||
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 CopyOnWriteArrayList<>();
|
||||
if (CollUtil.isNotEmpty(reportTemplateDTOList)) {
|
||||
//开始组织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
|
||||
Map<String, ReportTemplateDTO> assNoPassMap = new HashMap<>();
|
||||
classMap.forEach((classKey, templateValue) -> {
|
||||
Map<String, List<ReportTemplateDTO>> valueTypeMap = templateValue.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getStatMethod));
|
||||
//每张表开启一个独立线程查询
|
||||
futures.add(executorService.submit(() -> {
|
||||
//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)) {
|
||||
assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
||||
} else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) {
|
||||
assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
||||
} else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) {
|
||||
assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
||||
} else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) {
|
||||
assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
// 等待所有任务完成
|
||||
for (Future<?> future : futures) {
|
||||
try {
|
||||
future.get(); // 这会阻塞直到任务完成或抛出异常
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
log.error("自定义报表多线程查询流程出错!错误信息{}",e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
//处理指标最终判定合格还是不合格
|
||||
dealTargetResult(assNoPassMap, limitTargetMapX, endList);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(endList)) {
|
||||
//数据单位信息
|
||||
Map<String, String> unit = unitMap(reportSearchParam);
|
||||
//进行反向赋值到模板
|
||||
//1、根据itemName分组
|
||||
Map<String, List<ReportTemplateDTO>> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName));
|
||||
//处理台账信息
|
||||
Map<String, String> finalTerminalMap;
|
||||
if (CollUtil.isNotEmpty(terminalList)) {
|
||||
finalTerminalMap = convertKeysToUpperCase(commTerminalGeneralClient.getCustomDetailByLineId(reportSearchParam.getLineId()).getData());
|
||||
}else {
|
||||
finalTerminalMap = new HashMap<>();
|
||||
}
|
||||
//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 ("不合格".equals(str)) {
|
||||
son.set("fc", "#990000");
|
||||
}
|
||||
}
|
||||
} else if (v.charAt(0) == '&') {
|
||||
//结论
|
||||
String tem = v.replace(STR_THREE, "").toUpperCase();
|
||||
if (Objects.nonNull(finalTerminalMap)) {
|
||||
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, "/"));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
//导出自定义报表
|
||||
downReport(jsonArray, response);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* 解析模板
|
||||
* @author cdf
|
||||
* @date 2023/10/20
|
||||
*/
|
||||
/* private void parseTemplate(JSONArray jsonArray, List<ReportTemplateDTO> reportTemplateDTOList, List<ReportTemplateDTO> reportLimitList, List<ReportTemplateDTO> terminalList) {
|
||||
try {
|
||||
//通过文件服务器获取
|
||||
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());
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取测点限值
|
||||
|
||||
Reference in New Issue
Block a user