自定义报表优化处理

This commit is contained in:
2023-10-23 16:30:57 +08:00
parent a2ed98ca86
commit 6c6f648ca8
13 changed files with 224 additions and 75 deletions

View File

@@ -171,6 +171,9 @@ public interface CommTerminalGeneralClient {
HttpResult<List<StatisticsMonitor>> getStatisticsMonitor(@RequestBody StatisticsBizBaseParam param); HttpResult<List<StatisticsMonitor>> getStatisticsMonitor(@RequestBody StatisticsBizBaseParam param);
@GetMapping("/getCustomDetailByLineId")
HttpResult<Map<String,String>> getCustomDetailByLineId(@RequestParam("id") String id);
/** /**
* 用于返回pq 还是pms系统 * 用于返回pq 还是pms系统

View File

@@ -137,6 +137,12 @@ public class CommTerminalGeneralClientFallbackFactory implements FallbackFactory
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<Map<String, String>> getCustomDetailByLineId(String id) {
log.error("{}异常,降级处理,异常为:{}", "获取监测点信息", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override @Override
public HttpResult<String> isPqOrPms() { public HttpResult<String> isPqOrPms() {
log.error("{}异常,降级处理,异常为:{}", "返回pq还是pms系统", throwable.toString()); log.error("{}异常,降级处理,异常为:{}", "返回pq还是pms系统", throwable.toString());

View File

@@ -322,4 +322,19 @@ public class CommTerminalController extends BaseController {
String methodDescribe = getMethodDescribe("getStatisticsMonitor"); String methodDescribe = getMethodDescribe("getStatisticsMonitor");
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, new ArrayList<>(), methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, new ArrayList<>(), methodDescribe);
} }
/**
* 获取监测点的台账详细信息
* @author cdf
* @date 2023/10/23
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/getCustomDetailByLineId")
@ApiOperation("获取监测点的台账详细信息(自定义报表用)")
@ApiImplicitParam(name = "id", value = "监测点ID", required = true)
public HttpResult<Map<String,String>> getCustomDetailByLineId(@RequestParam("id") String id) {
String methodDescribe = getMethodDescribe("getCustomDetailByLineId");
Map<String,String> result = commTerminalService.getCustomDetailByLineId(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -27,6 +27,7 @@ import org.apache.ibatis.annotations.Select;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
@@ -523,4 +524,6 @@ public interface LineMapper extends BaseMapper<Line> {
* @Date: 2023/9/22 10:20 * @Date: 2023/9/22 10:20
*/ */
LineDTO selectLineDetail(@Param("id") String id); LineDTO selectLineDetail(@Param("id") String id);
Map<String,String> getCustomDetailByLineId(@Param("lineId")String lineId);
} }

View File

@@ -1365,4 +1365,37 @@
AND line.id = #{id} AND line.id = #{id}
</select> </select>
<select id="getCustomDetailByLineId" resultType="map">
SELECT
line.id AS lineId,
concat(sub.name,"_",vo.name,"_",line.name) as lineName,
concat(detail.pt1,concat(':',detail.pt2)) as pt,
concat(detail.ct1,concat(':',detail.ct2)) as ct,
detail.Dev_Capacity as Dev_Capacity,
detail.Short_Capacity as Short_Capacity,
detail.Standard_Capacity as Standard_Capacity,
detail.Deal_Capacity as Deal_Capacity,
pqd.This_Time_Check AS This_Time_Check,
dic.name AS voltageLevel
FROM
pq_line line,
pq_line_detail detail,
pq_line vo,
pq_voltage vg,
pq_line dev,
pq_device pqd,
sys_dict_data dic,
pq_line sub
WHERE
line.id = detail.id
AND vo.id = line.pid
AND dev.id = vo.pid
AND vo.id = vg.id
AND pqd.id = dev.id
and vg.scale = dic.id
and sub.id = dev.pid
AND line.id = #{lineId}
</select>
</mapper> </mapper>

View File

@@ -2,8 +2,10 @@ package com.njcn.device.pq.service;
import com.njcn.device.biz.pojo.dto.*; import com.njcn.device.biz.pojo.dto.*;
import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* pqs * pqs
@@ -72,6 +74,14 @@ public interface CommTerminalService {
LineDevGetBandDTO substationGetLine(String substationId); LineDevGetBandDTO substationGetLine(String substationId);
/**
* 获取监测点的台账详细信息
* @author cdf
* @date 2023/10/23
*/
Map<String,String> getCustomDetailByLineId(String id);

View File

@@ -200,8 +200,10 @@ public class CommTerminalServiceImpl implements CommTerminalService {
return lineDevGetBandDTO; return lineDevGetBandDTO;
} }
@Override
public Map<String, String> getCustomDetailByLineId(String id) {
return lineMapper.getCustomDetailByLineId(id);
}
private List<Integer> filterDataTypeNew(String serverName) { private List<Integer> filterDataTypeNew(String serverName) {

View File

@@ -22,6 +22,8 @@ public class ExcelRptTemp extends BaseEntity {
private String content; private String content;
private Integer activation;
private Integer state; private Integer state;
private String valueTitle; private String valueTitle;

View File

@@ -253,4 +253,18 @@ public class CustomReportController extends BaseController {
} }
/**
* 获取报表台账模板树
* @author cdf
* @date 2023/10/11
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/terminalChooseTree")
@ApiOperation("获取报表台账模板树")
public HttpResult<List<ReportTreeVO>> terminalChooseTree(){
String methodDescribe = getMethodDescribe("terminalChooseTree");
List<ReportTreeVO> res = customReportService.terminalChooseTree();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, res, methodDescribe);
}
} }

View File

@@ -41,13 +41,13 @@
DISTINCT DISTINCT
a.id, a.id,
a.NAME, a.NAME,
b.activation, a.activation,
a.report_form a.report_form
FROM FROM
sys_excel_rpt_temp a sys_excel_rpt_temp a
LEFT JOIN sys_dept_temp b ON a.Id = b.temp_id LEFT JOIN sys_dept_temp b ON a.Id = b.temp_id
WHERE WHERE
b.activation = 1 a.activation = 1
and b.dept_id in and b.dept_id in
<foreach collection="ids" index="index" item="item" separator="," open="(" close=")"> <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
#{item} #{item}

View File

@@ -89,6 +89,13 @@ public interface CustomReportService {
List<ReportTreeVO> targetLimitChooseTree(); List<ReportTreeVO> targetLimitChooseTree();
/**
* 台账类型树
* @author cdf
* @date 2023/10/23
*/
List<ReportTreeVO> terminalChooseTree();
/** /**
* 绑定/解绑模板数据 * 绑定/解绑模板数据
* @author qijian * @author qijian

View File

@@ -3,6 +3,7 @@ package com.njcn.harmonic.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.*; 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.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.FileUtil; 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.DeptLineFeignClient;
import com.njcn.device.pq.api.DeviceUnitClient; import com.njcn.device.pq.api.DeviceUnitClient;
import com.njcn.device.pq.pojo.po.DeptLine; 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.harmonic.service.CustomReportService;
import com.njcn.oss.constant.OssPath; import com.njcn.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil; import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.user.api.DeptFeignClient;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@@ -92,10 +95,12 @@ public class CustomReportServiceImpl implements CustomReportService {
private final DeviceUnitClient deviceUnitClient; private final DeviceUnitClient deviceUnitClient;
private final DicDataFeignClient dicDataFeignClient; private final DicDataFeignClient dicDataFeignClient;
private final DeptLineFeignClient deptLineFeignClient; private final DeptFeignClient deptFeignClient;
private final InfluxDbUtils influxDbUtils; private final InfluxDbUtils influxDbUtils;
private final CommTerminalGeneralClient commTerminalGeneralClient;
@Override @Override
public boolean addCustomReportTemplate(ReportTemplateParam reportTemplateParam) { public boolean addCustomReportTemplate(ReportTemplateParam reportTemplateParam) {
checkName(reportTemplateParam, false); checkName(reportTemplateParam, false);
@@ -112,6 +117,7 @@ public class CustomReportServiceImpl implements CustomReportService {
ExcelRptTemp excelRptTemp = new ExcelRptTemp(); ExcelRptTemp excelRptTemp = new ExcelRptTemp();
BeanUtils.copyProperties(reportTemplateParam, excelRptTemp); BeanUtils.copyProperties(reportTemplateParam, excelRptTemp);
excelRptTemp.setState(DataStateEnum.ENABLE.getCode()); excelRptTemp.setState(DataStateEnum.ENABLE.getCode());
excelRptTemp.setActivation(DataStateEnum.ENABLE.getCode());
excelRptTempMapper.insert(excelRptTemp); excelRptTempMapper.insert(excelRptTemp);
//获取主键,并存入部门表 //获取主键,并存入部门表
@@ -177,9 +183,8 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override @Override
public List<ReportTemplateVO> getTemplateByDept(String id) { public List<ReportTemplateVO> getTemplateByDept(String id) {
//获取子孙部门,去重 List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId(id).getData();
DeptLine data = deptLineFeignClient.getLineByLineIds(id).getData(); return excelRptTempMapper.getReportTemplateByDept(deptIds);
return excelRptTempMapper.getReportTemplateByDept(Arrays.asList(data.getId()));
} }
@Override @Override
@@ -307,7 +312,7 @@ public class CustomReportServiceImpl implements CustomReportService {
reportTreeVO.setShowName(val.get(0).getShowName()); reportTreeVO.setShowName(val.get(0).getShowName());
if (Objects.nonNull(val.get(0).getHarmStart()) && Objects.nonNull(val.get(0).getHarmEnd())) { 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<>(); List<ReportTreeVO> temList = new ArrayList<>();
for (int i = val.get(0).getHarmStart(); i <= val.get(0).getHarmEnd(); i++) { for (int i = val.get(0).getHarmStart(); i <= val.get(0).getHarmEnd(); i++) {
double count; double count;
@@ -316,10 +321,10 @@ public class CustomReportServiceImpl implements CustomReportService {
if (val.get(0).getHarmStart() == 1) { if (val.get(0).getHarmStart() == 1) {
count = i + 0.5; count = i + 0.5;
reportTreeItem.setShowName(count + "" + val.get(0).getShowName()); 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 { } else {
reportTreeItem.setShowName(i + "" + val.get(0).getShowName()); 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); reportTreeItem.setFlag(1);
@@ -327,19 +332,30 @@ public class CustomReportServiceImpl implements CustomReportService {
} }
reportTreeVO.setChildren(temList); reportTreeVO.setChildren(temList);
} else { } 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); reportTreeVO.setFlag(1);
} }
result.add(reportTreeVO); 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 reportTreeVO = new ReportTreeVO();
reportTreeVO.setId(item.getId()); reportTreeVO.setId(item.getId());
reportTreeVO.setName(item.getName()); reportTreeVO.setName("&" + item.getName() + "&");
reportTreeVO.setFlag(1);
reportTreeVO.setShowName(item.getShowName()); reportTreeVO.setShowName(item.getShowName());
result.add(reportTreeVO); result.add(reportTreeVO);
});*/ });
return result; return result;
} }
@@ -718,15 +734,14 @@ public class CustomReportServiceImpl implements CustomReportService {
/** /**
* @param data 同类型的cell模板 * @param data 同类型的cell模板
* @param sql 单个cell模板 * @param sql 单个cell模板
* @param endList 用于返回最终组装好的数据类似data * @param endList 用于返回最终组装好的数据类似data
* @param limitMap 指标是否合格模板 * @param limitMap 指标是否合格模板
* @param assNoPassMap 用于存储不合格的指标 * @param assNoPassMap 用于存储不合格的指标
*
* @date 2023/10/20 * @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') //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(data.get(i).getTemplateName())
.append(InfluxDbSqlConstant.NUM_95) .append(InfluxDbSqlConstant.NUM_95)
.append(InfluxDbSqlConstant.RBK) .append(InfluxDbSqlConstant.RBK)
.append(" as \"") .append(InfluxDbSqlConstant.AS).append(InfluxDbSqlConstant.DQM)
.append(data.get(i).getItemName()).append("\" "); .append(data.get(i).getItemName()).append(InfluxDbSqlConstant.DQM);
} else { } else {
sql.append(method) sql.append(method)
.append(InfluxDbSqlConstant.LBK) .append(InfluxDbSqlConstant.LBK)
.append(data.get(i).getTemplateName()) .append(data.get(i).getTemplateName())
.append(InfluxDbSqlConstant.NUM_95) .append(InfluxDbSqlConstant.NUM_95)
.append(InfluxDbSqlConstant.RBK) .append(InfluxDbSqlConstant.RBK)
.append(" as \"") .append(InfluxDbSqlConstant.AS).append(InfluxDbSqlConstant.DQM)
.append(data.get(i).getItemName()).append("\"").append(StrUtil.COMMA); .append(data.get(i).getItemName()).append(InfluxDbSqlConstant.DQM).append(StrUtil.COMMA);
} }
} }
@@ -761,20 +776,21 @@ public class CustomReportServiceImpl implements CustomReportService {
.append(InfluxDbSqlConstant.LBK) .append(InfluxDbSqlConstant.LBK)
.append(data.get(i).getTemplateName()) .append(data.get(i).getTemplateName())
.append(InfluxDbSqlConstant.RBK) .append(InfluxDbSqlConstant.RBK)
.append(" as \"") .append(InfluxDbSqlConstant.AS).append(InfluxDbSqlConstant.DQM)
.append(data.get(i).getItemName()).append("\" "); .append(data.get(i).getItemName()).append(InfluxDbSqlConstant.DQM);
} else { } else {
sql.append(method) sql.append(method)
.append(InfluxDbSqlConstant.LBK) .append(InfluxDbSqlConstant.LBK)
.append(data.get(i).getTemplateName()) .append(data.get(i).getTemplateName())
.append(InfluxDbSqlConstant.RBK) .append(InfluxDbSqlConstant.RBK)
.append(" as \"") .append(InfluxDbSqlConstant.AS).append(InfluxDbSqlConstant.DQM)
.append(data.get(i).getItemName()).append("\"").append(StrUtil.COMMA); .append(data.get(i).getItemName()).append(InfluxDbSqlConstant.DQM).append(StrUtil.COMMA);
} }
} }
} }
sql.append(StrPool.C_SPACE);
if (reportSearchParam.getResourceType() == 1) { if (reportSearchParam.getResourceType() == 1) {
sql.append(InfluxDbSqlConstant.FROM) sql.append(InfluxDbSqlConstant.FROM)
.append(data.get(0).getClassId().replace("data", "day")); .append(data.get(0).getClassId().replace("data", "day"));
@@ -846,11 +862,11 @@ public class CustomReportServiceImpl implements CustomReportService {
double v = (Double) map.get(item.getItemName()); double v = (Double) map.get(item.getItemName());
item.setValue(String.format("%.3f", v)); item.setValue(String.format("%.3f", v));
if(overLimitMap.containsKey(item.getLimitName())){ if (overLimitMap.containsKey(item.getLimitName())) {
Float tagVal = overLimitMap.get(item.getLimitName()); Float tagVal = overLimitMap.get(item.getLimitName());
if (v > tagVal) { if (v > tagVal) {
item.setOverLimitFlag(1); item.setOverLimitFlag(1);
}else { } else {
item.setOverLimitFlag(0); item.setOverLimitFlag(0);
} }
} }
@@ -862,10 +878,12 @@ public class CustomReportServiceImpl implements CustomReportService {
double limitVal = Double.parseDouble(tem.getValue()); double limitVal = Double.parseDouble(tem.getValue());
if (v > limitVal) { if (v > limitVal) {
tem.setOverLimitFlag(1); tem.setOverLimitFlag(1);
tem.setValue(tem.getValue());
assNoPassMap.put(key, tem); assNoPassMap.put(key, tem);
} else if (!assNoPassMap.containsKey(key)) { } else if (!assNoPassMap.containsKey(key)) {
tem.setOverLimitFlag(0); tem.setOverLimitFlag(0);
assNoPassMap.put(key, tem); assNoPassMap.put(key, tem);
tem.setValue(tem.getValue());
} }
} }
@@ -898,11 +916,13 @@ public class CustomReportServiceImpl implements CustomReportService {
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>(); List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
//限值 //限值
List<ReportTemplateDTO> reportLimitList = new ArrayList<>(); List<ReportTemplateDTO> reportLimitList = new ArrayList<>();
//台账
List<ReportTemplateDTO> terminalList = new ArrayList<>();
JSONArray jsonArray; JSONArray jsonArray;
try (InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) { try (InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) {
jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig())); jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
pareTemplate(jsonArray,fileStream,excelRptTemp.getContent(),reportTemplateDTOList,reportLimitList); parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList,terminalList);
}catch (Exception e){ } catch (Exception e) {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
} }
//处理查日表还是分钟表 //处理查日表还是分钟表
@@ -910,42 +930,16 @@ public class CustomReportServiceImpl implements CustomReportService {
long temEnd = System.currentTimeMillis(); long temEnd = System.currentTimeMillis();
//存放限值的map
Map<String, Float> limitMap = new HashMap<>();
//存放限值指标的map
Map<String, ReportTemplateDTO> limitTargetMapX = new HashMap<>();
//处理指标是否合格 //处理指标是否合格
if (CollUtil.isNotEmpty(reportLimitList)) { Map<String, Float> limitMap = overLimitDeal(reportLimitList, reportSearchParam);
//存放限值指标的map
StringBuilder sql = new StringBuilder("select "); Map<String, ReportTemplateDTO> limitTargetMapX = reportLimitList.stream().collect(Collectors.toMap(ReportTemplateDTO::getItemName, Function.identity()));
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()));
}
List<ReportTemplateDTO> endList = new ArrayList<>(); List<ReportTemplateDTO> endList = new ArrayList<>();
if (CollUtil.isNotEmpty(reportTemplateDTOList)) { if (CollUtil.isNotEmpty(reportTemplateDTOList)) {
long deal = System.currentTimeMillis(); long deal = System.currentTimeMillis();
Map<String, ReportTemplateDTO> finalLimitMapX = limitTargetMapX;
Map<String, Float> overLimitMap = limitMap;
//开始组织sql //开始组织sql
Map<String, List<ReportTemplateDTO>> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getClassId)); Map<String, List<ReportTemplateDTO>> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getClassId));
Map<String, ReportTemplateDTO> assNoPassMap = new HashMap<>(); 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)); Map<String, List<ReportTemplateDTO>> phaseMap = valueTypeVal.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getPhase));
phaseMap.forEach((phaseKey, phaseVal) -> { phaseMap.forEach((phaseKey, phaseVal) -> {
StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT);
if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) { if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) {
assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, finalLimitMapX,overLimitMap, assNoPassMap); assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap);
} else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) {
assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, finalLimitMapX,overLimitMap, assNoPassMap); assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap);
} else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) {
assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam, finalLimitMapX,overLimitMap, assNoPassMap); assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap);
} else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) {
assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, finalLimitMapX,overLimitMap, assNoPassMap); assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap);
} }
}); });
}); });
}); });
assNoPassMap.forEach((key, val) -> { assNoPassMap.forEach((key, val) -> {
finalLimitMapX.remove(key); limitTargetMapX.remove(key);
if (val.getOverLimitFlag() == 1) { if (val.getOverLimitFlag() == 1) {
val.setValue("不合格"); val.setValue("不合格 ("+val.getValue()+")");
} else { } else {
val.setValue("合格"); val.setValue("合格 ("+val.getValue()+")");
} }
endList.add(val); endList.add(val);
}); });
finalLimitMapX.forEach((key, val) -> { limitTargetMapX.forEach((key, val) -> {
if (Objects.isNull(val.getOverLimitFlag())) { if (Objects.isNull(val.getOverLimitFlag())) {
val.setValue("/"); val.setValue("/");
} else { } else {
@@ -998,6 +990,10 @@ public class CustomReportServiceImpl implements CustomReportService {
System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S"); System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S");
} }
if (CollUtil.isNotEmpty(endList)) { if (CollUtil.isNotEmpty(endList)) {
long jie = System.currentTimeMillis(); long jie = System.currentTimeMillis();
//数据单位信息 //数据单位信息
@@ -1005,7 +1001,16 @@ public class CustomReportServiceImpl implements CustomReportService {
//进行反向赋值到模板 //进行反向赋值到模板
//1、根据itemName分组 //1、根据itemName分组
Map<String, List<ReportTemplateDTO>> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName)); 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 //2、把itemName的value赋给v和m
jsonArray.forEach(item -> { jsonArray.forEach(item -> {
JSONObject jsonObject = (JSONObject) item; JSONObject jsonObject = (JSONObject) item;
JSONArray itemArr = (JSONArray) jsonObject.get("celldata"); JSONArray itemArr = (JSONArray) jsonObject.get("celldata");
@@ -1046,6 +1051,17 @@ public class CustomReportServiceImpl implements CustomReportService {
son.set("fc", "#990000"); 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("#")) { if (v.charAt(0) == '@' && v.contains("#")) {
@@ -1102,10 +1118,11 @@ public class CustomReportServiceImpl implements CustomReportService {
/** /**
* 解析模板 * 解析模板
*
* @author cdf * @author cdf
* @date 2023/10/20 * @date 2023/10/20
*/ */
private void pareTemplate(JSONArray jsonArray,InputStream fileStream,String content,List<ReportTemplateDTO> reportTemplateDTOList,List<ReportTemplateDTO> reportLimitList){ private void parseTemplate(JSONArray jsonArray, List<ReportTemplateDTO> reportTemplateDTOList, List<ReportTemplateDTO> reportLimitList, List<ReportTemplateDTO> terminalList) {
try { try {
//通过文件服务器获取 //通过文件服务器获取
@@ -1160,6 +1177,13 @@ public class CustomReportServiceImpl implements CustomReportService {
reportTemplateDTO.setClassId(vItem[2]); reportTemplateDTO.setClassId(vItem[2]);
} }
reportLimitList.add(reportTemplateDTO); 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 * @author cdf
* @date 2023/10/20 * @date 2023/10/20
*/ */
private void rangeDate(ReportSearchParam reportSearchParam){ private void rangeDate(ReportSearchParam reportSearchParam) {
long a; long a;
DateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
try { try {
@@ -1195,10 +1220,38 @@ public class CustomReportServiceImpl implements CustomReportService {
reportSearchParam.setResourceType(0); reportSearchParam.setResourceType(0);
} }
} catch (ParseException e) { } 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;
}
} }

View File

@@ -395,6 +395,7 @@ public enum DicDataEnum {
SET("定值","Set"), SET("定值","Set"),
INSET("内部定值","InSet"), INSET("内部定值","InSet"),
CTRL("控制","Ctrl"), CTRL("控制","Ctrl"),
TERMINAL_SORT("台账类型","terminal_sort"),
/** /**
* 暂降原因 * 暂降原因
*/ */