From 2319895ff453c68b2a08e8349a2640621daf3bc1 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Tue, 13 Aug 2024 10:45:06 +0800 Subject: [PATCH] =?UTF-8?q?1.pms=E7=94=B5=E8=83=BD=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=202.=E5=9B=AD=E5=8C=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=203.=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=EF=BC=88=E9=83=A8=E5=88=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/dto/RunMonitorStatisticalDTO.java | 58 ++ .../ledgerManger/CommTerminalController.java | 17 +- .../ledgerManger/impl/PmsParkServiceImpl.java | 4 +- .../pojo/po/upload/RUploadReport.java | 80 ++ .../upload/RUploadReportController.java | 135 +++ .../mapper/upload/RUploadReportMapper.java | 17 + .../service/impl/CustomReportServiceImpl.java | 317 +----- .../service/upload/IRUploadReportService.java | 17 + .../upload/impl/RUploadReportServiceImpl.java | 21 + .../src/main/resources/bootstrap.yml | 2 + ...ient.java => CustomReportFeignClient.java} | 6 +- ...stomReportFeignClientFallbackFactory.java} | 8 +- .../controller/line/ReportController.java | 2 +- .../mysql/Impl/line/ReportServiceImpl.java | 968 +++++++++++++++--- .../src/main/resources/bootstrap.yml | 5 +- .../system/controller/AuditController.java | 5 + .../tasks/report/CustomReportRunner.java | 38 + 17 files changed, 1216 insertions(+), 484 deletions(-) create mode 100644 pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/dto/RunMonitorStatisticalDTO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/upload/RUploadReport.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/upload/RUploadReportController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/upload/RUploadReportMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/IRUploadReportService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/impl/RUploadReportServiceImpl.java rename pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/{CoustmReportFeignClient.java => CustomReportFeignClient.java} (76%) rename pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/{CoustomReportFeignClientFallbackFactory.java => CustomReportFeignClientFallbackFactory.java} (83%) create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/report/CustomReportRunner.java diff --git a/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/dto/RunMonitorStatisticalDTO.java b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/dto/RunMonitorStatisticalDTO.java new file mode 100644 index 000000000..8bae881f8 --- /dev/null +++ b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/dto/RunMonitorStatisticalDTO.java @@ -0,0 +1,58 @@ +package com.njcn.device.pms.pojo.dto; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class RunMonitorStatisticalDTO { + + private String objId; + private String provinceOrg; + private String provinceOrgName; + private String cityOrg; + private String cityOrgName; + private String maintOrg; + private String maintOrgName; + private String monitorName; + private String monitorVoltageLevel; + private String monitorId; + private String monitorStatus; + private Date monitorOperateDate; + private Date monitorStopDate; + private String substationId; + private String substationName; + private String busId; + private String busName; + private String outLineIntervalId; + private String outLineIntervalName; + private String monitorObjTypeBig; + private String monitorObjTypeSmall; + private String monitorTag; + private String monitorObjName; + private String monitorObjId; + private String isLine; + private BigDecimal minShortCapacity; + private BigDecimal supplyEquipCapacity; + private BigDecimal userProtocolCapacity; + private String terminalCode; + private String terminalManufacturer; + private String terminalModel; + private String terminalManufactureNum; + private String terminalConnect; + private String neutralGround; + private String evtType; + private String statisticalType; + private String statisticalDate; + private String isMonitorOnline; + private String isTerminalOnline; + private Integer onlineMonitorNum; + private Integer runMonitorNum; + private BigDecimal onlineMonitorRate; + private Long expectCollectNum; + private Long actualCollectNum; + private BigDecimal dataFullRate; + + +} diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/ledgerManger/CommTerminalController.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/ledgerManger/CommTerminalController.java index 0794ea848..c2d511ca5 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/ledgerManger/CommTerminalController.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/ledgerManger/CommTerminalController.java @@ -269,6 +269,9 @@ public class CommTerminalController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, map, methodDescribe); } + /** + * 获取实际,投运,谐波系统 的监测点 + */ @OperateInfo(info = LogEnum.BUSINESS_COMMON) @GetMapping("/getRunMonitorIds") @ApiOperation("获取投运谐波系统所有监测点") @@ -279,20 +282,6 @@ public class CommTerminalController extends BaseController { } - /** - * 获取实际,投运,谐波系统 的监测点 - * @author cdf - * @date 2023/9/18 - */ - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @GetMapping("/getRunMonitorList") - @ApiOperation("获取实际,投运,谐波系统 的监测点") - public HttpResult> getRunMonitorList() { - String methodDescribe = getMethodDescribe("getRunMonitorList"); - List result = commTerminalService.getOneMonitorIds(); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); - } - /** * 根据监测点集合获取监测点详情 * @author cdf diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/ledgerManger/impl/PmsParkServiceImpl.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/ledgerManger/impl/PmsParkServiceImpl.java index 32bc2bb7f..485984af2 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/ledgerManger/impl/PmsParkServiceImpl.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/ledgerManger/impl/PmsParkServiceImpl.java @@ -85,7 +85,7 @@ public class PmsParkServiceImpl extends ServiceImpl im public Page pageList(PmsParkParam.PmsParkQuery parkQuery) { List deptCodes = deptFeignClient.getDepSonSelfCodetByDeptId(parkQuery.getMaintOrg()).getData(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(PmsParkPO::getMaintOrg, deptCodes); + lambdaQueryWrapper.in(PmsParkPO::getMaintOrg, deptCodes).orderByDesc(PmsParkPO::getCreateTime,PmsParkPO::getCityOrgName); return this.page(new Page<>(PageFactory.getPageNum(parkQuery), PageFactory.getPageSize(parkQuery)), lambdaQueryWrapper); } @@ -140,7 +140,7 @@ public class PmsParkServiceImpl extends ServiceImpl im List ids = deptFeignClient.getDepSonSelfCodetByCode(param.getCityOrg()).getData(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.select(PmsMidLedger::getName,PmsMidLedger::getOperationName,PmsMidLedger::getId).in(PmsMidLedger::getOperationId,ids).eq(PmsMidLedger::getLevel,0); + lambdaQueryWrapper.select(PmsMidLedger::getName,PmsMidLedger::getOperationName,PmsMidLedger::getId).in(PmsMidLedger::getSectionId,ids).eq(PmsMidLedger::getLevel,0); List pmsMidLedgerList = pmsMidLedgerMapper.selectList(lambdaQueryWrapper); return pmsMidLedgerList; } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/upload/RUploadReport.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/upload/RUploadReport.java new file mode 100644 index 000000000..b64c36ec6 --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/upload/RUploadReport.java @@ -0,0 +1,80 @@ +package com.njcn.harmonic.pojo.po.upload; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; + +/** + *

+ * 电能质量报表上送 + *

+ * + * @author xy + * @since 2024-08-07 + */ +@Getter +@Setter +@TableName("r_upload_report") +public class RUploadReport { + + private static final long serialVersionUID = 1L; + + @TableId + private String objId; + + /** + * 省单位id + */ + private String provinceOrg; + + /** + * 省单位名称 + */ + private String provinceOrgName; + + /** + * 报表类型 + */ + @NotBlank(message = "报表类型不可为空") + private String reportType; + + /** + * Json字符串 + */ + @NotBlank(message = "Json字符串不可为空") + private String reportData; + + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime updateTime; + + private String isDelete; + + private LocalDateTime deleteTime; + + private Integer uploadStatus; + + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/upload/RUploadReportController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/upload/RUploadReportController.java new file mode 100644 index 000000000..e100955e6 --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/upload/RUploadReportController.java @@ -0,0 +1,135 @@ +package com.njcn.harmonic.controller.upload; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.harmonic.pojo.param.DimGlobalDataParam; +import com.njcn.harmonic.pojo.po.upload.RUploadReport; +import com.njcn.harmonic.pojo.vo.DimGlobalDataStandVO; +import com.njcn.harmonic.service.upload.IRUploadReportService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +import com.njcn.web.enums.GWSendEnum; +import com.njcn.web.factory.PageFactory; +import com.njcn.web.pojo.param.BaseParam; +import com.njcn.web.pojo.param.SendParam; +import com.njcn.web.utils.GwSendUtil; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + *

+ * 电能质量报表上送 前端控制器 + *

+ * + * @author cdf + * @since 2024-08-07 + */ +@RestController +@RequestMapping("/rUploadReport") +@RequiredArgsConstructor +public class RUploadReportController extends BaseController { + + private final IRUploadReportService irUploadReportService; + + private final DeptFeignClient deptFeignClient; + + + /** + * 新增pms电能质量报表 + */ + @PostMapping("/addPmsReport") + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD) + @ApiOperation("新增pms电能质量报表") + @ApiImplicitParam(name = "rUploadReport", value = "条件参数", required = true) + public HttpResult addPmsReport(@RequestBody @Validated RUploadReport rUploadReport){ + String methodDescribe = getMethodDescribe("addPmsReport"); + Dept dept = deptFeignClient.getRootDept().getData(); + List deptList = deptFeignClient.getDirectSonSelf(dept.getId()).getData(); + Optional optional = deptList.stream().filter(item->item.getPid().equals(dept.getId())).findFirst(); + if(optional.isPresent()){ + Dept d = optional.get(); + rUploadReport.setProvinceOrg(d.getCode()); + rUploadReport.setProvinceOrgName(d.getName()); + } + rUploadReport.setIsDelete("0"); + rUploadReport.setUploadStatus(0); + + long count = irUploadReportService.count(new LambdaQueryWrapper().eq(RUploadReport::getProvinceOrg,rUploadReport.getProvinceOrg())); + if(count>0){ + throw new BusinessException("已经存在该省电能质量报告"); + } + irUploadReportService.save(rUploadReport); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + + /** + * 修改pms电能质量报表 + */ + @PostMapping("/updatePmsReport") + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPLOAD) + @ApiOperation("修改pms电能质量报表") + @ApiImplicitParam(name = "rUploadReport", value = "条件参数", required = true) + public HttpResult updatePmsReport(@RequestBody @Validated RUploadReport rUploadReport){ + String methodDescribe = getMethodDescribe("updatePmsReport"); + irUploadReportService.updateById(rUploadReport); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + + /** + * 删除pms电能质量报表 + */ + @PostMapping("/delPmsReport") + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.DELETE) + @ApiOperation("删除pms电能质量报表") + public HttpResult delPmsReport(@RequestBody List ids){ + String methodDescribe = getMethodDescribe("delPmsReport"); + irUploadReportService.removeByIds(ids); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + + @PostMapping("/pagePmsReportList") + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("列表集合") + public HttpResult> pagePmsReportList(@RequestBody BaseParam baseParam){ + String methodDescribe = getMethodDescribe("pagePmsReportList"); + Page reportList = irUploadReportService.page(new Page<>(PageFactory.getPageNum(baseParam),PageFactory.getPageSize(baseParam))); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, reportList, methodDescribe); + } + + @PostMapping("/uploadGw") + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("上送电能质量报表数据新增或更新") + public HttpResult uploadGw(@RequestBody List ids){ + String methodDescribe = getMethodDescribe("uploadGw"); + List reportList = irUploadReportService.listByIds(ids); + SendParam sendParam = new SendParam(); + sendParam.setStats(reportList); + Map map = GwSendUtil.send(sendParam, GWSendEnum.REPORT_CREATE); + int result = GwSendUtil.returnInfoMsg(ids,map); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + +} + diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/upload/RUploadReportMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/upload/RUploadReportMapper.java new file mode 100644 index 000000000..72aaabcec --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/upload/RUploadReportMapper.java @@ -0,0 +1,17 @@ +package com.njcn.harmonic.mapper.upload; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.harmonic.pojo.po.upload.RUploadReport; + +/** + *

+ * 电能质量报表上送 Mapper 接口 + *

+ * + * @author xy + * @since 2024-08-07 + */ +public interface RUploadReportMapper extends BaseMapper { + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java index 5b31480d8..19df2d563 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.utils.FileUtil; @@ -397,9 +398,9 @@ public class CustomReportServiceImpl implements CustomReportService { tem = "#NO"; } if (StrUtil.isNotBlank(twoKey)) { - reportTreeStat.setName("$" + oneKey + "#" + twoKey + "#" + statItem + "#" + item.getClassId().trim() + tem.trim() + "$"); + reportTreeStat.setName("$" + oneKey + "#" + twoKey + "#" + statItem + "#" + item.getResourcesId().trim() + tem.trim() + "$"); } else { - reportTreeStat.setName("$" + oneKey + "#" + statItem + "#" + item.getClassId().trim() + tem.trim() + "$"); + reportTreeStat.setName("$" + oneKey + "#" + statItem + "#" + item.getResourcesId().trim() + tem.trim() + "$"); } reportTreeStat.setShowName(statItem); @@ -437,146 +438,6 @@ public class CustomReportServiceImpl implements CustomReportService { } - /** - * 解析报表模板赋值数据 - */ -/* private void analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp,HttpServletResponse response) { - //根据content,获取v值并进行处理 - List reportTemplateDTOList = new ArrayList<>(); - JSONArray jsonArray; - try (InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) { - //通过文件服务器获取 - jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig())); - 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 == 4) { - //$HA[_25]#B#max#classId$ - reportTemplateDTO.setTemplateName(vItem[0]); - reportTemplateDTO.setPhase(vItem[1].substring(0, 1)); - reportTemplateDTO.setStatMethod(vItem[2].toUpperCase()); - reportTemplateDTO.setClassId(vItem[3]); - } else if (vItem.length == 3) { - //$HA[_25]#max#classId$ - reportTemplateDTO.setTemplateName(vItem[0]); - reportTemplateDTO.setPhase("M"); - reportTemplateDTO.setStatMethod(vItem[1].toUpperCase()); - reportTemplateDTO.setClassId(vItem[2]); - } - reportTemplateDTOList.add(reportTemplateDTO); - } - } - } - }); - }); - } catch (Exception e) { - throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); - } - - List endList = new ArrayList<>(); - if (CollUtil.isNotEmpty(reportTemplateDTOList)) { - //开始组织sql - reportTemplateDTOList.stream().forEach(data -> { - StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); - if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(data.getStatMethod())) { - assSql(data, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam); - } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(data.getStatMethod())) { - assSql(data, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam); - } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(data.getStatMethod())) { - assSql(data, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam); - } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(data.getStatMethod())) { - assSql(data, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam); - } - }); - } - - if (CollUtil.isNotEmpty(endList)) { - //数据单位信息 - Map unit = unitMap(reportSearchParam.getLineId()); - //进行反向赋值到模板 - //1、根据itemName分组 - Map> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName)); - //2、把itemName的value赋给v和m - 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 = ""; - if(Objects.nonNull(assMap.get(v.replace("$", "")))){ - str = assMap.get(v.replace("$", "")).get(0).getValue(); - //没有值,赋"/" - if (StringUtils.isBlank(str)) { - str = "/"; - } - son.set("v", str); - } - } - //解决数据单位问题 @指标#类型@ - if (v.charAt(0) == '@' && v.contains("#")) { - String replace = v.replace("@", ""); - son.set("v", unit.getOrDefault(replace, "/")); - - } - } - } - }); - }); - } - - InputStream reportStream = IoUtil.toStream(jsonArray.toString(), CharsetUtil.UTF_8); - String newContent = fileStorageUtil.uploadStream(reportStream, OssPath.HARMONIC_EXCEL_REPORT, FileUtil.generateFileName("json")); - - response.setContentType("application/octet-stream;charset=UTF-8"); - response.setHeader("Content-Disposition", "attachment;filename="+"aa"); - //入库前判断是否有了,有了就更新 - ExcelRpt excelRpt = new ExcelRpt(); - excelRpt.setName(excelRptTemp.getName()); - excelRpt.setLineId(reportSearchParam.getLineId()); - excelRpt.setDataDate(DateUtil.parse(reportSearchParam.getStartTime())); - excelRpt.setTempId(excelRptTemp.getId()); - excelRpt.setContent(newContent); - excelRpt.setType(reportSearchParam.getType()); - excelRpt.setState(DataStateEnum.ENABLE.getCode()); - - excelRptMapper.insert(excelRpt); - OutputStream toClient = null; - try { - toClient = new BufferedOutputStream(response.getOutputStream()); - //通过IOUtils对接输入输出流,实现文件下载 - IOUtils.copy(reportStream, toClient); - toClient.flush(); - } catch (Exception e) { - throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); - } finally { - IOUtils.closeQuietly(reportStream); - IOUtils.closeQuietly(toClient); - } - - }*/ /** @@ -636,99 +497,6 @@ public class CustomReportServiceImpl implements CustomReportService { return unit; } - /** - * 组装influxDB查询sql,查询value并封装endlist - * - * @return 结果 - */ - private void assSql(ReportTemplateDTO data, StringBuilder sql, List endList, String method, ReportSearchParam reportSearchParam) { - //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)) { - sql.append(method) - .append(InfluxDbSqlConstant.LBK) - .append(data.getTemplateName()) - .append(InfluxDbSqlConstant.NUM_95) - .append(InfluxDbSqlConstant.RBK) - .append(InfluxDbSqlConstant.AS_VALUE); - } else { - sql.append(method) - .append(InfluxDbSqlConstant.LBK) - .append(data.getTemplateName()) - .append(InfluxDbSqlConstant.RBK) - .append(InfluxDbSqlConstant.AS_VALUE); - } - - if (reportSearchParam.getResourceType() == 1) { - sql.append(InfluxDbSqlConstant.FROM) - .append(data.getClassId().replace("data", "day")); - } else { - sql.append(InfluxDbSqlConstant.FROM) - .append(data.getClassId()); - } - - sql.append(InfluxDbSqlConstant.WHERE) - .append(InfluxDBTableConstant.LINE_ID) - .append(InfluxDbSqlConstant.EQ) - .append(InfluxDbSqlConstant.QM) - .append(reportSearchParam.getLineId()) - .append(InfluxDbSqlConstant.QM); - //相别特殊处理 - if (!InfluxDBTableConstant.NO_PHASE.equals(data.getPhase())) { - sql.append(InfluxDbSqlConstant.AND) - .append(InfluxDBTableConstant.PHASIC_TYPE) - .append(InfluxDbSqlConstant.EQ) - .append(InfluxDbSqlConstant.QM) - .append(data.getPhase()) - .append(InfluxDbSqlConstant.QM); - } - - - //data_flicker、data_fluc、data_plt 无 value_type - if (!InfluxDBTableConstant.DATA_FLICKER.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_FLUC.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_PLT.equals(data.getClassId())) { - sql.append(InfluxDbSqlConstant.AND) - .append(InfluxDBTableConstant.VALUE_TYPE) - .append(InfluxDbSqlConstant.EQ) - .append(InfluxDbSqlConstant.QM) - .append(data.getStatMethod()) - .append(InfluxDbSqlConstant.QM); - } - - //频率和频率偏差仅统计T相 - if (data.getTemplateName().equals("freq_dev") || data.getTemplateName().equals("freq")) { - sql.append(InfluxDbSqlConstant.AND) - .append(InfluxDBTableConstant.PHASIC_TYPE) - .append(InfluxDbSqlConstant.EQ) - .append(InfluxDbSqlConstant.QM) - .append(InfluxDBTableConstant.PHASE_TYPE_T) - .append(InfluxDbSqlConstant.QM); - } - //时间范围处理 - sql - .append(InfluxDbSqlConstant.AND) - .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDbSqlConstant.START_TIME).append(InfluxDbSqlConstant.QM) - .append(InfluxDbSqlConstant.AND) - .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.END_TIME).append(InfluxDbSqlConstant.QM); - - System.out.println(sql); - - sql.append(InfluxDbSqlConstant.TZ); - - if (data.getTemplateName().equals("freq_dev") || data.getTemplateName().equals("freq")) { - System.out.println(sql); - } - - - StatisticalDataDTO statisticalDataDTO = commonService.selectBySql(sql); - //根据不同的库表赋值 - if (Objects.isNull(statisticalDataDTO)) { - data.setValue("/"); - } else { - data.setValue(String.format("%.3f", statisticalDataDTO.getValue())); - } - endList.add(data); - } /** @@ -748,18 +516,16 @@ public class CustomReportServiceImpl implements CustomReportService { for (int i = 0; i < data.size(); i++) { if (i == data.size() - 1) { - sql.append(method) + sql.append("MAX") .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(method) + sql.append("MAX") .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); @@ -788,14 +554,10 @@ public class CustomReportServiceImpl implements CustomReportService { } - sql.append(StrPool.C_SPACE); - if (reportSearchParam.getResourceType() == 1) { - sql.append(InfluxDbSqlConstant.FROM) - .append(data.get(0).getClassId().replace("data", "day")); - } else { - sql.append(InfluxDbSqlConstant.FROM) - .append(data.get(0).getClassId()); - } + sql.append(StrPool.C_SPACE) + .append(InfluxDbSqlConstant.FROM) + .append(data.get(0).getResourceId()); + sql.append(InfluxDbSqlConstant.WHERE) .append(InfluxDBTableConstant.LINE_ID) @@ -815,14 +577,15 @@ public class CustomReportServiceImpl implements CustomReportService { //data_flicker、data_fluc、data_plt 无 value_type - if (!InfluxDBTableConstant.DATA_FLICKER.equals(data.get(0).getClassId()) && !InfluxDBTableConstant.DATA_FLUC.equals(data.get(0).getClassId()) && !InfluxDBTableConstant.DATA_PLT.equals(data.get(0).getClassId())) { + //if (!"r_stat_data_flicker_d".equals(data.get(0).getResourceId()) && !"r_stat_data_fluc_d".equals(data.get(0).getResourceId()) && !"r_stat_data_plt_d".equals(data.get(0).getResourceId())) { sql.append(InfluxDbSqlConstant.AND) .append(InfluxDBTableConstant.VALUE_TYPE) .append(InfluxDbSqlConstant.EQ) .append(InfluxDbSqlConstant.QM) .append(data.get(0).getStatMethod()) .append(InfluxDbSqlConstant.QM); - } + //} + //频率和频率偏差仅统计T相 if (data.get(0).getTemplateName().equals("freq_dev") || data.get(0).getTemplateName().equals("freq")) { @@ -834,29 +597,28 @@ public class CustomReportServiceImpl implements CustomReportService { .append(InfluxDbSqlConstant.QM); } //时间范围处理 - sql - .append(InfluxDbSqlConstant.AND) + sql.append(InfluxDbSqlConstant.AND) .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDbSqlConstant.START_TIME).append(InfluxDbSqlConstant.QM) .append(InfluxDbSqlConstant.AND) .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.END_TIME).append(InfluxDbSqlConstant.QM); System.out.println(sql); - sql.append(InfluxDbSqlConstant.TZ); if (data.get(0).getTemplateName().equals("freq_dev") || data.get(0).getTemplateName().equals("freq")) { System.out.println(sql); } - List> mapList = influxDbUtils.getMapResult(sql.toString()); + List> mapList = SqlRunner.db().selectList(sql.toString()); if (CollUtil.isEmpty(mapList)) { data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList()); } else { Map map = mapList.get(0); + for (ReportTemplateDTO item : data) { - if (map.containsKey(item.getItemName())) { - double v = (Double) map.get(item.getItemName()); + if (Objects.nonNull(map) && map.containsKey(item.getItemName())) { + double v = Double.parseDouble(map.get(item.getItemName()).toString()); item.setValue(String.format("%.3f", v)); if (overLimitMap.containsKey(item.getLimitName())) { @@ -918,8 +680,7 @@ public class CustomReportServiceImpl implements CustomReportService { } catch (Exception e) { throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); } - //处理查日表还是分钟表 - rangeDate(reportSearchParam); + long temEnd = System.currentTimeMillis(); @@ -941,7 +702,7 @@ public class CustomReportServiceImpl implements CustomReportService { .collect(Collectors.collectingAndThen(Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(ReportTemplateDTO::getItemName))), ArrayList::new)); - Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getClassId)); + Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getResourceId)); Map assNoPassMap = new HashMap<>(); classMap.forEach((classKey, templateValue) -> { Map> valueTypeMap = templateValue.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getStatMethod)); @@ -958,7 +719,7 @@ public class CustomReportServiceImpl implements CustomReportService { } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { - assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); } @@ -1155,14 +916,14 @@ public class CustomReportServiceImpl implements CustomReportService { reportTemplateDTO.setTemplateName(vItem[0]); reportTemplateDTO.setPhase(vItem[1].substring(0, 1)); reportTemplateDTO.setStatMethod(vItem[2].toUpperCase()); - reportTemplateDTO.setClassId(vItem[3]); + 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.setClassId(vItem[2]); + reportTemplateDTO.setResourceId(vItem[2]); reportTemplateDTO.setLimitName(vItem[3]); } @@ -1179,7 +940,7 @@ public class CustomReportServiceImpl implements CustomReportService { //$HA[_25]#B#max#classId$ reportTemplateDTO.setTemplateName(vItem[0]); reportTemplateDTO.setStatMethod(vItem[1].toUpperCase()); - reportTemplateDTO.setClassId(vItem[2]); + reportTemplateDTO.setResourceId(vItem[2]); } reportLimitList.add(reportTemplateDTO); } else if (v.charAt(0) == '&') { @@ -1199,35 +960,7 @@ public class CustomReportServiceImpl implements CustomReportService { } } - /** - * 获取两个时间之间的天数 - * - * @author cdf - * @date 2023/10/20 - */ - private void rangeDate(ReportSearchParam reportSearchParam) { - long a; - DateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); - try { - //开始时间 - Date star = dft.parse(reportSearchParam.getStartTime()); - //结束时间 - Date endDay = dft.parse(reportSearchParam.getEndTime()); - Long starTimes = star.getTime(); - Long endTimes = endDay.getTime(); - long num = endTimes - starTimes;//时间戳相差的毫秒数 - a = num / 24 / 60 / 60 / 1000; - if (a > 5) { - //返回天表 - reportSearchParam.setResourceType(1); - } else { - //返回分钟 - reportSearchParam.setResourceType(0); - } - } catch (ParseException e) { - throw new BusinessException("时间解析出错!" + e.getMessage()); - } - } + /** * @author cdf @@ -1245,7 +978,7 @@ public class CustomReportServiceImpl implements CustomReportService { } } - sql.append(" from ").append(reportLimitList.get(0).getClassId()).append(" where id ='").append(reportSearchParam.getLineId()).append("'"); + sql.append(" from ").append(reportLimitList.get(0).getResourceId()).append(" where id ='").append(reportSearchParam.getLineId()).append("'"); limitMap = excelRptTempMapper.dynamicSqlMap(sql.toString()); for (ReportTemplateDTO item : reportLimitList) { diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/IRUploadReportService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/IRUploadReportService.java new file mode 100644 index 000000000..fb188ad92 --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/IRUploadReportService.java @@ -0,0 +1,17 @@ +package com.njcn.harmonic.service.upload; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.harmonic.pojo.po.upload.RUploadReport; + +/** + *

+ * 电能质量报表上送 服务类 + *

+ * + * @author xy + * @since 2024-08-07 + */ +public interface IRUploadReportService extends IService { + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/impl/RUploadReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/impl/RUploadReportServiceImpl.java new file mode 100644 index 000000000..4c6eba977 --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/upload/impl/RUploadReportServiceImpl.java @@ -0,0 +1,21 @@ +package com.njcn.harmonic.service.upload.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.harmonic.mapper.upload.RUploadReportMapper; +import com.njcn.harmonic.pojo.po.upload.RUploadReport; +import com.njcn.harmonic.service.upload.IRUploadReportService; +import org.springframework.stereotype.Service; + +/** + *

+ * 电能质量报表上送 服务实现类 + *

+ * + * @author xy + * @since 2024-08-07 + */ +@Service +public class RUploadReportServiceImpl extends ServiceImpl implements IRUploadReportService { + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/resources/bootstrap.yml b/pqs-harmonic/harmonic-boot/src/main/resources/bootstrap.yml index 5f3b76d17..074d7b6b8 100644 --- a/pqs-harmonic/harmonic-boot/src/main/resources/bootstrap.yml +++ b/pqs-harmonic/harmonic-boot/src/main/resources/bootstrap.yml @@ -56,6 +56,8 @@ logging: #mybatis配置信息 mybatis-plus: type-aliases-package: com.njcn.harmonic.pojo + global-config: + enable-sql-runner: true mqtt: diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CoustmReportFeignClient.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CustomReportFeignClient.java similarity index 76% rename from pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CoustmReportFeignClient.java rename to pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CustomReportFeignClient.java index 298028f57..715bffd08 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CoustmReportFeignClient.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/CustomReportFeignClient.java @@ -2,7 +2,7 @@ package com.njcn.prepare.harmonic.api.line; import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.response.HttpResult; -import com.njcn.prepare.harmonic.api.line.fallback.CoustomReportFeignClientFallbackFactory; +import com.njcn.prepare.harmonic.api.line.fallback.CustomReportFeignClientFallbackFactory; import com.njcn.prepare.harmonic.pojo.param.LineParam; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -16,9 +16,9 @@ import org.springframework.web.bind.annotation.RequestBody; @FeignClient( value = ServerInfo.PREPARE_BOOT,//对应模块名 path = "/report",//对应controller请求类 - fallbackFactory = CoustomReportFeignClientFallbackFactory.class//服务降级处理类 + fallbackFactory = CustomReportFeignClientFallbackFactory.class//服务降级处理类 ) -public interface CoustmReportFeignClient { +public interface CustomReportFeignClient { /** * 批量处理报表 diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CoustomReportFeignClientFallbackFactory.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CustomReportFeignClientFallbackFactory.java similarity index 83% rename from pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CoustomReportFeignClientFallbackFactory.java rename to pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CustomReportFeignClientFallbackFactory.java index be2b3d8f3..b0700b1f8 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CoustomReportFeignClientFallbackFactory.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/api/line/fallback/CustomReportFeignClientFallbackFactory.java @@ -3,7 +3,7 @@ package com.njcn.prepare.harmonic.api.line.fallback; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; -import com.njcn.prepare.harmonic.api.line.CoustmReportFeignClient; +import com.njcn.prepare.harmonic.api.line.CustomReportFeignClient; import com.njcn.prepare.harmonic.pojo.param.LineParam; import com.njcn.prepare.harmonic.utils.PrepareEnumUtil; import feign.hystrix.FallbackFactory; @@ -20,10 +20,10 @@ import org.springframework.web.bind.annotation.RequestBody; */ @Slf4j @Component -public class CoustomReportFeignClientFallbackFactory implements FallbackFactory { +public class CustomReportFeignClientFallbackFactory implements FallbackFactory { @Override - public CoustmReportFeignClient create(Throwable throwable) { + public CustomReportFeignClient create(Throwable throwable) { Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; if (throwable.getCause() instanceof BusinessException) { BusinessException businessException = (BusinessException)throwable.getCause(); @@ -31,7 +31,7 @@ public class CoustomReportFeignClientFallbackFactory implements FallbackFactory< } Enum finalExceptionEnum = exceptionEnum; - return new CoustmReportFeignClient() { + return new CustomReportFeignClient() { @Override public HttpResult batchReport(@RequestBody LineParam reportParam){ log.error("{}异常,降级处理,异常为:{}", "生成自定义报表: ", throwable.toString()); diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ReportController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ReportController.java index e77828716..f87ae5f8d 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ReportController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/ReportController.java @@ -42,7 +42,7 @@ public class ReportController extends BaseController { @PostMapping("/batchReport") @ApiOperation("批量处理报表") @ApiImplicitParam(name = "reportParam", value = "查询体", required = true) - public HttpResult batchReport(@RequestBody @Validated LineParam reportParam){ + public HttpResult batchReport(@RequestBody LineParam reportParam){ String methodDescribe = getMethodDescribe("batchReport"); reportService.batchReport(reportParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java index 6f5e36cce..1d77fe991 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java @@ -1,30 +1,43 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +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.StrUtil; import cn.hutool.json.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.njcn.common.pojo.constant.BizParamConstant; 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.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.pq.api.DeptLineFeignClient; import com.njcn.device.pq.api.DeviceUnitClient; import com.njcn.device.biz.pojo.po.PqsDeviceUnit; +import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; 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.ExcelRpt; import com.njcn.harmonic.pojo.po.ExcelRptTemp; import com.njcn.harmonic.pojo.po.SysDeptTemp; +import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD; +import com.njcn.harmonic.pojo.vo.ReportTreeVO; +import com.njcn.influx.constant.InfluxDbSqlConstant; import com.njcn.influx.deprecated.InfluxDBSqlConstant; import com.njcn.influx.pojo.constant.InfluxDBTableConstant; import com.njcn.influx.utils.InfluxDbUtils; import com.njcn.oss.constant.OssPath; +import com.njcn.oss.enums.OssResponseEnum; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.prepare.harmonic.constant.AlgorithmParam; import com.njcn.prepare.harmonic.mapper.mysql.line.DeptTempMapper; @@ -36,15 +49,27 @@ import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.EleEpdPqd; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.tomcat.util.http.fileupload.IOUtils; import org.influxdb.dto.QueryResult; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.text.DateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 自定义报表 @@ -57,8 +82,6 @@ import java.util.stream.Collectors; @Slf4j public class ReportServiceImpl implements ReportService { - private final DeptLineFeignClient deptLineFeignClient; - private final InfluxDbUtils influxDbUtils; private final ExcelRptTempMapper excelRptTempMapper; private final ExcelRptMapper excelRptMapper; private final DeptTempMapper deptTempMapper; @@ -66,10 +89,17 @@ public class ReportServiceImpl implements ReportService { private final DeviceUnitClient deviceUnitClient; private final DicDataFeignClient dicDataFeignClient; + private final CommTerminalGeneralClient commTerminalGeneralClient; + private final DeptFeignClient deptFeignClient; + @Override @Async("asyncExecutor") public void batchReport(LineParam reportParam) { + System.out.println("开始执行自定义报表预处理》》》》》》》》》》》》》》"); + TimeInterval timeInterval = new TimeInterval(); + String end = reportParam.getDataDate(); + DateTime dealDate = DateUtil.parse(end, DatePattern.NORM_DATE_PATTERN); //查询所有已激活模板 List reportTemplateList = excelRptTempMapper.getActiveTempList(); @@ -79,70 +109,76 @@ public class ReportServiceImpl implements ReportService { } //有监测点,匹配监测点的数据进行处理 - //无监测点,查询稳态所有监测点 - Map> map = deptLineFeignClient.getLineByDeptRelation(AlgorithmParam.STEADY_STATE).getData(); - + Dept dept = deptFeignClient.getRootDept().getData(); + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + deptGetLineParam.setDeptId(dept.getId()); + List monlitorList = commTerminalGeneralClient.getRunMonitorIds().getData(); //根据content进行处理 - List dataList; JSONArray jsonArray; for (ExcelRptTemp excelRptTemp : reportTemplateList) { + //指标 + List reportTemplateDTOList = new ArrayList<>(); + //限值 + List reportLimitList = new ArrayList<>(); + //台账 + List terminalList = new ArrayList<>(); //获取已绑定的部门信息 - List sysDeptTemps = deptTempMapper.selectList(new LambdaQueryWrapper() - .eq(SysDeptTemp::getTempId, excelRptTemp.getId()) - .eq(SysDeptTemp::getActivation, 1) - ); - List list = new ArrayList<>(); - if (CollUtil.isNotEmpty(sysDeptTemps)) { - //筛选部门下面所包含的监测点 - for (SysDeptTemp sysDeptTemp : sysDeptTemps) { - if (map.containsKey(sysDeptTemp.getDeptId())) { - list.addAll(map.get(sysDeptTemp.getDeptId())); - } - } - } - if (CollUtil.isEmpty(list)) { - continue; - } try (InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) { //获取content解析数据 jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig())); - dataList = getDataList(jsonArray); + + parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); + + } catch (Exception e) { throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); } + //开始组织sql + reportTemplateDTOList = reportTemplateDTOList.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection( + () -> new TreeSet<>(Comparator.comparing(ReportTemplateDTO::getItemName))), ArrayList::new)); + + Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getResourceId)); + + + //处理指标是否合格 + reportLimitList = reportLimitList.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ReportTemplateDTO::getItemName))), ArrayList::new)); + Map limitTargetMapX = reportLimitList.stream().collect(Collectors.toMap(ReportTemplateDTO::getItemName, Function.identity())); + + //查询influxDB数据 - List endList = new ArrayList<>(); - for (String lineId : list) { - //先判断该模板是否是当前监测点部门的 - if (CollUtil.isNotEmpty(dataList)) { - //开始组织sql - dataList.stream().forEach(data -> { - StringBuilder sql = new StringBuilder(InfluxDBSqlConstant.SELECT); - switch (data.getStatMethod()) { - case InfluxDBTableConstant.MAX: - assSql(data, sql, endList, InfluxDBSqlConstant.MAX, lineId, reportParam); - break; - case InfluxDBTableConstant.MIN: - assSql(data, sql, endList, InfluxDBSqlConstant.MIN, lineId, reportParam); - break; - case InfluxDBTableConstant.AVG: - assSql(data, sql, endList, InfluxDBSqlConstant.AVG, lineId, reportParam); - break; - case InfluxDBTableConstant.CP95: - assSql(data, sql, endList, InfluxDBSqlConstant.CP95, lineId, reportParam); - break; - default: - break; - } - }); - } + /* ReportSearchParam reportSearchParamDay = new ReportSearchParam(); + reportSearchParamDay.setStartTime(end); + reportSearchParamDay.setEndTime(end); - //根据数据填充content - if (CollUtil.isNotEmpty(endList)) { - contentChange(jsonArray, endList, lineId); - } + ReportSearchParam reportSearchParamMonth = new ReportSearchParam(); + DateTime beginMonth = DateUtil.beginOfMonth(dealDate); + reportSearchParamMonth.setStartTime(DateUtil.format(beginMonth, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamMonth.setEndTime(end); + + ReportSearchParam reportSearchParamQuarter = new ReportSearchParam(); + DateTime beginQuarter = DateUtil.beginOfQuarter(dealDate); + reportSearchParamQuarter.setStartTime(DateUtil.format(beginQuarter, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamQuarter.setEndTime(end); + + ReportSearchParam reportSearchParamYear = new ReportSearchParam(); + DateTime beginYear = DateUtil.beginOfYear(dealDate); + reportSearchParamYear.setStartTime(DateUtil.format(beginYear, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamYear.setEndTime(end);*/ + + + List> partition = ListUtils.partition(monlitorList, 1); + + + for(int i=0;i<2;i++){ + //for (List splitList : partition) { + + + //处理台账信息 + duoxiancheng(partition.get(i), terminalList, reportLimitList, classMap, limitTargetMapX, jsonArray,end,dealDate); //存入报表库 //年:例如2022年,传入2022-01-01进行匹配,有则更新无则插入 @@ -151,15 +187,213 @@ public class ReportServiceImpl implements ReportService { //周:例如2022年第五周,传入2022-01-23(周一)进行匹配,有则更新无则插入 //日:直接插入,无需配对 //文件上传到文件服务器,存入文件名 - if (BizParamConstant.STAT_BIZ_DAY.equals(reportParam.getType().toString())) { + /* if (BizParamConstant.STAT_BIZ_DAY.equals(reportParam.getType().toString())) { rptInsert(reportParam, lineId, excelRptTemp, contentToOss(jsonArray.toString())); } else { rptBiz(reportParam, lineId, excelRptTemp, contentToOss(jsonArray.toString())); - } + }*/ + + + } + + + } + + + System.out.println("该方法一共执行了 "+timeInterval.intervalSecond()+" S..................................."); + } + + @Async("asyncExecutor") + public void duoxiancheng(List splitList, List terminalList, List reportLimitList, + Map> classMap, + Map limitTargetMapX, JSONArray jsonArray,String end,DateTime dealDate) { + + ReportSearchParam reportSearchParamDay = new ReportSearchParam(); + reportSearchParamDay.setStartTime(end); + reportSearchParamDay.setEndTime(end); + + ReportSearchParam reportSearchParamMonth = new ReportSearchParam(); + DateTime beginMonth = DateUtil.beginOfMonth(dealDate); + reportSearchParamMonth.setStartTime(DateUtil.format(beginMonth, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamMonth.setEndTime(end); + + ReportSearchParam reportSearchParamQuarter = new ReportSearchParam(); + DateTime beginQuarter = DateUtil.beginOfQuarter(dealDate); + reportSearchParamQuarter.setStartTime(DateUtil.format(beginQuarter, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamQuarter.setEndTime(end); + + ReportSearchParam reportSearchParamYear = new ReportSearchParam(); + DateTime beginYear = DateUtil.beginOfYear(dealDate); + reportSearchParamYear.setStartTime(DateUtil.format(beginYear, DatePattern.NORM_DATE_PATTERN)); + reportSearchParamYear.setEndTime(end); + for (String lineId : splitList) { + + List endList = new ArrayList<>(); + + TimeInterval neibu = new TimeInterval(); + //处理台账信息 + Map terminalMap = new HashMap<>(); + if (CollUtil.isNotEmpty(terminalList)) { + terminalMap = commTerminalGeneralClient.getCustomDetailByLineId(lineId).getData(); } + + //执行日数据 + reportSearchParamDay.setLineId(lineId); + dealReportData(reportLimitList, reportSearchParamDay, classMap, endList, limitTargetMapX, jsonArray, terminalMap); + + //执行月数据 + reportSearchParamMonth.setLineId(lineId); + dealReportData(reportLimitList, reportSearchParamMonth, classMap, endList, limitTargetMapX, jsonArray, terminalMap); + + //执行季度数据 + reportSearchParamQuarter.setLineId(lineId); + dealReportData(reportLimitList, reportSearchParamQuarter, classMap, endList, limitTargetMapX, jsonArray, terminalMap); + + //执行年数据 + reportSearchParamYear.setLineId(lineId); + dealReportData(reportLimitList, reportSearchParamYear, classMap, endList, limitTargetMapX, jsonArray, terminalMap); + + + System.out.println(Thread.currentThread().getName()+"线程————" + lineId+"------" + neibu.intervalSecond() + " s"); + + } } + + /** + * 处理数据 + */ + + public void dealReportData(List reportLimitList, ReportSearchParam reportSearchParam, + Map> classMap, List endList, + Map limitTargetMapX, JSONArray jsonArray, Map terminalMap) { + Map assNoPassMap = new HashMap<>(); + Map limitMap = overLimitDeal(reportLimitList, reportSearchParam.getLineId()); + //存放限值指标的map + + classMap.forEach((classKey, templateValue) -> { + Map> valueTypeMap = templateValue.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getStatMethod)); + //avg.max,min,cp95 + valueTypeMap.forEach((valueTypeKey, valueTypeVal) -> { + //相别分组 + Map> phaseMap = valueTypeVal.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getPhase)); + phaseMap.forEach((phaseKey, phaseVal) -> { + StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); + if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } + }); + }); + + }); + + + //处理合格率 + 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); + }); + + if (CollUtil.isNotEmpty(endList)) { + //数据单位信息 + Map unit = unitMap(reportSearchParam.getLineId()); + //进行反向赋值到模板 + //1、根据itemName分组 + Map> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName)); + + + //2、把itemName的value赋给v和m + + 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 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 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(terminalMap)) { + if ("statis_time".equals(tem)) { + son.set("v", reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + InfluxDbSqlConstant.END_TIME); + } else { + //台账信息 + son.set("v", terminalMap.getOrDefault(tem, "/")); + } + } + } + //解决数据单位问题 @指标#类型@ + if (v.charAt(0) == '@' && v.contains("#")) { + String replace = v.replace("@", ""); + son.set("v", unit.getOrDefault(replace, "/")); + + } + } + } + }); + }); + } + } + + /** * rpt业务方法 * @@ -249,54 +483,56 @@ public class ReportServiceImpl implements ReportService { }); } - /** - * 获取content解析数据 - * - * @param jsonArray 参数 - * @return 结果 - */ - private List getDataList(JSONArray jsonArray) { - List reportTemplateDTOList = new ArrayList<>(); - 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 == 4) { - //$HA[_25]#B#max#classId$ - reportTemplateDTO.setTemplateName(vItem[0]); - reportTemplateDTO.setPhase(vItem[1]); - reportTemplateDTO.setStatMethod(vItem[2].toUpperCase()); - reportTemplateDTO.setClassId(vItem[3]); - } else if (vItem.length == 3) { - //$HA[_25]#max#classId$ - reportTemplateDTO.setTemplateName(vItem[0]); - reportTemplateDTO.setPhase("M"); - reportTemplateDTO.setStatMethod(vItem[1].toUpperCase()); - reportTemplateDTO.setClassId(vItem[2]); - } - reportTemplateDTOList.add(reportTemplateDTO); - } - } - } - }); + /*组装相别*/ + private void assPhase(List value, ReportTreeVO reportTreeItem, String key) { + List phaseTree = new ArrayList<>(); + value.forEach(item -> { + if (Objects.nonNull(item.getPhase()) && !"M".equals(item.getPhase())) { + List statTree = new ArrayList<>(); + ReportTreeVO reportTreePhase = new ReportTreeVO(); + reportTreePhase.setName(item.getPhase()); + reportTreePhase.setShowName(item.getPhase()); + + assStatMethod(item, statTree, key, item.getPhase()); + reportTreePhase.setChildren(statTree); + phaseTree.add(reportTreePhase); + reportTreeItem.setChildren(phaseTree); + + } else { + List statTree = new ArrayList<>(); + assStatMethod(item, statTree, key, ""); + reportTreeItem.setChildren(statTree); + } }); - return reportTemplateDTOList; + } + + + private void assStatMethod(EleEpdPqd item, List statTree, String oneKey, String twoKey) { + //存在向别为M但是Stat_Method不为空 + if (StrUtil.isNotBlank(item.getStatMethod())) { + String[] arr = item.getStatMethod().split(","); + List stat = Stream.of(arr).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(stat)) { + stat.forEach(statItem -> { + ReportTreeVO reportTreeStat = new ReportTreeVO(); + String tem = ""; + if (Objects.nonNull(item.getLimitName())) { + tem = "#" + item.getLimitName(); + } else { + tem = "#NO"; + } + if (StrUtil.isNotBlank(twoKey)) { + reportTreeStat.setName("$" + oneKey + "#" + twoKey + "#" + statItem + "#" + item.getResourcesId().trim() + tem.trim() + "$"); + } else { + reportTreeStat.setName("$" + oneKey + "#" + statItem + "#" + item.getResourcesId().trim() + tem.trim() + "$"); + } + + reportTreeStat.setShowName(statItem); + statTree.add(reportTreeStat); + }); + } + } } /** @@ -306,9 +542,9 @@ public class ReportServiceImpl implements ReportService { * @return */ private Map unitMap(String lineID) { - PqsDeviceUnit deviceUnit = deviceUnitClient.lineUnitDetail(lineID).getData(); - Map unit = new HashMap<>(); + PqsDeviceUnit deviceUnit = commTerminalGeneralClient.lineUnitDetail(lineID).getData(); List dictData = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEVICE_UNIT.getCode()).getData(); + Map unit = new HashMap<>(); List list = dictData.stream().map(DictData::getCode).collect(Collectors.toList()); for (String s : list) { //有效值 @@ -356,88 +592,488 @@ public class ReportServiceImpl implements ReportService { return unit; } + /** - * 组装influxDB查询sql,查询value并封装endlist - * - * @param data,sql,endList,method,reportSearchParam 参数 - * @param reportParam - * @return 结果 + * @param data 同类型的cell模板 + * @param sql 单个cell模板 + * @param endList 用于返回最终组装好的数据,类似data + * @param limitMap 指标是否合格模板 + * @param assNoPassMap 用于存储不合格的指标 + * @date 2023/10/20 */ - private void assSql(ReportTemplateDTO data, StringBuilder sql, List endList, String method, String lineId, LineParam reportParam) { + private void assSql(List data, StringBuilder sql, List endList, String method, ReportSearchParam reportSearchParam, Map limitMap, Map overLimitMap, Map assNoPassMap) { //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.CP95.equals(method)) { - sql.append(method).append(InfluxDBSqlConstant.LBK).append(data.getTemplateName()).append(InfluxDBSqlConstant.NUM_95).append(InfluxDBSqlConstant.RBK).append(InfluxDBSqlConstant.AS_VALUE); + if (InfluxDbSqlConstant.PERCENTILE.equals(method)) { + + for (int i = 0; i < data.size(); i++) { + if (i == data.size() - 1) { + sql.append("MAX") + .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("MAX") + .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); + } + } + } else { - sql.append(method).append(InfluxDBSqlConstant.LBK).append(data.getTemplateName()).append(InfluxDBSqlConstant.RBK).append(InfluxDBSqlConstant.AS_VALUE); + + 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(InfluxDBSqlConstant.FROM).append(data.getClassId()).append(InfluxDBSqlConstant.WHERE).append(InfluxDBTableConstant.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(lineId).append(InfluxDBSqlConstant.QM); + + sql.append(StrPool.C_SPACE) + .append(InfluxDbSqlConstant.FROM) + .append(data.get(0).getResourceId()); + + + sql.append(InfluxDbSqlConstant.WHERE) + .append(InfluxDBTableConstant.LINE_ID) + .append(InfluxDbSqlConstant.EQ) + .append(InfluxDbSqlConstant.QM) + .append(reportSearchParam.getLineId()) + .append(InfluxDbSqlConstant.QM); //相别特殊处理 - if (!InfluxDBTableConstant.NO_PHASE.equals(data.getPhase())) { - sql.append(InfluxDBSqlConstant.AND).append(InfluxDBTableConstant.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(data.getPhase()).append(InfluxDBSqlConstant.QM); + if (!InfluxDBTableConstant.NO_PHASE.equals(data.get(0).getPhase())) { + sql.append(InfluxDbSqlConstant.AND) + .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 - if (!InfluxDBTableConstant.DATA_FLICKER.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_FLUC.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_PLT.equals(data.getClassId())) { - sql.append(InfluxDBSqlConstant.AND).append(InfluxDBTableConstant.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(data.getStatMethod()).append(InfluxDBSqlConstant.QM); - } - String startTime; - String endTime; - DateTime dateTime = new DateTime(reportParam.getDataDate(), DatePattern.NORM_DATE_PATTERN); - //时间范围需要处理下 - switch (reportParam.getType()) { - case 1: - startTime = DateUtil.beginOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - endTime = DateUtil.endOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - break; - case 2: - startTime = DateUtil.beginOfQuarter(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - endTime = DateUtil.endOfQuarter(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - break; - case 3: - startTime = DateUtil.beginOfMonth(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - endTime = DateUtil.endOfMonth(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - break; - case 4: - startTime = DateUtil.beginOfWeek(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - endTime = DateUtil.endOfWeek(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - break; - default: - startTime = DateUtil.beginOfDay(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - endTime = DateUtil.endOfDay(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN); - break; - } - sql - .append(InfluxDBSqlConstant.AND) - .append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(startTime).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND) - .append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.LT).append(InfluxDBSqlConstant.QM).append(endTime).append(InfluxDBSqlConstant.QM); + //if (!"r_stat_data_flicker_d".equals(data.get(0).getResourceId()) && !"r_stat_data_fluc_d".equals(data.get(0).getResourceId()) && !"r_stat_data_plt_d".equals(data.get(0).getResourceId())) { + sql.append(InfluxDbSqlConstant.AND) + .append(InfluxDBTableConstant.VALUE_TYPE) + .append(InfluxDbSqlConstant.EQ) + .append(InfluxDbSqlConstant.QM) + .append(data.get(0).getStatMethod()) + .append(InfluxDbSqlConstant.QM); + //} - sql.append(InfluxDBSqlConstant.TZ); - //根据不同的库表赋值 - QueryResult queryResult = influxDbUtils.query(String.valueOf(sql)); - //剖析influx数据,填入value - List results = queryResult.getResults(); - if (results.size() != 0) { - QueryResult.Result result = results.get(0); - if (result.getSeries() != null) { - List seriess = result.getSeries(); - if (seriess.size() != 0) { - QueryResult.Series series = seriess.get(0); - List columns = series.getColumns(); - List> values = series.getValues(); - for (List columnValue : values) { - for (int i = 0; i < columnValue.size(); i++) { - if (columns.get(i).equals("value")) { - data.setValue(String.format("%.3f", columnValue.get(i))); + //频率和频率偏差仅统计T相 + if (data.get(0).getTemplateName().equals("freq_dev") || data.get(0).getTemplateName().equals("freq")) { + sql.append(InfluxDbSqlConstant.AND) + .append(InfluxDBTableConstant.PHASIC_TYPE) + .append(InfluxDbSqlConstant.EQ) + .append(InfluxDbSqlConstant.QM) + .append(InfluxDBTableConstant.PHASE_TYPE_T) + .append(InfluxDbSqlConstant.QM); + } + //时间范围处理 + sql.append(InfluxDbSqlConstant.AND) + .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDbSqlConstant.QM) + .append(InfluxDbSqlConstant.AND) + .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.QM); + + System.out.println(sql); + + + if (data.get(0).getTemplateName().equals("freq_dev") || data.get(0).getTemplateName().equals("freq")) { + System.out.println(sql); + } + + List> mapList = SqlRunner.db().selectList(sql.toString()); + if (CollUtil.isEmpty(mapList)) { + data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList()); + } else { + Map map = mapList.get(0); + + + for (ReportTemplateDTO item : data) { + if (Objects.nonNull(map) && map.containsKey(item.getItemName())) { + double v = Double.parseDouble(map.get(item.getItemName()).toString()); + item.setValue(String.format("%.3f", v)); + + if (overLimitMap.containsKey(item.getLimitName())) { + Float tagVal = Float.parseFloat(overLimitMap.get(item.getLimitName()).toString()); + if (v > tagVal) { + item.setOverLimitFlag(1); + } else { + item.setOverLimitFlag(0); + } + } + + //判断是否越限 + if (limitMap.size() != 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); + + assNoPassMap.put(key, tem); + } else if (!assNoPassMap.containsKey(key)) { + tem.setOverLimitFlag(0); + assNoPassMap.put(key, tem); } } } + } else { + item.setValue("/"); } } } - endList.add(data); + endList.addAll(data); + } + + /** + * 处理 + * + * @author cdf + * @date 2023/10/8 + */ + + /* private void analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp) { + + long begin = System.currentTimeMillis(); + + //根据content,获取v值并进行处理 + //指标 + List reportTemplateDTOList = new ArrayList<>(); + //限值 + List reportLimitList = new ArrayList<>(); + //台账 + List 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) { + throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); + } + long temEnd = System.currentTimeMillis(); + + + //处理指标是否合格 + reportLimitList = reportLimitList.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ReportTemplateDTO::getItemName))), ArrayList::new)); + + Map limitMap = overLimitDeal(reportLimitList, reportSearchParam); + //存放限值指标的map + Map limitTargetMapX = reportLimitList.stream().collect(Collectors.toMap(ReportTemplateDTO::getItemName, Function.identity())); + + List endList = new ArrayList<>(); + if (CollUtil.isNotEmpty(reportTemplateDTOList)) { + long deal = System.currentTimeMillis(); + + //开始组织sql + reportTemplateDTOList = reportTemplateDTOList.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection( + () -> new TreeSet<>(Comparator.comparing(ReportTemplateDTO::getItemName))), ArrayList::new)); + + Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getResourceId)); + Map assNoPassMap = new HashMap<>(); + classMap.forEach((classKey, templateValue) -> { + Map> valueTypeMap = templateValue.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getStatMethod)); + + //avg.max,min,cp95 + valueTypeMap.forEach((valueTypeKey, valueTypeVal) -> { + + //相别分组 + Map> phaseMap = valueTypeVal.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getPhase)); + phaseMap.forEach((phaseKey, phaseVal) -> { + StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); + if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { + assSql(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } + }); + }); + + }); + + //处理合格率 + 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); + }); + + long dealEnd = System.currentTimeMillis(); + System.out.println("模板解析时间:" + (temEnd - begin) / 1000 + "S"); + System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S"); + } + + + if (CollUtil.isNotEmpty(endList)) { + long jie = System.currentTimeMillis(); + //数据单位信息 + Map unit = unitMap(reportSearchParam.getLineId()); + //进行反向赋值到模板 + //1、根据itemName分组 + Map> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName)); + //处理台账信息 + Map terminalMap = null; + if (CollUtil.isNotEmpty(terminalList)) { + terminalMap = commTerminalGeneralClient.getCustomDetailByLineId(reportSearchParam.getLineId()).getData(); + } + Map finalTerminalMap = terminalMap; + + + //2、把itemName的value赋给v和m + + 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 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 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, "/")); + } + } + } + //解决数据单位问题 @指标#类型@ + if (v.charAt(0) == '@' && v.contains("#")) { + String replace = v.replace("@", ""); + son.set("v", unit.getOrDefault(replace, "/")); + + } + } + } + }); + }); + long jieEnd = System.currentTimeMillis(); + + System.out.println("组装信息耗时 " + (jieEnd - jie) / 1000 + "S"); + } + + + long daochu = System.currentTimeMillis(); + + InputStream reportStream = IoUtil.toStream(jsonArray.toString(), CharsetUtil.UTF_8); + //String newContent = fileStorageUtil.uploadStream(reportStream, OssPath.HARMONIC_EXCEL_REPORT, FileUtil.generateFileName("json")); + + //response.setContentType("application/octet-stream;charset=UTF-8"); + //response.setHeader("Content-Disposition", "attachment;filename=" + "aa"); + //入库前判断是否有了,有了就更新 + *//* ExcelRpt excelRpt = new ExcelRpt(); + excelRpt.setName(excelRptTemp.getName()); + excelRpt.setLineId(reportSearchParam.getLineId()); + excelRpt.setDataDate(DateUtil.parse(reportSearchParam.getStartTime())); + excelRpt.setTempId(excelRptTemp.getId()); + excelRpt.setContent(newContent); + excelRpt.setType(reportSearchParam.getType()); + excelRpt.setState(DataStateEnum.ENABLE.getCode()); + + excelRptMapper.insert(excelRpt);*//* + *//* OutputStream toClient = null; + try { + toClient = new BufferedOutputStream(response.getOutputStream()); + //通过IOUtils对接输入输出流,实现文件下载 + IOUtils.copy(reportStream, toClient); + toClient.flush(); + } catch (Exception e) { + throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); + } finally { + IOUtils.closeQuietly(reportStream); + IOUtils.closeQuietly(toClient); + long daochuEnd = System.currentTimeMillis(); + + System.out.println("导出耗时 " + (daochuEnd - daochu) / 1000 + "S"); + }*//* + + }*/ + + /** + * 解析模板 + * + * @author cdf + * @date 2023/10/20 + */ + private void parseTemplate(JSONArray jsonArray, List reportTemplateDTOList, List reportLimitList, List 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].substring(0, 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); + } + } + + + /** + * @author cdf + * @date 2023/10/23 + */ + private Map overLimitDeal(List reportLimitList, String monitorId) { + Map 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).getResourceId()).append(" where id ='").append(monitorId).append("'"); + limitMap = SqlRunner.db().selectOne(sql.toString()); + + for (ReportTemplateDTO item : reportLimitList) { + if (limitMap.containsKey(item.getTemplateName())) { + item.setValue(limitMap.get(item.getTemplateName()).toString()); + } + } + } + return limitMap; } diff --git a/pqs-prepare/prepare-boot/src/main/resources/bootstrap.yml b/pqs-prepare/prepare-boot/src/main/resources/bootstrap.yml index 38fac3d61..ef14f7b84 100644 --- a/pqs-prepare/prepare-boot/src/main/resources/bootstrap.yml +++ b/pqs-prepare/prepare-boot/src/main/resources/bootstrap.yml @@ -49,13 +49,14 @@ liteflow: logging: config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml level: - root: info + root: error ##mybatis配置信息 mybatis-plus: #别名扫描 type-aliases-package: com.njcn.prepare.harmonic.pojo - + global-config: + enable-sql-runner: true mqtt: client-id: @artifactId@${random.value} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AuditController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AuditController.java index 775eb6ad5..f7500efba 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AuditController.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AuditController.java @@ -89,9 +89,14 @@ public class AuditController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + /** + * 这个接口有毒,千万被调用 + * @return + */ @OperateInfo(info = LogEnum.SYSTEM_COMMON) @PostMapping("/saveLogParam") @ApiOperation("筛选下拉列表参数") + @Deprecated public HttpResult saveLogParam() { String methodDescribe = getMethodDescribe("saveLogParam"); LogParamVO result = auditService.saveLogParam(); diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/report/CustomReportRunner.java b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/report/CustomReportRunner.java new file mode 100644 index 000000000..177015e73 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/report/CustomReportRunner.java @@ -0,0 +1,38 @@ +package com.njcn.system.timer.tasks.report; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.njcn.harmonic.api.ReportFeignClient; +import com.njcn.prepare.harmonic.api.line.CustomReportFeignClient; +import com.njcn.prepare.harmonic.pojo.param.LineParam; +import com.njcn.system.timer.TimerTaskRunner; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 自定义报表预处理 + */ +@Component +@RequiredArgsConstructor +@Slf4j +public class CustomReportRunner implements TimerTaskRunner { + + private final CustomReportFeignClient customReportFeignClient; + + + @Override + public void action(String date) { + LineParam lineParam = new LineParam(); + if(StrUtil.isNotBlank(date)){ + lineParam.setDataDate(date); + }else { + DateTime dealDate = DateUtil.yesterday(); + String end = DateUtil.format(dealDate, DatePattern.NORM_DATE_PATTERN); + lineParam.setDataDate(end); + } + customReportFeignClient.batchReport(lineParam); + } +}