From a6f9e30d548c31b722bb3c7a6054991812e60d30 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Mon, 12 Aug 2024 20:14:21 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml index ef0a873b6..b1e558a3a 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml @@ -471,7 +471,7 @@ ) ) AS allOvertime FROM - `r_stat_limit_rate_d` + `r_stat_limit_target_d` and time_id between #{startTime} and #{endTime} 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 2/8] =?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); + } +} From 1f18c71eb74558b4d5708eae06bdc360432832b2 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Tue, 13 Aug 2024 10:45:59 +0800 Subject: [PATCH 3/8] =?UTF-8?q?1.pms=E4=B8=8A=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common-web/src/main/java/com/njcn/web/enums/GWSendEnum.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pqs-common/common-web/src/main/java/com/njcn/web/enums/GWSendEnum.java b/pqs-common/common-web/src/main/java/com/njcn/web/enums/GWSendEnum.java index 8fbe08e18..76b40aec2 100644 --- a/pqs-common/common-web/src/main/java/com/njcn/web/enums/GWSendEnum.java +++ b/pqs-common/common-web/src/main/java/com/njcn/web/enums/GWSendEnum.java @@ -42,6 +42,8 @@ public enum GWSendEnum { WORK_ORDER_FEEDBACK("workOrderFeedBack", "/pms-ghq-powerquality-start/powerQuality/workOrder/receiveFeedbackInfo"), PARK_AND_STATION("parkAndStation", "/pms-ghq-powerquality-start/powerQuality/park/create"), + + REPORT_CREATE("reportCreate", "/pms-ghq-powerquality-start/powerQuality/report/create"), ; From a492609b360b3f9f58280728d553a6b7cec89985 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Tue, 13 Aug 2024 11:18:41 +0800 Subject: [PATCH 4/8] =?UTF-8?q?1.=E5=8E=BB=E9=99=A4influxdb=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=AF=8F=E6=97=A5=E6=97=A5=E8=A1=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql/Impl/line/DayDataServiceImpl.java | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/DayDataServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/DayDataServiceImpl.java index 077ffd7bf..3c681ab87 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/DayDataServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/DayDataServiceImpl.java @@ -635,7 +635,7 @@ public class DayDataServiceImpl implements DayDataService { List dataPltPOList = new ArrayList<>(); List dataFlickerPOList = new ArrayList<>(); //day表 - List dayVList = new ArrayList<>(); + /* List dayVList = new ArrayList<>(); List dayIList = new ArrayList<>(); List dayFlickerList = new ArrayList<>(); List dayFlucList = new ArrayList<>(); @@ -648,7 +648,7 @@ public class DayDataServiceImpl implements DayDataService { List dayHarmRateIList = new ArrayList<>(); List dayInHarmIList = new ArrayList<>(); List dayInHarmVList = new ArrayList<>(); - List dayPltList = new ArrayList<>(); + List dayPltList = new ArrayList<>();*/ List lineIds = calculatedParam.getIdList(); //河北数据量较大,以尺寸20分片 @@ -713,13 +713,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER)); po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataVPOList.add(po1); - DayV dayV = new DayV(); + /* DayV dayV = new DayV(); BeanUtils.copyProperties(item, dayV); dayV.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayVList.add(dayV); + dayVList.add(dayV);*/ } statDataVDService.insert(dataVPOList); - dayVMapper.insertBatch(dayVList); + // dayVMapper.insertBatch(dayVList); } //dataI数据入库 if (!CollectionUtils.isEmpty(list2)) { @@ -729,13 +729,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER)); po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataIPOList.add(po1); - DayI dayI = new DayI(); + /* DayI dayI = new DayI(); BeanUtils.copyProperties(item, dayI); dayI.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayIList.add(dayI); + dayIList.add(dayI);*/ } statDataIDService.insert(dataIPOList); - dayIMapper.insertBatch(dayIList); + //dayIMapper.insertBatch(dayIList); } //dataFlicker数据入库 if (!CollectionUtils.isEmpty(list3)) { @@ -746,13 +746,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataFlickerPOList.add(po1); - DayFlicker dayFlicker = new DayFlicker(); + /* DayFlicker dayFlicker = new DayFlicker(); BeanUtils.copyProperties(item, dayFlicker); dayFlicker.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayFlickerList.add(dayFlicker); + dayFlickerList.add(dayFlicker);*/ } statDataFlickerDService.insert(dataFlickerPOList); - dayFlickerMapper.insertBatch(dayFlickerList); + //dayFlickerMapper.insertBatch(dayFlickerList); } //dataFluc数据入库 if (!CollectionUtils.isEmpty(list4)) { @@ -763,13 +763,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataFlucPOList.add(po1); - DayFluc dayFluc = new DayFluc(); + /* DayFluc dayFluc = new DayFluc(); BeanUtils.copyProperties(item, dayFluc); dayFluc.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayFlucList.add(dayFluc); + dayFlucList.add(dayFluc);*/ } statDataFlucDService.insert(dataFlucPOList); - dayFlucMapper.insertBatch(dayFlucList); + //dayFlucMapper.insertBatch(dayFlucList); } //data_harmphasic_i数据入库 if (!CollectionUtils.isEmpty(list5)) { @@ -780,13 +780,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmPhasicIPOList.add(po1); - DayHarmPhasicI dayHarmPhasicI = new DayHarmPhasicI(); + /* DayHarmPhasicI dayHarmPhasicI = new DayHarmPhasicI(); BeanUtils.copyProperties(item, dayHarmPhasicI); dayHarmPhasicI.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmPhasicIList.add(dayHarmPhasicI); + dayHarmPhasicIList.add(dayHarmPhasicI);*/ } statDataHarmphasicIDService.insert(dataHarmPhasicIPOList); - dayHarmPhasicIMapper.insertBatch(dayHarmPhasicIList); + //dayHarmPhasicIMapper.insertBatch(dayHarmPhasicIList); } //data_harmphasic_v数据入库 if (!CollectionUtils.isEmpty(list6)) { @@ -797,13 +797,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmPhasicVPOList.add(po1); - DayHarmPhasicV dayHarmPhasicV = new DayHarmPhasicV(); + /* DayHarmPhasicV dayHarmPhasicV = new DayHarmPhasicV(); BeanUtils.copyProperties(item, dayHarmPhasicV); dayHarmPhasicV.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmPhasicVList.add(dayHarmPhasicV); + dayHarmPhasicVList.add(dayHarmPhasicV);*/ } statDataHarmphasicVDService.insert(dataHarmPhasicVPOList); - dayHarmPhasicVMapper.insertBatch(dayHarmPhasicVList); + //dayHarmPhasicVMapper.insertBatch(dayHarmPhasicVList); } //data_harmpower_p数据入库 if (!CollectionUtils.isEmpty(list7)) { @@ -814,13 +814,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmPowerPPOList.add(po1); - DayHarmPowerP dayHarmPowerP = new DayHarmPowerP(); + /* DayHarmPowerP dayHarmPowerP = new DayHarmPowerP(); BeanUtils.copyProperties(item, dayHarmPowerP); dayHarmPowerP.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmPowerPList.add(dayHarmPowerP); + dayHarmPowerPList.add(dayHarmPowerP);*/ } statDataHarmpowerPDService.insert(dataHarmPowerPPOList); - dayHarmPowerPMapper.insertBatch(dayHarmPowerPList); + //dayHarmPowerPMapper.insertBatch(dayHarmPowerPList); } //data_harmpower_q数据入库 if (!CollectionUtils.isEmpty(list8)) { @@ -831,13 +831,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmPowerQPOList.add(po1); - DayHarmPowerQ dayHarmPowerQ = new DayHarmPowerQ(); + /* DayHarmPowerQ dayHarmPowerQ = new DayHarmPowerQ(); BeanUtils.copyProperties(item, dayHarmPowerQ); dayHarmPowerQ.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmPowerQList.add(dayHarmPowerQ); + dayHarmPowerQList.add(dayHarmPowerQ);*/ } statDataHarmpowerQDService.insert(dataHarmPowerQPOList); - dayHarmPowerQMapper.insertBatch(dayHarmPowerQList); + //dayHarmPowerQMapper.insertBatch(dayHarmPowerQList); } //data_harmpower_s数据入库 if (!CollectionUtils.isEmpty(list9)) { @@ -848,13 +848,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmPowerSPOList.add(po1); - DayHarmPowerS dayHarmPowerS = new DayHarmPowerS(); + /* DayHarmPowerS dayHarmPowerS = new DayHarmPowerS(); BeanUtils.copyProperties(item, dayHarmPowerS); dayHarmPowerS.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmPowerSList.add(dayHarmPowerS); + dayHarmPowerSList.add(dayHarmPowerS);*/ } statDataHarmpowerSDService.insert(dataHarmPowerSPOList); - dayHarmPowerSMapper.insertBatch(dayHarmPowerSList); + //dayHarmPowerSMapper.insertBatch(dayHarmPowerSList); } //data_harmrate_i数据入库 if (!CollectionUtils.isEmpty(list10)) { @@ -865,13 +865,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmRateIPOList.add(po1); - DayHarmRateI dayHarmRateI = new DayHarmRateI(); + /* DayHarmRateI dayHarmRateI = new DayHarmRateI(); BeanUtils.copyProperties(item, dayHarmRateI); dayHarmRateI.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmRateIList.add(dayHarmRateI); + dayHarmRateIList.add(dayHarmRateI);*/ } statDataHarmRateIDService.insert(dataHarmRateIPOList); - dayHarmRateIMapper.insertBatch(dayHarmRateIList); + //dayHarmRateIMapper.insertBatch(dayHarmRateIList); } //data_harmrate_v数据入库 if (!CollectionUtils.isEmpty(list11)) { @@ -882,13 +882,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataHarmRateVPOList.add(po1); - DayHarmRateV dayHarmRateV = new DayHarmRateV(); + /* DayHarmRateV dayHarmRateV = new DayHarmRateV(); BeanUtils.copyProperties(item, dayHarmRateV); dayHarmRateV.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayHarmRateVList.add(dayHarmRateV); + dayHarmRateVList.add(dayHarmRateV);*/ } statDataHarmRateVDService.insert(dataHarmRateVPOList); - dayHarmRateVMapper.insertBatch(dayHarmRateVList); + //dayHarmRateVMapper.insertBatch(dayHarmRateVList); } //data_inharm_i数据入库 if (!CollectionUtils.isEmpty(list12)) { @@ -899,13 +899,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataInHarmIPOList.add(po1); - DayInHarmI dayInHarmI = new DayInHarmI(); + /* DayInHarmI dayInHarmI = new DayInHarmI(); BeanUtils.copyProperties(item, dayInHarmI); dayInHarmI.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayInHarmIList.add(dayInHarmI); + dayInHarmIList.add(dayInHarmI);*/ } statDataInharmIDService.insert(dataInHarmIPOList); - dayInHarmIMapper.insertBatch(dayInHarmIList); + //dayInHarmIMapper.insertBatch(dayInHarmIList); } //data_inharm_v数据入库 if (!CollectionUtils.isEmpty(list13)) { @@ -916,13 +916,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataInHarmVPOList.add(po1); - DayInHarmV dayInHarmV = new DayInHarmV(); + /* DayInHarmV dayInHarmV = new DayInHarmV(); BeanUtils.copyProperties(item, dayInHarmV); dayInHarmV.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayInHarmVList.add(dayInHarmV); + dayInHarmVList.add(dayInHarmV);*/ } statDataInharmVDService.insert(dataInHarmVPOList); - dayInHarmVMapper.insertBatch(dayInHarmVList); + //dayInHarmVMapper.insertBatch(dayInHarmVList); } //data_plt数据入库 if (!CollectionUtils.isEmpty(list16)) { @@ -933,13 +933,13 @@ public class DayDataServiceImpl implements DayDataService { po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); dataPltPOList.add(po1); - DayPlt dayPlt = new DayPlt(); + /* DayPlt dayPlt = new DayPlt(); BeanUtils.copyProperties(item, dayPlt); dayPlt.setTime(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER).toInstant()); - dayPltList.add(dayPlt); + dayPltList.add(dayPlt);*/ } statDataPltDService.insert(dataPltPOList); - dayPltMapper.insertBatch(dayPltList); + //dayPltMapper.insertBatch(dayPltList); } } From 7c943244b310c69af11cf67c2c243eecf73af35e Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 14 Aug 2024 08:50:20 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/njcn/oss/constant/OssPath.java | 5 +++++ .../java/com/njcn/user/service/impl/UserServiceImpl.java | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java index 34b734dde..6762ae20c 100644 --- a/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java +++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java @@ -136,4 +136,9 @@ public interface OssPath { */ String ONLINE_REPORT="onlineReport/"; + /** + * 系统上传文件至装置内,文件存储路径 + */ + String SYSTEM_TO_DEV="systemToDev/"; + } diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java index dd691a317..034904582 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java @@ -290,9 +290,11 @@ public class UserServiceImpl extends ServiceImpl implements IU //fixme 存在web用户和App用户,目前先通过管理员的登录名来区分开 } else if (Objects.equals(UserType.ADMINISTRATOR, type) && !Objects.equals(user.getLoginName(), "njcnyw")) { type = UserType.USER; - } else if (Objects.equals(UserType.ADMINISTRATOR, type) && Objects.equals(user.getLoginName(), "njcnyw")) { - type = UserType.APP; - } else if (Objects.equals(UserType.USER, type) || Objects.equals(UserType.APP, type)) { + } +// else if (Objects.equals(UserType.ADMINISTRATOR, type) && Objects.equals(user.getLoginName(), "njcnyw")) { +// type = UserType.APP; +// } + else if (Objects.equals(UserType.USER, type) || Objects.equals(UserType.APP, type)) { return page; } if (ObjectUtil.isNotNull(queryParam)) { From 1ed56bbac136c68370a6d78a606d28cc507ec589 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Wed, 14 Aug 2024 09:07:10 +0800 Subject: [PATCH 6/8] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=9B=A0redis=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/njcn/system/enums/DicDataEnum.java | 9 ++++----- .../java/com/njcn/user/controller/UserController.java | 7 +++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java index e0399e1b3..5a718b8af 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java @@ -67,12 +67,11 @@ public enum DicDataEnum { /** * 电压互感器类型 */ - Cap_V("电容式电压互感器","Cap_V"), - Pele_V("光电式电压互感器","Pele_V"), - A_V("A类测试电压互感器","A_V"), - Elec_V("电子式电压互感器","Elec_V"), + Cap_V("电容式","Cap_V"), + Pele_V("光电式","Pele_V"), + Elec_V("电子式","Elec_V"), Other_S("其他","Other"), - Ele_V("电磁式电压互感器","Ele_V"), + Ele_V("电磁式","Ele_V"), /** * 中性点接地方式 diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java index 1d38e4c51..afbd544e5 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java @@ -366,8 +366,11 @@ public class UserController extends BaseController { String publicKey = keyMap.get("publicKey"); String privateKey = keyMap.get("privateKey"); String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); - //秘钥先删除再添加 - redisUtil.delete(loginName + ip); + + if(redisUtil.hasKey(loginName + ip)){ + //秘钥先删除再添加 + redisUtil.delete(loginName + ip); + } // 保存私钥到 redis redisUtil.saveByKeyWithExpire(loginName + ip, privateKey, 5 * 60L); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, publicKey, methodDescribe); From dbf43633ff6d004997d113b49440cfd8a358c58f Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Wed, 14 Aug 2024 11:44:34 +0800 Subject: [PATCH 7/8] =?UTF-8?q?1.excel=E5=85=AC=E5=85=B1=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=B0=83=E6=95=B4,=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E6=9C=80=E5=A4=A7=E5=AD=97=E7=AC=A6?= =?UTF-8?q?255=E9=97=AE=E9=A2=98=EF=BC=8C=E6=89=8D=E7=94=A8=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E8=A1=A8=E5=8D=95=E6=9D=A5=E8=AE=BE=E7=BD=AE=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A1=86=202.=E8=A7=A3=E5=86=B3=E5=86=80=E5=8C=97?= =?UTF-8?q?=E8=AF=95=E8=BF=90=E8=A1=8C=E6=8A=A5=E5=91=8Abug=E9=83=A8?= =?UTF-8?q?=E5=88=86=203.=E8=A7=A3=E5=86=B3=E6=95=B0=E6=8D=AE=E5=AE=8C?= =?UTF-8?q?=E6=95=B4=E6=80=A7=EF=BC=8C=E5=B0=8F=E6=95=B0=E7=82=B9=E9=97=AE?= =?UTF-8?q?=E9=A2=98=204.=E7=BB=88=E7=AB=AF=E7=9B=91=E6=B5=8B=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=A8=A1=E6=9D=BF=E5=92=8C=E5=AF=BC=E5=85=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=BC=96=E5=86=99,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/njcn/poi/excel/ExcelUtil.java | 107 ++++- .../com/njcn/device/pq/api/NodeClient.java | 26 ++ .../fallback/NodeClientFallbackFactory.java | 46 ++ .../impl/LineIntegrityDataServiceImpl.java | 2 +- .../controller/ExportModelController.java | 10 +- .../controller/ExportModelJBController.java | 14 +- .../service/impl/ReportServiceImpl.java | 8 +- .../enums/SupervisionResponseEnum.java | 1 + .../dto/SupervisionDevMainReportExcel.java | 257 +++++++++++ .../po/device/SupervisionDevMainReportPO.java | 8 + .../device/DeVReportManageController.java | 23 +- .../SupervisionDevMainReportPOService.java | 7 +- ...SupervisionDevMainReportPOServiceImpl.java | 410 ++++++++++++++++-- .../user/impl/UserReportPOServiceImpl.java | 2 +- .../njcn/system/enums/DicDataTypeEnum.java | 2 +- 15 files changed, 861 insertions(+), 62 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/NodeClient.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/NodeClientFallbackFactory.java create mode 100644 pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/dto/SupervisionDevMainReportExcel.java diff --git a/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java b/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java index 7c91a82dd..e39475a70 100644 --- a/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java +++ b/pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.CharsetUtil; import com.njcn.web.utils.HttpServletUtil; import lombok.extern.slf4j.Slf4j; @@ -11,9 +12,8 @@ import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; -import org.apache.poi.xssf.usermodel.XSSFDataValidation; -import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint; -import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xssf.usermodel.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; @@ -21,10 +21,9 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URLEncoder; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author hongawen @@ -80,7 +79,7 @@ public class ExcelUtil { * * @param fileName 文件名 */ - public static void exportExcelByWorkbook(String fileName, Workbook workbook) { + public static void exportExcelByWorkbook(String fileName, Workbook workbook) { HttpServletResponse response = HttpServletUtil.getResponse(); try (ServletOutputStream outputStream = response.getOutputStream()) { fileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8); @@ -116,9 +115,18 @@ public class ExcelUtil { response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/octet-stream;charset=UTF-8"); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, dataSet); + setTopLevel(workbook, pullDowns); if (CollUtil.isNotEmpty(pullDowns)) { + int num = 1; for (PullDown pullDown : pullDowns) { - ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{})); + String colName = numberToExcelColumn(num); + int sum = pullDown.getStrings().stream().mapToInt(String::length).sum(); + if(sum>255){ + ExcelUtil.selectListMaxLength(workbook, pullDown.getFirstCol(), pullDown.getLastCol(),pullDown.getStrings().size(),colName); + num++; + }else{ + ExcelUtil.selectList(workbook, pullDown.getFirstCol(), pullDown.getLastCol(), pullDown.getStrings().toArray(new String[]{})); + } } } Sheet sheetAt = workbook.getSheetAt(0); @@ -128,7 +136,7 @@ public class ExcelUtil { for (int i = 0; i < 2; i++) { //获取行 Row row = sheetAt.getRow(i); - if(Objects.isNull(row)){ + if (Objects.isNull(row)) { continue; } for (int j = 0; j < physicalNumberOfCells; j++) { @@ -173,6 +181,8 @@ public class ExcelUtil { } } } + + workbook.write(outputStream); } catch (IOException e) { log.error(">>> 导出数据异常:{}", e.getMessage()); @@ -238,7 +248,27 @@ public class ExcelUtil { // 对sheet页生效 sheet.addValidationData(validation); } - + /** + * @Description: 当下拉框超过最大字符255,设置隐藏表单来进行展示 + * @param workbook + * @param firstCol + * @param lastCol + * @param colName 列A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z + * @Author: wr + * @Date: 2024/8/13 15:07 + */ + public static void selectListMaxLength(Workbook workbook,int firstCol, int lastCol,int row ,String colName) { + Sheet sheet = workbook.getSheetAt(0); + // 生成下拉列表 + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(2, 65535, firstCol, lastCol); + String strFormula = workbook.getSheetName(1) + "!$" + colName + "$1:$" + colName + "$" + row; + XSSFDataValidationConstraint hiddentConstraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST, strFormula); + // 数据有效性对象 + DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) sheet); + DataValidation validation = help.createValidation(hiddentConstraint, regions); + sheet.addValidationData(validation); + } /** * 指定名称、数据下载报表(带指定标题将*显示比必填信息),带有下拉信息 @@ -265,7 +295,7 @@ public class ExcelUtil { for (int i = 0; i < 2; i++) { //获取行 Row row = sheetAt.getRow(i); - if(Objects.isNull(row)){ + if (Objects.isNull(row)) { continue; } for (int j = 0; j < physicalNumberOfCells; j++) { @@ -340,5 +370,60 @@ public class ExcelUtil { sheet.addValidationData(validation); } + /** + * 设置隐藏表单来进行下拉框 + * @param workbook + * @param pullDowns + */ + private static void setTopLevel(Workbook workbook, List pullDowns) { + int num = 0; + for (PullDown pullDown : pullDowns) { + int sum = pullDown.getStrings().stream().mapToInt(String::length).sum(); + if (sum > 255) { + // 创建隐藏sheet + String hiddenSheetName = "hiddenSheetA"; + if (num == 0) { + workbook.createSheet(hiddenSheetName); + } + //false展示隐藏sheet ,true不展示隐藏sheet + workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true); + Sheet sheet = workbook.getSheet(hiddenSheetName); + if(num == 0){ + //sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行 + sheet.createRow(0); + } + Row row; //创建数据行 + sheet.setColumnWidth(num, 4000); //设置每列的列宽 + for (int j = 0; j < pullDown.getStrings().size(); j++) { + if (sheet.getLastRowNum() < j) { + row = sheet.createRow(j); //创建数据行 + } else { + row = sheet.getRow(j); + } + //设置对应单元格的值 + row.createCell(num).setCellValue(pullDown.getStrings().get(j)); + } + num++; + } + } + } + + /** + * 获取根据数值获取列字母(1=A,2=B,3=C,.......,27=AA) + * + * @param n + * @return + */ + public static String numberToExcelColumn(int n) { + CellReference cellRef = new CellReference(0, n - 1, false, false); // Row and column are 0-based + int colIndex = cellRef.getCol(); + StringBuilder columnName = new StringBuilder(); + while (colIndex >= 0) { + columnName.insert(0, (char) ('A' + (colIndex % 26))); + colIndex /= 26; + colIndex--; + } + return columnName.toString(); + } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/NodeClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/NodeClient.java new file mode 100644 index 000000000..052b99035 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/NodeClient.java @@ -0,0 +1,26 @@ +package com.njcn.device.pq.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.device.pq.api.fallback.PqsTerminalLogsClientFallbackFactory; +import com.njcn.device.pq.pojo.po.Node; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2024/8/13 10:14 + */ +@FeignClient(value = ServerInfo.DEVICE, path = "/node", fallbackFactory = PqsTerminalLogsClientFallbackFactory.class, contextId = "node") +public interface NodeClient { + + + @ApiOperation("获取全部前置机") + @GetMapping("/nodeAllList") + HttpResult> nodeAllList(); + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/NodeClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/NodeClientFallbackFactory.java new file mode 100644 index 000000000..a8ec10467 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/NodeClientFallbackFactory.java @@ -0,0 +1,46 @@ +package com.njcn.device.pq.api.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.device.biz.utils.DeviceEnumUtil; +import com.njcn.device.pq.api.NodeClient; +import com.njcn.device.pq.api.PqsTerminalLogsClient; +import com.njcn.device.pq.pojo.po.Node; +import com.njcn.device.pq.pojo.po.PqsTerminalLogs; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author zbj + * @version 1.0.0 + * @date 2023年04月13日 13:34 + */ +@Slf4j +@Component +public class NodeClientFallbackFactory implements FallbackFactory { + @Override + public NodeClient create(Throwable throwable) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (throwable.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) throwable.getCause(); + exceptionEnum = DeviceEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new NodeClient() + { + + @Override + public HttpResult> nodeAllList() { + log.error("{}异常,降级处理,异常为:{}", "获取全部前置机", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + + + } +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java index fa5f380fb..7c0fc4534 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java @@ -515,7 +515,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl reflectDataInV(List value, String name, String attribute) { - Field field = null; + Field field; try { - field = RStatDataVD.class.getDeclaredField(attribute); + field = RStatDataInharmVDPO.class.getDeclaredField(attribute); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } @@ -426,9 +426,9 @@ public class ReportServiceImpl implements ReportService { Field finalField = field; return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> { - BigDecimal o = null; + Double o; try { - o = (BigDecimal) finalField.get(temp); + o = (Double) finalField.get(temp); } catch (IllegalAccessException e) { throw new RuntimeException(e); } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/enums/SupervisionResponseEnum.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/enums/SupervisionResponseEnum.java index c00afa80d..e25392a7b 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/enums/SupervisionResponseEnum.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/enums/SupervisionResponseEnum.java @@ -23,6 +23,7 @@ public enum SupervisionResponseEnum { NO_POWER("A00550","不能操作非自己创建的任务!"), NO_USER_REPORT_UPDATE("A00550","常态化干扰源用户管理信息更新失败,不存在该条信息"), NO_DEPT_POWER("A00550","不能操作非自己部门创建的任务"), + IMPORT_DEV_ERROR("A00550","导入终端检测失败"), ; private final String code; diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/dto/SupervisionDevMainReportExcel.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/dto/SupervisionDevMainReportExcel.java new file mode 100644 index 000000000..ce2e503b4 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/dto/SupervisionDevMainReportExcel.java @@ -0,0 +1,257 @@ +package com.njcn.supervision.pojo.dto; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * Description: + * Date: 2024/5/10 18:16【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SupervisionDevMainReportExcel { + + + + /** + * 工程预期投产日期 + */ + @Excel(name = "*工程预期投产日期", width = 30) + @NotBlank(message = "不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate expectedProductionDate; + + /** + * 所属地市 + */ + @Excel(name = "*所属地市", width = 30) + @NotBlank(message = "所属地市不能为空") + private String city; + + + //------------------------基本信息--------------------------------------------- + + /** + * 并网变电站 + */ + @Excel(name = "*所属变电站名称", width = 30) + @NotBlank(message = "所属变电站名称不能为空") + private String substation; + + /** + * 所属供电公司 + */ + @Excel(name = "*所属供电公司", width = 30) + @NotBlank(message = "所属供电公司不能为空") + private String powerCompany; + + /** + * 终端型号 + */ + @Excel(name = "*终端型号", width = 30) + @NotBlank(message = "终端型号不能为空") + private String terminalType; + + + /** + * 监测终端名称 + */ + @Excel(name = "*终端名称", width = 30) + @NotBlank(message = "终端名称不能为空") + private String monitoringTerminalName; + + + /** + * 通讯类型 + */ + @Excel(name = "*通讯类型", width = 30) + @NotBlank(message = "通讯类型不能为空") + private String frontType; + + /** + * 监测终端编码 + */ + @Excel(name = "*监测终端编码", width = 30) + @NotBlank(message = "监测终端编码不能为空") + private String monitoringTerminalCode; + + /** + * 终端IP + */ + @Excel(name = "*终端IP", width = 30) + @NotBlank(message = "*终端IP不能为空") + private String terminalIp; + + + /** + * 端口 + */ + @Excel(name = "*端口", width = 30) + @NotBlank(message = "*端口不能为空") + private String terminalPort; + + /** + * 投运时间 + */ + @Excel(name = "*投运时间", width = 30) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @NotBlank(message = "投运时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime commissioningTime; + + /** + * 数据更新时间 + */ + @Excel(name = "数据更新时间", width = 30) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime dataUpdateTime; + + /** + * 所属前置机 + */ + @Excel(name = "*所属前置机", width = 30) + @NotBlank(message = "所属前置机不能为空") + private String frontEndMachine; + + /** + * 监测终端安装位置 + */ + @Excel(name = "*监测终端安装位置", width = 30, replace = {"电网侧_0", "用户侧_1", "_0"}) + @NotBlank(message = "监测终端安装位置不能为空") + private String monitoringDeviceInstallationPosition; + + /** + * 识别码 + */ + @Excel(name = "识别码", width = 30) + private String identificationCode; + + /** + * 终端秘钥 + */ + @Excel(name = "终端秘钥", width = 30) + private String terminalSecretKey; + + /** + * 终端模型 + */ + @Excel(name = "终端模型", width = 30, replace = {"虚拟终端_0", "实际终端_1", "离线_2", "_1"}) + private String terminalModel; + + /** + * 数据类型 + */ + @Excel(name = "数据类型", width = 30, replace = {"暂态系统_0", "稳态系统_1", "两个系统_2", "_2"}) + private String dataType; + + /** + * 终端接线方式类型 + */ + @Excel(name = "*终端接线方式类型", width = 30) + @NotBlank(message = "终端接线方式类型不能为空") + private String terminalWiringMethodType; + + /** + * 厂家 + */ + @Excel(name = "*厂家", width = 30) + @NotBlank(message = "厂家不能为空") + private String manufacturer; + + + /** + * 本次终端检测时间 + */ + @Excel(name = "*本次终端检测时间", width = 30) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @NotBlank(message = "本次终端检测时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime currentTerminalDetectionTime; + + + /** + * 电压互感器类型 + */ + @Excel(name = "*电压互感器类型", width = 30) + @NotBlank(message = "*电压互感器类型不能为空") + private String voltageTransformerType; + + + /** + * 中性点接线方式 + */ + @Excel(name = "*中性点接线方式", width = 30) + @NotBlank(message = "中性点接线方式不能为空") + private String neutralPointWiringMethod; + + + /** + * 厂家终端编号 + */ + @Excel(name = "*厂家终端编号", width = 30) + @NotBlank(message = "厂家终端编号不能为空") + private String manufacturerDeviceNumber; + + + /** + * SIM卡号 + */ + @Excel(name = "SIM卡号", width = 30) + @NotBlank(message = "不能为空") + private String simCardNumber; + + /** + * 对时功能 + */ + @Excel(name = "对时功能", width = 30, replace = {"关闭_0", "开启_1", "_0"}) + private String timeSyncFunction; + + /** + * 电镀功能 + */ + @Excel(name = "电镀功能", width = 30, replace = {"关闭_0", "开启_1", "_0"}) + private String electroplatingFunction; + + + /** + * 召换标志 + */ + @Excel(name = "召换标志", width = 30, replace = {"周期触发_0", "变位触发_1", "_0"}) + private String summonFlag; + + /** + * 告警功能 + */ + @Excel(name = "告警功能", width = 30, replace = {"否_0", "是_1", "_0"}) + private String alarmFunction; + + /** + * 合同号 + */ + @Excel(name = "合同号", width = 30) + private String contractNumber; + + @Data + @EqualsAndHashCode(callSuper = true) + public static class ExcelMsg extends SupervisionDevMainReportExcel implements Serializable { + + @Excel(name = "错误信息描述", width = 30) + private String msg; + + } +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionDevMainReportPO.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionDevMainReportPO.java index fb0ead5de..e109584ac 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionDevMainReportPO.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionDevMainReportPO.java @@ -8,6 +8,7 @@ import com.njcn.db.bo.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; @@ -51,6 +52,7 @@ public class SupervisionDevMainReportPO extends BaseEntity { * 工程预期投产日期 */ @TableField(value = "expected_production_date") + @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate expectedProductionDate; /** @@ -152,4 +154,10 @@ public class SupervisionDevMainReportPO extends BaseEntity { */ @TableField(value = "`State`") private Integer state; + + /** + * 状态:0:系统建档 1:外部导入 + */ + @TableField(value = "`import_type`") + private Integer importType; } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/DeVReportManageController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/DeVReportManageController.java index 1c51b892b..e240a671c 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/DeVReportManageController.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/DeVReportManageController.java @@ -13,17 +13,18 @@ import com.njcn.supervision.pojo.po.device.SupervisionTempDeviceReport; import com.njcn.supervision.pojo.vo.device.SupervisionDevMainReportVO; import com.njcn.supervision.service.device.SupervisionDevMainReportPOService; import com.njcn.web.controller.BaseController; -import com.njcn.web.utils.RequestUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; -import io.swagger.v3.oas.annotations.Operation; +import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import javax.validation.Valid; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -138,4 +139,20 @@ public class DeVReportManageController extends BaseController { } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping(value = "/downloadDevTemplate", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) + @ApiOperation("下载终端台账入网模板") + public void downloadDevTemplate() { + supervisionDevMainReportPOService.downloadDevTemplate(); + } + + + @PostMapping(value = "/importSensitiveUserData") + @ApiOperation("批量导入终端台账入网") + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.ADD) + public HttpResult importDevrData(@ApiParam(value = "文件", required = true) @RequestPart("file") MultipartFile file, HttpServletResponse response) { + String methodDescribe = getMethodDescribe("importDevData"); + supervisionDevMainReportPOService.importDevData(file, response); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/SupervisionDevMainReportPOService.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/SupervisionDevMainReportPOService.java index bad5a3d22..48a6e8550 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/SupervisionDevMainReportPOService.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/SupervisionDevMainReportPOService.java @@ -1,14 +1,15 @@ package com.njcn.supervision.service.device; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.bpm.pojo.param.instance.BpmProcessInstanceCancelParam; import com.njcn.bpm.service.IBpmService; import com.njcn.supervision.pojo.param.device.SupervisionDevMainReportParam; import com.njcn.supervision.pojo.po.device.SupervisionDevMainReportPO; import com.njcn.supervision.pojo.po.device.SupervisionTempDeviceReport; import com.njcn.supervision.pojo.vo.device.SupervisionDevMainReportVO; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -38,4 +39,8 @@ public interface SupervisionDevMainReportPOService extends IBpmService getDeviceList(); SupervisionDevMainReportVO querySurveyDetail(String id); + + void downloadDevTemplate(); + + void importDevData(MultipartFile file, HttpServletResponse response); } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionDevMainReportPOServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionDevMainReportPOServiceImpl.java index 49bc1ea95..8e1e9647a 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionDevMainReportPOServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionDevMainReportPOServiceImpl.java @@ -1,5 +1,9 @@ package com.njcn.supervision.service.device.impl; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.StrPool; @@ -16,10 +20,19 @@ import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO; import com.njcn.bpm.pojo.param.instance.BpmProcessInstanceCancelParam; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.pms.utils.PubUtil; import com.njcn.device.pq.api.LineFeignClient; +import com.njcn.device.pq.api.NodeClient; +import com.njcn.device.pq.pojo.po.Node; +import com.njcn.poi.excel.ExcelUtil; +import com.njcn.poi.excel.PullDown; +import com.njcn.poi.util.PoiUtil; import com.njcn.supervision.enums.FlowStatusEnum; import com.njcn.supervision.enums.SupervisionKeyEnum; +import com.njcn.supervision.enums.SupervisionResponseEnum; import com.njcn.supervision.mapper.device.SupervisionDevMainReportPOMapper; +import com.njcn.supervision.pojo.dto.SensitiveUserSExcel; +import com.njcn.supervision.pojo.dto.SupervisionDevMainReportExcel; import com.njcn.supervision.pojo.param.device.SupervisionDevMainReportParam; import com.njcn.supervision.pojo.param.device.SupervisionTempDeviceReportParam; import com.njcn.supervision.pojo.po.device.SupervisionDevMainReportPO; @@ -28,22 +41,30 @@ import com.njcn.supervision.pojo.vo.device.SupervisionDevMainReportVO; import com.njcn.supervision.service.device.SupervisionDevMainReportPOService; import com.njcn.supervision.service.device.SupervisionTempDeviceReportService; import com.njcn.supervision.utils.InstanceUtil; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.UserFeignClient; +import com.njcn.user.pojo.dto.DeptDTO; import com.njcn.user.pojo.vo.UserVO; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.RequestUtil; +import com.njcn.web.utils.WebUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** - * * Description: * Date: 2024/5/10 18:10【需求编号】 * @@ -55,12 +76,13 @@ import java.util.stream.Collectors; public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl implements SupervisionDevMainReportPOService { - private final BpmProcessFeignClient bpmProcessFeignClient; private final SupervisionTempDeviceReportService supervisionTempDeviceReportService; private final DeptFeignClient deptFeignClient; private final UserFeignClient userFeignClient; private final LineFeignClient lineFeignClient; + private final DicDataFeignClient dicDataFeignClient; + private final NodeClient nodeClient; @Override @Transactional(rollbackFor = Exception.class) @@ -68,12 +90,11 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl processInstanceVariables = new HashMap<>(); BpmProcessInstanceCreateReqDTO bpmProcessInstanceCreateReqDTO = new BpmProcessInstanceCreateReqDTO(); bpmProcessInstanceCreateReqDTO.setProcessDefinitionKey(SupervisionKeyEnum.DEVICE_INFO_ADD.getKey()); @@ -129,10 +150,10 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImplx + queryWrapper.and(x -> x .like("dev.substation_name", supervisionDevMainReportQuery.getSearchValue()) .or() .like("dev.monitoring_terminal_code", supervisionDevMainReportQuery.getSearchValue()) .or() .like("dev.monitoring_terminal_name", supervisionDevMainReportQuery.getSearchValue()) - ); + ); } //添加上时间范围 queryWrapper.between("supervision_dev_main_report.Create_Time", @@ -197,7 +216,7 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(supervisionDevMainReportQuery), PageFactory.getPageSize(supervisionDevMainReportQuery)), queryWrapper); - page.getRecords().stream().forEach(temp->{ + page.getRecords().stream().forEach(temp -> { // temp.setOrgName((deptFeignClient.getDeptById(temp.getOrgId()).getData().getName())); //处理特殊字段,用户名、部门名 UserVO userVO = userFeignClient.getUserById(temp.getReporter()).getData(); @@ -209,7 +228,7 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl collect = list.stream().map(SupervisionDevMainReportPO::getId).collect(Collectors.toList()); List list1 = supervisionTempDeviceReportService.lambdaQuery().in(SupervisionTempDeviceReport::getId, collect).list(); return list1; @@ -260,30 +279,362 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl jiBeiArea = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.JIBEI_AREA.getCode()).getData(); + //所属供电公司 RequestUtil.getDeptIndex() + List depts = deptFeignClient.getDepSonDetailByDeptId("0d52f9f6e43ec0ee83013cd32da93f66").getData(); + //终端型号 + List devType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_TYPE.getCode()).getData(); + //通讯类型 + List frontType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.FRONT_TYPE.getCode()).getData(); + //获取所有前置机 + List nodes = nodeClient.nodeAllList().getData(); + + //接线方式 + List devConnect = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_CONNECT.getCode()).getData(); + //厂家 + List devManufacturer = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_MANUFACTURER.getCode()).getData(); + //电压互感器类型 + List voltageTransformer = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.VOLTAGE_TRANSFORMER.getCode()).getData(); + //中性点接线方式 + List neutralPoint = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.Neutral_Point.getCode()).getData(); + + + List pullDowns = new ArrayList<>(); + + PullDown pullDown; + pullDown = new PullDown(); + pullDown.setFirstCol(1); + pullDown.setLastCol(1); + pullDown.setStrings(jiBeiArea.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + //缺少变电站名称 +// pullDown = new PullDown(); +// pullDown.setFirstCol(2); +// pullDown.setLastCol(2); +// pullDown.setStrings(); +// pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(3); + pullDown.setLastCol(3); + pullDown.setStrings(depts.stream().map(DeptDTO::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(4); + pullDown.setLastCol(4); + pullDown.setStrings(devType.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + + pullDown = new PullDown(); + pullDown.setFirstCol(6); + pullDown.setLastCol(6); + pullDown.setStrings(frontType.stream().filter(x -> "CLD".equals(x.getCode()) || "61850".equals(x.getCode())).map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(12); + pullDown.setLastCol(12); + pullDown.setStrings(nodes.stream().map(Node::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + //监测终端安装位置 0:电网侧 1:用户侧 + pullDown = new PullDown(); + pullDown.setFirstCol(13); + pullDown.setLastCol(13); + pullDown.setStrings(Stream.of("电网侧", "用户侧").collect(Collectors.toList())); + pullDowns.add(pullDown); + + //终端模型 0:虚拟终端 1:实际终端 2:离线 + pullDown = new PullDown(); + pullDown.setFirstCol(16); + pullDown.setLastCol(16); + pullDown.setStrings(Stream.of("实际终端", "虚拟终端", "离线").collect(Collectors.toList())); + pullDowns.add(pullDown); + + //数据类型 0:暂态系统 1:稳态系统 2:两个系统 + pullDown = new PullDown(); + pullDown.setFirstCol(17); + pullDown.setLastCol(17); + pullDown.setStrings(Stream.of("两个系统", "暂态系统", "稳态系统").collect(Collectors.toList())); + pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(18); + pullDown.setLastCol(18); + pullDown.setStrings(devConnect.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + + pullDown = new PullDown(); + pullDown.setFirstCol(19); + pullDown.setLastCol(19); + pullDown.setStrings(devManufacturer.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + + pullDown = new PullDown(); + pullDown.setFirstCol(21); + pullDown.setLastCol(21); + pullDown.setStrings(voltageTransformer.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(22); + pullDown.setLastCol(22); + pullDown.setStrings(neutralPoint.stream().map(DictData::getName).distinct().collect(Collectors.toList())); + pullDowns.add(pullDown); + + + pullDown = new PullDown(); + pullDown.setFirstCol(25); + pullDown.setLastCol(25); + pullDown.setStrings(Stream.of("关闭", "开启").collect(Collectors.toList())); + pullDowns.add(pullDown); + + pullDown = new PullDown(); + pullDown.setFirstCol(26); + pullDown.setLastCol(26); + pullDown.setStrings(Stream.of("关闭", "开启").collect(Collectors.toList())); + pullDowns.add(pullDown); + + //召唤标志 0:周期触发 1:变位触发 + pullDown = new PullDown(); + pullDown.setFirstCol(27); + pullDown.setLastCol(27); + pullDown.setStrings(Stream.of("周期触发", "变位触发").collect(Collectors.toList())); + pullDowns.add(pullDown); + + + pullDown = new PullDown(); + pullDown.setFirstCol(28); + pullDown.setLastCol(28); + pullDown.setStrings(Stream.of("否", "是").collect(Collectors.toList())); + pullDowns.add(pullDown); + + ExcelUtil.exportExcelPullDown(exportParams, "终端入网检测数据模板.xlsx", pullDowns, SupervisionDevMainReportExcel.class, new ArrayList<>()); + + } + + @Override + public void importDevData(MultipartFile file, HttpServletResponse response) { + ImportParams params = new ImportParams(); + params.setHeadRows(1);//表头 + params.setTitleRows(1);//标题 + params.setNeedVerify(true); + params.setStartSheetIndex(0); + params.setSheetNum(1); + List devExcels = new ArrayList<>(); + try { + ExcelImportResult sensitiveUserExcelExcelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), SensitiveUserSExcel.class, params); + //如果存在非法数据,将不合格的数据导出 + if (sensitiveUserExcelExcelImportResult.isVerifyFail()) { + PoiUtil.exportFileByWorkbook(sensitiveUserExcelExcelImportResult.getFailWorkbook(), "非法数据.xlsx", response); + } else { + devExcels = sensitiveUserExcelExcelImportResult.getList(); + } + } catch (Exception e) { + throw new BusinessException(SupervisionResponseEnum.IMPORT_DEV_ERROR); + } + List devMsgList = new ArrayList<>(); + //所属地市 + List jiBeiArea = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.JIBEI_AREA.getCode()).getData(); + + //所属供电公司 + List deptS = deptFeignClient.getDeptDescendantIndexes(RequestUtil.getDeptIndex(), WebUtil.filterDeptType()).getData(); + Map deptMap = deptS.stream().collect(Collectors.toMap(DeptDTO::getName, DeptDTO::getId, (k1, k2) -> k1)); + + //终端型号 + List devType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_TYPE.getCode()).getData(); + //通讯类型 + List frontType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.FRONT_TYPE.getCode()).getData(); + //获取所有前置机 + List nodes = nodeClient.nodeAllList().getData(); + Map nodeMap = nodes.stream().collect(Collectors.toMap(Node::getName, Node::getId, (k1, k2) -> k1)); + + //接线方式 + List devConnect = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_CONNECT.getCode()).getData(); + + //厂家 + List devManufacturer = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_MANUFACTURER.getCode()).getData(); + //电压互感器类型 + List voltageTransformer = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.VOLTAGE_TRANSFORMER.getCode()).getData(); + //中性点接线方式 + List neutralPoint = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.Neutral_Point.getCode()).getData(); + + SupervisionDevMainReportPO po; + if (CollectionUtil.isNotEmpty(devExcels)) { + for (SupervisionDevMainReportExcel dev : devExcels) { + //todo 需要根据变电站id进行匹配 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(SupervisionTempDeviceReport::getSubstation, dev.getSubstation()) + .eq(SupervisionTempDeviceReport::getTerminalIp, dev.getTerminalIp()); + List list = supervisionTempDeviceReportService.getBaseMapper().selectList(lambdaQueryWrapper); + if (CollectionUtil.isNotEmpty(list)) { + //过滤已取消的申请和删除的 + List collect = list.stream().map(SupervisionTempDeviceReport::getId).collect(Collectors.toList()); + List list1 = this.lambdaQuery().in(SupervisionDevMainReportPO::getId, collect).list(); + list1 = list1.stream() + .filter(userReportPO -> !userReportPO.getStatus().equals(FlowStatusEnum.CANCEL.getCode())) + .filter(userReportPO -> userReportPO.getState().equals(DataStateEnum.ENABLE.getCode())) + .collect(Collectors.toList()); + //如果还存在,则说明有人申请过了 + if (CollectionUtil.isNotEmpty(list1)) { + //该用户已经录入 + SupervisionDevMainReportExcel.ExcelMsg sensitiveUserExcelMsg = new SupervisionDevMainReportExcel.ExcelMsg(); + BeanUtils.copyProperties(dev, sensitiveUserExcelMsg); + sensitiveUserExcelMsg.setMsg(dev.getTerminalIp().concat("Ip已占用")); + devMsgList.add(sensitiveUserExcelMsg); + continue; + } + } + //基础报告信息 + po = new SupervisionDevMainReportPO(); + po.setReporter(RequestUtil.getUserIndex()); + po.setReportDate(LocalDate.now()); + po.setOrgId(RequestUtil.getDeptIndex()); + po.setExpectedProductionDate(dev.getExpectedProductionDate()); + po.setCity(PubUtil.getDicById(dev.getCity(), jiBeiArea)); + po.setUserStatus("1"); +// po.setAcceptanceInspectionReport(); +// po.setAcceptanceInspectionReportSingle(); +// po.setTypeExperimentReport(); +// po.setFactoryInspectionReport(); +// po.setPerformanceTestReport(); +// po.setInformationSecurityTestReport(); +// po.setOtherAttachments(); + po.setImportType(1); + po.setStatus(2); + po.setState(DataStateEnum.ENABLE.getCode()); + this.save(po); + //终端基础信息 + StringBuilder msg = new StringBuilder(); + SupervisionTempDeviceReport devDetails = new SupervisionTempDeviceReport(); + devDetails.setId(po.getId()); + if(deptMap.containsKey(dev.getPowerCompany())){ + devDetails.setPowerCompany(deptMap.get(dev.getPowerCompany())); + }else{ + msg.append("所属供电公司不存在!"); + } + //todo 需要根据变电站id进行匹配 +// devDetails.setCustomSubstationFlag(); +// devDetails.setSubstation(); +// devDetails.setSubstationName(); +// devDetails.setSubstationVoltageLevel(); +// devDetails.setLongitude(); +// devDetails.setLatitude(); + + devDetails.setMonitoringTerminalCode(dev.getMonitoringTerminalName()); + devDetails.setMonitoringTerminalName(dev.getMonitoringTerminalName()); + String dy = PubUtil.getDicById(dev.getVoltageTransformerType(), voltageTransformer); + if(StrUtil.isNotBlank(dy)){ + devDetails.setVoltageTransformerType(dy); + }else{ + msg.append("电压互感器类型不存在!"); + } + String jx = PubUtil.getDicById(dev.getTerminalWiringMethodType(), devConnect); + if(StrUtil.isNotBlank(jx)){ + devDetails.setTerminalWiringMethodType(jx); + }else{ + msg.append("终端接线方式类型不存在!"); + } + String zx = PubUtil.getDicById(dev.getNeutralPointWiringMethod(), neutralPoint); + if(StrUtil.isNotBlank(zx)){ + devDetails.setNeutralPointWiringMethod(zx); + }else{ + msg.append("中性点接线方式不存在!"); + } + String cj = PubUtil.getDicById(dev.getManufacturer(), devManufacturer); + if(StrUtil.isNotBlank(cj)){ + devDetails.setManufacturer(cj); + }else{ + msg.append("厂家不存在!"); + } + devDetails.setManufacturerDeviceNumber(dev.getManufacturerDeviceNumber()); + devDetails.setTerminalIp(dev.getTerminalIp()); + + String xh = PubUtil.getDicById(dev.getTerminalType(), devType); + if(StrUtil.isNotBlank(xh)){ + devDetails.setTerminalType(xh); + }else{ + msg.append("终端型号不存在!"); + } + devDetails.setTerminalPort(dev.getTerminalPort()); + if(nodeMap.containsKey(dev.getFrontEndMachine())){ + devDetails.setFrontEndMachine(nodeMap.get(dev.getFrontEndMachine())); + }else{ + msg.append("所属前置机不存在!"); + } + devDetails.setCurrentTerminalDetectionTime(dev.getCurrentTerminalDetectionTime()); + devDetails.setNextTerminalInspectionTime(dev.getCurrentTerminalDetectionTime().plusYears(5)); + devDetails.setIdentificationCode(dev.getIdentificationCode()); + devDetails.setTerminalSecretKey(dev.getTerminalSecretKey()); + devDetails.setTerminalModel(dev.getTerminalModel()); + devDetails.setDataType(dev.getDataType()); + devDetails.setCommunicationStatus("0"); + devDetails.setSimCardNumber(dev.getSimCardNumber()); + devDetails.setCommissioningTime(dev.getCommissioningTime()); + devDetails.setDataUpdateTime(dev.getDataUpdateTime()); + devDetails.setTimeSyncFunction(Integer.parseInt(dev.getTimeSyncFunction())); + devDetails.setElectroplatingFunction(Integer.parseInt(dev.getElectroplatingFunction())); + devDetails.setMonitoringDeviceInstallationPosition(dev.getMonitoringDeviceInstallationPosition()); + devDetails.setSummonFlag(dev.getSummonFlag()); + devDetails.setAlarmFunction(dev.getAlarmFunction()); + devDetails.setContractNumber(dev.getContractNumber()); + String tx = PubUtil.getDicById(dev.getFrontType(), frontType); + if(StrUtil.isNotBlank(tx)){ + devDetails.setFrontType(tx); + }else{ + msg.append("通讯类型不存在!"); + } + String string = msg.toString(); + if(StrUtil.isNotBlank(string)){ + SupervisionDevMainReportExcel.ExcelMsg sensitiveUserExcelMsg = new SupervisionDevMainReportExcel.ExcelMsg(); + BeanUtils.copyProperties(dev, sensitiveUserExcelMsg); + sensitiveUserExcelMsg.setMsg(string); + devMsgList.add(sensitiveUserExcelMsg); + continue; + } + supervisionTempDeviceReportService.saveOrUpdate(devDetails); + } + } + //判断有没有错误信息 + if (CollectionUtil.isNotEmpty(devMsgList)) { + ExcelUtil.exportExcel("失败列表.xlsx", SupervisionDevMainReportExcel.ExcelMsg.class, devMsgList); + } + } + /** - * @Description: 判断设备ip是否重复,如果重复提示 - * @Param: supervisionDevMainReportParam终端详情 isExcludeSelf是否排除自己,一般新增不排除,更新时需要排除自己 - * @return: void - * @Author: clam - * @Date: 2024/5/11 - */ + * @Description: 判断设备ip是否重复,如果重复提示 + * @Param: supervisionDevMainReportParam终端详情 isExcludeSelf是否排除自己,一般新增不排除,更新时需要排除自己 + * @return: void + * @Author: clam + * @Date: 2024/5/11 + */ private void checkIp(SupervisionDevMainReportParam supervisionDevMainReportParam, boolean isExcludeSelf) { //如果保存不填ip则不校验 - if(!StringUtils.isEmpty(supervisionDevMainReportParam.getSupervisionTempDeviceReportParam().getTerminalIp())) { + if (!StringUtils.isEmpty(supervisionDevMainReportParam.getSupervisionTempDeviceReportParam().getTerminalIp())) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper @@ -293,12 +644,11 @@ public class SupervisionDevMainReportPOServiceImpl extends ServiceImpl list = supervisionTempDeviceReportService.getBaseMapper().selectList(lambdaQueryWrapper); if (CollectionUtil.isNotEmpty(list)) { diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java index 3e93665b4..a02619c3b 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/user/impl/UserReportPOServiceImpl.java @@ -757,7 +757,7 @@ public class UserReportPOServiceImpl extends ServiceImpl Date: Wed, 14 Aug 2024 14:03:45 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/njcn/system/pojo/po/EleEpdPqd.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/EleEpdPqd.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/EleEpdPqd.java index 6237c9520..713cf89df 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/EleEpdPqd.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/EleEpdPqd.java @@ -167,4 +167,9 @@ public class EleEpdPqd { */ private String formula; + /** + * 二次值转一次值公式 + */ + private String primaryFormula; + }