diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/MonitorSendController.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/MonitorSendController.java index 2c1f2df6b..921081438 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/MonitorSendController.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/MonitorSendController.java @@ -39,7 +39,7 @@ public class MonitorSendController extends BaseController { @ApiOperation("国网上送接口") @ApiImplicitParam(name = "param",value = "请求体",required = true) public HttpResult windSend(@RequestBody @Validated MonitorParam.Info param){ - String methodDescribe = getMethodDescribe("sendType"); + String methodDescribe = getMethodDescribe("windSend"); String s = monitorSendService.sendType(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, s, methodDescribe); } diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/majornetwork/impl/MonitorServiceImpl.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/majornetwork/impl/MonitorServiceImpl.java index 777a5b37c..bea4fcc85 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/majornetwork/impl/MonitorServiceImpl.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/majornetwork/impl/MonitorServiceImpl.java @@ -1334,6 +1334,12 @@ public class MonitorServiceImpl extends ServiceImpl impl for (OracleTerminalExcel oracleTerminalExcel : oracleTerminalExcelList) { //单位 + if(oracleTerminalExcel.getGdName().equals("省检修")){ + oracleTerminalExcel.setGdName("国网河北超高压公司本部"); + }else { + oracleTerminalExcel.setGdName("国网"+oracleTerminalExcel.getGdName()+"本部"); + } + if (!mapDept.containsKey(oracleTerminalExcel.getGdName())) { oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "单位名称不存在,请确认单位名称是否正确")); continue; @@ -1524,141 +1530,173 @@ public class MonitorServiceImpl extends ServiceImpl impl LambdaQueryWrapper monitorLambdaQueryWrapper = new LambdaQueryWrapper<>(); monitorLambdaQueryWrapper.eq(Monitor::getLineId, lineId) .eq(Monitor::getName, oracleTerminalExcel.getLineName()); - Monitor monitor = monitorMapper.selectOne(monitorLambdaQueryWrapper); + List monitorList = monitorMapper.selectList(monitorLambdaQueryWrapper); + + if(CollUtil.isNotEmpty(monitorList)) { + + for (Monitor monitor : monitorList) { + + //当前电站下面没有监测点,可以新增 + Monitor monitorPO = new Monitor(); + + String monitorId = "04"; + String one = ""; + if (deptDTO.getName().contains("石家庄")) { + one = "01"; + } else if (deptDTO.getName().contains("邯郸")) { + one = "02"; + } else if (deptDTO.getName().contains("保定")) { + one = "03"; + } else if (deptDTO.getName().contains("沧州")) { + one = "04"; + } else if (deptDTO.getName().contains("邢台")) { + one = "05"; + } else if (deptDTO.getName().contains("衡水")) { + one = "06"; + } else if (deptDTO.getName().contains("超高压")) { + one = "07"; + } else { + one = "3.14159"; + } + + String last = String.format("M%05d", oracleTerminalExcel.getId()); + + monitorPO.setMonitorId(monitorId + one + last); - //当前电站下面没有监测点,可以新增 - Monitor monitorPO = new Monitor(); + monitorPO.setName(oracleTerminalExcel.getLineName()); + monitorPO.setPowerrName(stationName); + monitorPO.setPowerrId(stationId); + monitorPO.setOperationName(deptDTO.getName()); + monitorPO.setOperationId(deptDTO.getCode()); + monitorPO.setOrgName(deptDTO.getName()); + monitorPO.setOrgId(deptDTO.getCode()); + monitorPO.setLineName(lineName); + monitorPO.setLineId(lineId); + monitorPO.setVoltageLevel(genScale); + monitorPO.setIsUploadHead(0); + monitorPO.setMonitorOverlimitStatus(0); + monitorPO.setMonitorOverlimitStatus(0); - String monitorId = "04"; - String one =""; - if(deptDTO.getName().contains("石家庄")){ - one= "01"; - }else if(deptDTO.getName().contains("邯郸")){ - one= "02"; - }else if(deptDTO.getName().contains("保定")){ - one= "03"; - }else if(deptDTO.getName().contains("沧州")){ - one= "04"; - }else if(deptDTO.getName().contains("邢台")){ - one= "05"; - }else if(deptDTO.getName().contains("衡水")){ - one= "06"; - }else if(deptDTO.getName().contains("超高压")){ - one= "07"; - }else { - one= "3.14159"; - } + String monitorState = null; + switch (oracleTerminalExcel.getRunFlag()) { + case 0: + monitorState = DicDataEnum.RUN.getName(); + break; + case 1: + monitorState = DicDataEnum.DEBUGGING.getName(); + break; + case 2: + monitorState = DicDataEnum.DECOMMISSIONING.getName(); + break; + default: + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测点状态不存在,请确认后重试")); + break; - String last = String.format("M%05d",oracleTerminalExcel.getId()); + } + if (monitorStateDicMap.containsKey(monitorState)) { + monitorPO.setMonitorState(monitorStateDicMap.get(monitorState).getId()); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测点运行状态不存在,请确认后重试")); + continue; + } - monitorPO.setMonitorId(monitorId+one+last); + monitorPO.setMonitorType(monitorType.getId()); + monitorPO.setStandShortCapacity(oracleTerminalExcel.getStandardCapacity()); + monitorPO.setMinShortCircuitCapacity(oracleTerminalExcel.getShortCapacity()); + monitorPO.setUserAgreementCapacity(oracleTerminalExcel.getDealCapacity()); + monitorPO.setPowerSupplyEqCapacity(oracleTerminalExcel.getDevCapacity()); + DictData scale = dicDataFeignClient.getDicDataById(monitorPO.getVoltageLevel()).getData(); + Overlimit overlimitTem = new Overlimit(); + COverlimitUtil.voltageDeviation(overlimitTem, Float.parseFloat(scale.getValue())); + monitorPO.setVoltageDeviationLowerLimit(overlimitTem.getUvoltageDev()); + monitorPO.setVoltageDeviationUpperLimit(overlimitTem.getVoltageDev()); + monitorPO.setPotentialTransFormerType(potentialDic.getId()); + monitorPO.setNeutralGroundingMode(neutralDic.getId()); + monitorPO.setStatisticalInterval(oracleTerminalExcel.getTimeInterval()); + monitorPO.setTerminalId(devId); + monitorPO.setIsSpecialSupplyElectricity(0); + + monitorPO.setMonitorObjectName(oracleTerminalExcel.getObjName()); - monitorPO.setName(oracleTerminalExcel.getLineName()); - monitorPO.setPowerrName(stationName); - monitorPO.setPowerrId(stationId); - monitorPO.setOperationName(deptDTO.getName()); - monitorPO.setOperationId(deptDTO.getCode()); - monitorPO.setOrgName(deptDTO.getName()); - monitorPO.setOrgId(deptDTO.getCode()); - monitorPO.setLineName(lineName); - monitorPO.setLineId(lineId); - monitorPO.setVoltageLevel(genScale); - monitorPO.setIsUploadHead(0); - monitorPO.setMonitorOverlimitStatus(0); - monitorPO.setMonitorOverlimitStatus(0); + if (oracleTerminalExcel.getLoadType().equals("电加热负荷") ||oracleTerminalExcel.getLoadType().equals("轧机") || oracleTerminalExcel.getLoadType().equals("其他非线性负荷")) { + if (objTypeDicMap.containsKey("冶炼负荷")) { + String objTypeId = objTypeDicMap.get("冶炼负荷").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "冶炼负荷字典监测标签不存在,请确认后重试")); + continue; + } + } else if (oracleTerminalExcel.getLoadType().equals("商业/市政/民用/电子通讯负荷")) { + if (objTypeDicMap.containsKey("城市商业")) { + String objTypeId = objTypeDicMap.get("城市商业").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "城市商业字典监测标签不存在,请确认后重试")); + continue; + } - String monitorState = null; - switch (oracleTerminalExcel.getRunFlag()) { - case 0: - monitorState = DicDataEnum.RUN.getName(); - break; - case 1: - monitorState = DicDataEnum.DEBUGGING.getName(); - break; - case 2: - monitorState = DicDataEnum.DECOMMISSIONING.getName(); - break; - default: - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测点状态不存在,请确认后重试")); - break; + } else if (oracleTerminalExcel.getLoadType().equals("半导体制造") || oracleTerminalExcel.getLoadType().equals("精密加工")) { + if (objTypeDicMap.containsKey("敏感用户")) { + String objTypeId = objTypeDicMap.get("敏感用户").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "敏感用户字典监测标签不存在,请确认后重试")); + continue; + } - } - if (monitorStateDicMap.containsKey(monitorState)) { - monitorPO.setMonitorState(monitorStateDicMap.get(monitorState).getId()); - } else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测点运行状态不存在,请确认后重试")); - continue; - } + } else if (oracleTerminalExcel.getLoadType().equals("二类变电站") || oracleTerminalExcel.getLoadType().equals("三类变电站") || oracleTerminalExcel.getLoadType().equals("四类变电站")) { + if (objTypeDicMap.containsKey("主变高压侧")) { + String objTypeId = objTypeDicMap.get("主变高压侧").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); + continue; + } + }else if(oracleTerminalExcel.getLoadType().equals("跨省计量关口")){ + if (objTypeDicMap.containsKey("跨省联络线")) { + String objTypeId = objTypeDicMap.get("跨省联络线").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "跨省联络线字典监测标签不存在,请确认后重试")); + continue; + } - monitorPO.setMonitorType(monitorType.getId()); - monitorPO.setStandShortCapacity(oracleTerminalExcel.getStandardCapacity()); - monitorPO.setMinShortCircuitCapacity(oracleTerminalExcel.getShortCapacity()); - monitorPO.setUserAgreementCapacity(oracleTerminalExcel.getDealCapacity()); - monitorPO.setPowerSupplyEqCapacity(oracleTerminalExcel.getDevCapacity()); - DictData scale = dicDataFeignClient.getDicDataById(monitorPO.getVoltageLevel()).getData(); - Overlimit overlimitTem = new Overlimit(); - COverlimitUtil.voltageDeviation(overlimitTem, Float.parseFloat(scale.getValue())); - monitorPO.setVoltageDeviationLowerLimit(overlimitTem.getUvoltageDev()); - monitorPO.setVoltageDeviationUpperLimit(overlimitTem.getVoltageDev()); - monitorPO.setPotentialTransFormerType(potentialDic.getId()); - monitorPO.setNeutralGroundingMode(neutralDic.getId()); - monitorPO.setStatisticalInterval(oracleTerminalExcel.getTimeInterval()); - monitorPO.setTerminalId(devId); - monitorPO.setIsSpecialSupplyElectricity(0); + }else if(oracleTerminalExcel.getLoadType().equals("光伏电站")){ + if (objTypeDicMap.containsKey("光伏电站")) { + String objTypeId = objTypeDicMap.get("光伏电站").getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "光伏电站字典监测标签不存在,请确认后重试")); + continue; + } - monitorPO.setMonitorObjectName(oracleTerminalExcel.getObjName()); + } else { + if (objTypeDicMap.containsKey(oracleTerminalExcel.getLoadType())) { + String objTypeId = objTypeDicMap.get(oracleTerminalExcel.getLoadType()).getId(); + monitorPO.setMonitorTag(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); + continue; + } + } + //监测点对象类型 - if(oracleTerminalExcel.getLoadType().equals("电加热负荷") || oracleTerminalExcel.getLoadType().equals("商业/市政/民用/电子通讯负荷") ||oracleTerminalExcel.getLoadType().equals("其他非线性负荷")){ - if (objTypeDicMap.containsKey(oracleTerminalExcel.getLoadType())) { - String objTypeId = objTypeDicMap.get("冶炼负荷").getId(); - monitorPO.setMonitorTag(objTypeId); - }else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); - continue; - } - }else if(oracleTerminalExcel.getLoadType().equals("半导体制造") ||oracleTerminalExcel.getLoadType().equals("精密加工")){ - if (objTypeDicMap.containsKey(oracleTerminalExcel.getLoadType())) { - String objTypeId = objTypeDicMap.get("重要或敏感用户").getId(); - monitorPO.setMonitorTag(objTypeId); - }else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); - continue; - } + if (objTypeMap.containsKey(oracleTerminalExcel.getLoadType())) { + String objTypeId = objTypeMap.get(oracleTerminalExcel.getLoadType()).getId(); + monitorPO.setObjType(objTypeId); + }else if(oracleTerminalExcel.getLoadType().equals("电加热负荷")){ + String objTypeId = objTypeMap.get("电加热负荷(含电弧炉、中频炉、电热炉、单/多晶硅生产设备)").getId(); + monitorPO.setObjType(objTypeId); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, oracleTerminalExcel.getLoadType() + "字典监测点对象类型不存在,请确认后重试")); + continue; + } - }else if(oracleTerminalExcel.getLoadType().equals("二类变电站") ||oracleTerminalExcel.getLoadType().equals("三类变电站") ||oracleTerminalExcel.getLoadType().equals("四类变电站")){ - if (objTypeDicMap.containsKey(oracleTerminalExcel.getLoadType())) { - String objTypeId = objTypeDicMap.get("主变低压侧").getId(); - monitorPO.setMonitorTag(objTypeId); - }else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); - continue; - } - }else { - if (objTypeDicMap.containsKey(oracleTerminalExcel.getLoadType())) { - String objTypeId = objTypeDicMap.get(oracleTerminalExcel.getLoadType()).getId(); - monitorPO.setMonitorTag(objTypeId); - } else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典监测标签不存在,请确认后重试")); - continue; - } - } - - - //监测点对象类型 - - if (objTypeMap.containsKey(oracleTerminalExcel.getLoadType())) { - String objTypeId = objTypeMap.get(oracleTerminalExcel.getLoadType()).getId(); - monitorPO.setObjType(objTypeId); - } else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, oracleTerminalExcel.getLoadType()+"字典监测点对象类型不存在,请确认后重试")); - continue; - } - - //行业类型 + //行业类型 /* if (businessDicMap.containsKey(oracleTerminalExcel.getBusinessType())) { String busTypeId = businessDicMap.get(oracleTerminalExcel.getBusinessType()).getId(); monitorPO.setTradeCode(busTypeId); @@ -1667,92 +1705,93 @@ public class MonitorServiceImpl extends ServiceImpl impl continue; }*/ - //TODO 监测点对象名称 + //TODO 监测点对象名称 - String wireMethod = ""; - switch (oracleTerminalExcel.getPtType()) { - case 0: - wireMethod = DicDataEnum.STAR.getName(); - break; - case 1: - wireMethod = DicDataEnum.STAR_TRIANGLE.getName(); - break; - case 2: - wireMethod = DicDataEnum.OPEN_DELTA.getName(); - break; - default: - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典接线方式不存在,请确认后重试")); - break; - } - if (wireListMap.containsKey(wireMethod)) { - monitorPO.setTerminalWiringMethod(wireListMap.get(wireMethod).getId()); - } else { - oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典接线方式不存在,请确认后重试")); - continue; - } + String wireMethod = ""; + switch (oracleTerminalExcel.getPtType()) { + case 0: + wireMethod = DicDataEnum.STAR.getName(); + break; + case 1: + wireMethod = DicDataEnum.STAR_TRIANGLE.getName(); + break; + case 2: + wireMethod = DicDataEnum.OPEN_DELTA.getName(); + break; + default: + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典接线方式不存在,请确认后重试")); + break; + } + if (wireListMap.containsKey(wireMethod)) { + monitorPO.setTerminalWiringMethod(wireListMap.get(wireMethod).getId()); + } else { + oracleTerminalExcelMsg.add(assembleMsg(oracleTerminalExcel, "字典接线方式不存在,请确认后重试")); + continue; + } - monitorPO.setStatus(DataStateEnum.ENABLE.getCode()); - monitorPO.setIsSpecialMonitor(0); - monitorPO.setPt1(oracleTerminalExcel.getPt1()); - monitorPO.setPt2(oracleTerminalExcel.getPt2()); - monitorPO.setCt1(oracleTerminalExcel.getCt1()); - monitorPO.setCt2(oracleTerminalExcel.getCt2()); + monitorPO.setStatus(DataStateEnum.ENABLE.getCode()); + monitorPO.setIsSpecialMonitor(0); + monitorPO.setPt1(oracleTerminalExcel.getPt1()); + monitorPO.setPt2(oracleTerminalExcel.getPt2()); + monitorPO.setCt1(oracleTerminalExcel.getCt1()); + monitorPO.setCt2(oracleTerminalExcel.getCt2()); - if(oracleTerminalExcel.getLoadType().equals("光伏电站") || oracleTerminalExcel.getLoadType().equals("风电场")){ - monitorPO.setFieldStation("01"); - } + if (oracleTerminalExcel.getLoadType().equals("光伏电站") || oracleTerminalExcel.getLoadType().equals("风电场")) { + monitorPO.setFieldStation("01"); + } - if(oracleTerminalExcel.getPowerFlag() == 0){ - monitorPO.setPowerFlag("101"); - }else if(oracleTerminalExcel.getPowerFlag() == 1){ - monitorPO.setPowerFlag("102"); - } + if (oracleTerminalExcel.getPowerFlag() == 0) { + monitorPO.setPowerFlag("101"); + } else if (oracleTerminalExcel.getPowerFlag() == 1) { + monitorPO.setPowerFlag("102"); + } + if (Objects.isNull(lineBak) && Objects.isNull(monitor)) { + monitorPO.setIsUpToGrid(0); + monitorMapper.insert(monitorPO); + Overlimit overlimit = COverlimitUtil.globalAssemble(Float.parseFloat(scale.getValue()), oracleTerminalExcel.getDealCapacity(), oracleTerminalExcel.getDevCapacity(), oracleTerminalExcel.getShortCapacity(), 0, 0); + overlimit.setId(monitorPO.getId()); + Overlimit overlimitRes = overlimitMapper.selectById(monitorPO.getId()); + if (Objects.isNull(overlimitRes)) { + overlimitMapper.insert(overlimit); + } else { + overlimitMapper.updateById(overlimit); + } + LineBak lineBakPO = new LineBak(); + lineBakPO.setId(monitorPO.getId()); + lineBakPO.setLineId(oracleTerminalExcel.getId()); + lineBakMapper.insert(lineBakPO); + } else { + if (Objects.isNull(lineBak)) { + LineBak lineBakPO = new LineBak(); + lineBakPO.setId(monitor.getId()); + lineBakPO.setLineId(oracleTerminalExcel.getId()); + lineBakMapper.insert(lineBakPO); + monitorMapper.updateById(monitorPO); + } else if (Objects.isNull(monitor)) { + monitorPO.setIsUpToGrid(0); + monitorMapper.deleteById(lineBak.getId()); + monitorPO.setId(lineBak.getId()); + monitorMapper.insert(monitorPO); + } else { + monitorPO.setId(lineBak.getId()); + monitorMapper.updateById(monitorPO); + } - if (Objects.isNull(lineBak) && Objects.isNull(monitor)) { - monitorPO.setIsUpToGrid(0); - monitorMapper.insert(monitorPO); - Overlimit overlimit = COverlimitUtil.globalAssemble(Float.parseFloat(scale.getValue()), oracleTerminalExcel.getDealCapacity(), oracleTerminalExcel.getDevCapacity(), oracleTerminalExcel.getShortCapacity(), 0, 0); - overlimit.setId(monitorPO.getId()); - Overlimit overlimitRes = overlimitMapper.selectById(monitorPO.getId()); - if (Objects.isNull(overlimitRes)) { - overlimitMapper.insert(overlimit); - } else { - overlimitMapper.updateById(overlimit); - } + Overlimit overlimit = COverlimitUtil.globalAssemble(Float.parseFloat(scale.getValue()), oracleTerminalExcel.getDealCapacity(), oracleTerminalExcel.getDevCapacity(), oracleTerminalExcel.getShortCapacity(), 0, 0); + overlimit.setId(monitorPO.getId()); + Overlimit overlimitRes = overlimitMapper.selectById(monitorPO.getId()); + if (Objects.isNull(overlimitRes)) { + overlimitMapper.insert(overlimit); + } else { + overlimitMapper.updateById(overlimit); + } - LineBak lineBakPO = new LineBak(); - lineBakPO.setId(monitorPO.getId()); - lineBakPO.setLineId(oracleTerminalExcel.getId()); - lineBakMapper.insert(lineBakPO); - } else { - if (Objects.isNull(lineBak)) { - LineBak lineBakPO = new LineBak(); - lineBakPO.setId(monitor.getId()); - lineBakPO.setLineId(oracleTerminalExcel.getId()); - lineBakMapper.insert(lineBakPO); - monitorMapper.updateById(monitorPO); - } else if (Objects.isNull(monitor)) { - monitorPO.setIsUpToGrid(0); - monitorMapper.deleteById(lineBak.getId()); - monitorPO.setId(lineBak.getId()); - monitorMapper.insert(monitorPO); - } else { - monitorPO.setId(lineBak.getId()); - monitorMapper.updateById(monitorPO); - } - - Overlimit overlimit = COverlimitUtil.globalAssemble(Float.parseFloat(scale.getValue()), oracleTerminalExcel.getDealCapacity(), oracleTerminalExcel.getDevCapacity(), oracleTerminalExcel.getShortCapacity(), 0, 0); - overlimit.setId(monitorPO.getId()); - Overlimit overlimitRes = overlimitMapper.selectById(monitorPO.getId()); - if (Objects.isNull(overlimitRes)) { - overlimitMapper.insert(overlimit); - } else { - overlimitMapper.updateById(overlimit); + } } } diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/controller/majornetwork/RmpEventDetailController.java b/pqs-event/event-boot/src/main/java/com/njcn/event/controller/majornetwork/RmpEventDetailController.java index bce381dd2..fa4fa5411 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/controller/majornetwork/RmpEventDetailController.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/controller/majornetwork/RmpEventDetailController.java @@ -139,7 +139,7 @@ public class RmpEventDetailController extends BaseController { */ @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getImMonitorEvents") - @ApiOperation("暂降事件记录") + @ApiOperation("查询重要监测点指定时间发生的暂降次数") public HttpResult>> getImMonitorEvents(@RequestBody EventBaseParam param) { String methodDescribe = getMethodDescribe("getImMonitorEvents"); List> result = rmpEventDetailService.getImMonitorEvents(param); diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/RmpEventDetailServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/RmpEventDetailServiceImpl.java index c62c5980f..b9322b6b7 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/RmpEventDetailServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/RmpEventDetailServiceImpl.java @@ -399,6 +399,7 @@ public class RmpEventDetailServiceImpl extends ServiceImpl> getImMonitorEvents(EventBaseParam param) { + List> mapList = new ArrayList<>(); DictData eventDic = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.VOLTAGE_DIP.getCode(),DicDataTypeEnum.EVENT_STATIS.getCode()).getData(); DictData dictData = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.MOST_IMPORMENT.getCode(),DicDataTypeEnum.DEV_GRADE.getCode()).getData(); @@ -408,6 +409,9 @@ public class RmpEventDetailServiceImpl extends ServiceImpl lineIds = lineFeignClient.getLevelMonitorIdByDept(dictData.getId(),param.getDeptId()).getData(); + if(CollUtil.isEmpty(lineIds)){ + return mapList; + } queryWrapper.in("measurement_point_id",lineIds); } @@ -415,13 +419,17 @@ public class RmpEventDetailServiceImpl extends ServiceImpl> mapList = this.baseMapper.selectMaps(queryWrapper); + mapList = this.baseMapper.selectMaps(queryWrapper); + if(CollUtil.isEmpty(mapList)){ + return mapList; + } List ids = mapList.stream().map(it->it.get("lineId").toString()).distinct().collect(Collectors.toList()); - List lineList = lineFeignClient.getBaseLineList(ids).getData(); - Map lineMap = lineList.stream().collect(Collectors.toMap(Line::getId,Function.identity())); + List lineList = lineFeignClient.getBaseLineAreaInfo(ids).getData(); + Map lineMap = lineList.stream().collect(Collectors.toMap(AreaLineInfoVO::getLineId,Function.identity())); mapList.forEach(item->{ - item.put("lineName",lineMap.get(item.get("lineId")).getName()); + AreaLineInfoVO tem = lineMap.get(item.get("lineId").toString()); + item.put("lineName",tem.getVoltageName()+"_"+tem.getLineName()); }); return mapList; 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 f28021fb1..02dc46a3e 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 @@ -74,6 +74,10 @@ import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -112,6 +116,9 @@ public class CustomReportServiceImpl implements CustomReportService { private final WlRecordFeignClient wlRecordFeignClient; + private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1); + + @Override public boolean addCustomReportTemplate(ReportTemplateParam reportTemplateParam) { checkName(reportTemplateParam, false); @@ -251,18 +258,16 @@ public class CustomReportServiceImpl implements CustomReportService { if (Objects.isNull(excelRptTemp)) { throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_ACTIVE); } - if(Objects.isNull(reportSearchParam.getCustomType())){ + if (Objects.isNull(reportSearchParam.getCustomType())) { //通用报表 analyzeReport(reportSearchParam, excelRptTemp, response); - }else { + } else { //浙江无线报表 analyzeReportZhejiang(reportSearchParam, excelRptTemp, response); } } - - @Override public List reportChooseTree() { DictData dic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.CS_DATA_TYPE.getName(), DicDataEnum.EPD.getName()).getData(); @@ -598,6 +603,8 @@ public class CustomReportServiceImpl implements CustomReportService { System.out.println(sql); long l = System.currentTimeMillis(); + + List> mapList = SqlRunner.db().selectList(sql.toString()); long la = System.currentTimeMillis(); @@ -652,6 +659,7 @@ public class CustomReportServiceImpl implements CustomReportService { */ private void analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp, HttpServletResponse response) { + List> futures = new ArrayList<>(); long begin = System.currentTimeMillis(); @@ -688,54 +696,591 @@ public class CustomReportServiceImpl implements CustomReportService { //定义存放越限指标的map Map assNoPassMap = new HashMap<>(); long deal = System.currentTimeMillis(); - 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)) { - assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); - } 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_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); - } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { - assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + + + 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) -> { + futures.add(executorService.submit(() -> { + StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); + if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) { + assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } 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_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { + assSqlNew(phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap); + } + })); + }); + + }); + + + }); + + + // 等待所有任务完成 + for (Future future : futures) { + try { + future.get(); // 这会阻塞直到任务完成或抛出异常 + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + + + //处理指标最终判定合格还是不合格 + dealTargetResult(assNoPassMap, limitTargetMapX, endList); + + 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); + //进行反向赋值到模板 + //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"); + } - //处理指标最终判定合格还是不合格 - dealTargetResult(assNoPassMap,limitTargetMapX,endList); - long dealEnd = System.currentTimeMillis(); - System.out.println("模板解析时间:" + (temEnd - begin) / 1000 + "S"); - System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S"); + long daochu = System.currentTimeMillis(); + //导出自定义报表 + downReport(jsonArray, response); + long daochuEnd = System.currentTimeMillis(); + System.out.println("导出耗时 " + (daochuEnd - daochu) / 1000 + "S"); + } - if (CollUtil.isNotEmpty(endList)) { - long jie = System.currentTimeMillis(); - //数据单位信息 - Map unit = unitMap(reportSearchParam); - //进行反向赋值到模板 - //1、根据itemName分组 - Map> assMap = endList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getItemName)); - //处理台账信息 - Map terminalMap = null; + /** + * 解析模板 + * + * @author cdf + * @date 2023/10/20 + */ + private void parseTemplate (JSONArray + jsonArray, List < ReportTemplateDTO > reportTemplateDTOList, List < ReportTemplateDTO > reportLimitList, List < ReportTemplateDTO > terminalList) + { + try { + //通过文件服务器获取 + + jsonArray.forEach(item -> { + JSONObject jsonObject = (JSONObject) item; + JSONArray itemArr = (JSONArray) jsonObject.get("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 < ReportTemplateDTO > reportLimitList, ReportSearchParam + reportSearchParam){ + 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(reportSearchParam.getLineId()).append("'"); + limitMap = excelRptTempMapper.dynamicSqlMap(sql.toString()); + if (Objects.isNull(limitMap)) { + throw new BusinessException("当前测点限值缺失!"); + } + + for (ReportTemplateDTO item : reportLimitList) { + if (limitMap.containsKey(item.getTemplateName())) { + item.setValue(limitMap.get(item.getTemplateName()).toString()); + } + } + } + return limitMap; + } + + /** + * 报告下载 + */ + private void downReport (JSONArray jsonArray, HttpServletResponse response){ + 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"); + //入库前判断是否有了,有了就更新 + + 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); + } + } + + + private void analyzeReportZhejiang (ReportSearchParam reportSearchParam, ExcelRptTemp + excelRptTemp, HttpServletResponse response){ + + //指标 + 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())); + parseTemplateZhejiang(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); + } catch (Exception e) { + throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); + } + + //处理指标是否合格 + reportLimitList = new LinkedHashSet<>(reportLimitList) + .stream() + .sorted(Comparator.comparing(ReportTemplateDTO::getItemName)) + .collect(Collectors.toList()); + + 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)) { + + //组装最后监测点条件 + List wlRecordList = wlRecordFeignClient.getWlAssByWlId(reportSearchParam.getLineId()).getData(); + if (CollUtil.isEmpty(wlRecordList)) { + throw new BusinessException("当前测试项无测试数据"); + } + + //开始组织sql + reportTemplateDTOList = new LinkedHashSet<>(reportTemplateDTOList) + .stream() + .sorted(Comparator.comparing(ReportTemplateDTO::getItemName)) + .collect(Collectors.toList()); + + + Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getResourceId)); + Map assNoPassMap = new HashMap<>(); + long deal = System.currentTimeMillis(); + 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)) { + assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); + } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { + assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); + } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { + assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); + } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { + assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); + } + }); + }); + + }); + + //处理指标最终判定合格还是不合格 + dealTargetResult(assNoPassMap, limitTargetMapX, endList); + + long dealEnd = System.currentTimeMillis(); + System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S"); + } + + + if (CollUtil.isNotEmpty(endList)) { + long jie = System.currentTimeMillis(); + //数据单位信息 + Map unit = unitMap(reportSearchParam); + //进行反向赋值到模板 + //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; + Map finalTerminalMap = terminalMap;*/ - //2、把itemName的value赋给v和m + //2、把itemName的value赋给v和m + dealExcelResult(jsonArray, assMap, unit); + long jieEnd = System.currentTimeMillis(); + + System.out.println("组装信息耗时 " + (jieEnd - jie) / 1000 + "S"); + } + + + long daochu = System.currentTimeMillis(); + //导出自定义报表 + downReport(jsonArray, response); + long daochuEnd = System.currentTimeMillis(); + System.out.println("导出耗时 " + (daochuEnd - daochu) / 1000 + "S"); + + } + + + private void assSqlZhejiang (List < ReportTemplateDTO > data, StringBuilder + sql, List < ReportTemplateDTO > endList, String method, ReportSearchParam + reportSearchParam, Map < String, ReportTemplateDTO > limitMap, Map < String, Float > overLimitMap, Map < String, ReportTemplateDTO > assNoPassMap, List < WlRecord > wlRecordList) + { + //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)) { + for (int i = 0; i < data.size(); i++) { + if (i == data.size() - 1) { + sql.append(InfluxDbSqlConstant.PERCENTILE) + .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(InfluxDbSqlConstant.PERCENTILE) + .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); + } + } + } else { + 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(StrPool.C_SPACE).append(InfluxDbSqlConstant.FROM).append("pqd_data"); + //相别特殊处理 + sql.append(InfluxDbSqlConstant.WHERE) + .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 + sql.append(InfluxDbSqlConstant.AND) + .append(InfluxDBTableConstant.VALUE_TYPE) + .append(InfluxDbSqlConstant.EQ) + .append(InfluxDbSqlConstant.QM) + .append(data.get(0).getStatMethod().toLowerCase()) + .append(InfluxDbSqlConstant.QM); + + List> allList = new ArrayList<>(); + for (WlRecord wlRecord : wlRecordList) { + StringBuilder temSql = new StringBuilder(sql); + String start = LocalDateTimeUtil.format(wlRecord.getStartTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); + String end = LocalDateTimeUtil.format(wlRecord.getEndTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); + temSql.append(" and line_id = '").append(wlRecord.getLineId()).append(InfluxDbSqlConstant.QM) + .append(InfluxDbSqlConstant.AND) + .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(start).append(InfluxDbSqlConstant.QM) + .append(InfluxDbSqlConstant.AND) + .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(end).append(InfluxDbSqlConstant.QM) + .append(InfluxDbSqlConstant.TZ); + + List> temMapList = influxDbUtils.getMapResult(temSql.toString()); + if (CollUtil.isNotEmpty(temMapList)) { + allList.add(temMapList.get(0)); + } + } + + Map resultMap = dealResultMap(method, allList); + if (resultMap.isEmpty()) { + data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList()); + } else { + for (ReportTemplateDTO item : data) { + if (resultMap.containsKey(item.getItemName())) { + double v = (Double) resultMap.get(item.getItemName()); + item.setValue(String.format("%.3f", v)); + + + if (overLimitMap.containsKey(item.getLimitName())) { + Float tagVal = overLimitMap.get(item.getLimitName()); + if (v > tagVal) { + item.setOverLimitFlag(1); + } else { + item.setOverLimitFlag(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); + tem.setValue(tem.getValue()); + assNoPassMap.put(key, tem); + } else if (!assNoPassMap.containsKey(key)) { + tem.setOverLimitFlag(0); + tem.setValue(tem.getValue()); + assNoPassMap.put(key, tem); + } + } + } else { + item.setValue("/"); + } + } + } + + endList.addAll(data); + } + + + private Map dealResultMap (String method, List < Map < String, Object >> allList){ + Map resultMap = new HashMap<>(); + // 遍历列表中的每个Map + if (method.equals(InfluxDbSqlConstant.MIN)) { + for (Map map : allList) { + // 遍历当前Map的键值对 + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + if (!key.equals("time")) { + double value = (double) entry.getValue(); + // 检查结果Map中是否已包含该键 + if (!resultMap.containsKey(key) || (double) resultMap.get(key) > value) { + // 如果不包含,或当前值更大,则更新结果Map + resultMap.put(key, value); + } + } + } + } + } else if (method.equals(InfluxDbSqlConstant.MAX) || method.equals(InfluxDbSqlConstant.PERCENTILE)) { + for (Map map : allList) { + // 遍历当前Map的键值对 + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + if (!key.equals("time")) { + double value = (double) entry.getValue(); + // 检查结果Map中是否已包含该键 + if (!resultMap.containsKey(key) || (double) resultMap.get(key) < value) { + // 如果不包含,或当前值更大,则更新结果Map + resultMap.put(key, value); + } + } + } + } + } else if (method.equals(InfluxDbSqlConstant.AVG)) { + Map sumMap = new HashMap<>(); + Map countMap = new HashMap<>(); + // 遍历列表中的每个Map + for (Map map : allList) { + // 遍历当前Map的键值对 + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + if (!key.equals("time")) { + double value = (double) entry.getValue(); + + // 更新累计和 + sumMap.put(key, sumMap.getOrDefault(key, 0.0) + value); + // 更新计数 + countMap.put(key, countMap.getOrDefault(key, 0) + 1); + } + } + } + + // 计算平均值并存储到结果Map中 + for (String key : sumMap.keySet()) { + double sum = sumMap.get(key); + int count = countMap.get(key); + double average = BigDecimal.valueOf(sum / count).setScale(3, RoundingMode.HALF_UP).doubleValue(); + resultMap.put(key, average); + } + } + + return resultMap; + } + + + private void dealExcelResult (JSONArray + jsonArray, Map < String, List < ReportTemplateDTO >> assMap, Map < String, String > unit){ jsonArray.forEach(item -> { JSONObject jsonObject = (JSONObject) item; JSONArray itemArr = (JSONArray) jsonObject.get("celldata"); @@ -776,521 +1321,7 @@ public class CustomReportServiceImpl implements CustomReportService { son.set("fc", "#990000"); } } - } else if (v.charAt(0) == '&') { - //结论 - String tem = v.replace("&", ""); - if (Objects.nonNull(finalTerminalMap)) { - if ("statis_time".equals(tem)) { - son.set("v", reportSearchParam.getStartTime() + InfluxDbSqlConstant.START_TIME + "_" + reportSearchParam.getEndTime() + InfluxDbSqlConstant.END_TIME); - } else { - //台账信息 - son.set("v", finalTerminalMap.getOrDefault(tem, "/")); - } - } - } - //解决数据单位问题 @指标#类型@ - if (v.charAt(0) == '@' && v.contains("#")) { - 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(); - //导出自定义报表 - downReport(jsonArray, response); - 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, ReportSearchParam reportSearchParam) { - 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(reportSearchParam.getLineId()).append("'"); - limitMap = excelRptTempMapper.dynamicSqlMap(sql.toString()); - if (Objects.isNull(limitMap)) { - throw new BusinessException("当前测点限值缺失!"); - } - - for (ReportTemplateDTO item : reportLimitList) { - if (limitMap.containsKey(item.getTemplateName())) { - item.setValue(limitMap.get(item.getTemplateName()).toString()); - } - } - } - return limitMap; - } - - /** - * 报告下载 - */ - private void downReport(JSONArray jsonArray, HttpServletResponse response) { - 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"); - //入库前判断是否有了,有了就更新 - - 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); - } - } - - - private void analyzeReportZhejiang(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp, HttpServletResponse response) { - - //指标 - 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())); - parseTemplateZhejiang(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); - } catch (Exception e) { - throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); - } - - - long temEnd = System.currentTimeMillis(); - - - //处理指标是否合格 - reportLimitList = new LinkedHashSet<>(reportLimitList) - .stream() - .sorted(Comparator.comparing(ReportTemplateDTO::getItemName)) - .collect(Collectors.toList()); - - 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)) { - - //组装最后监测点条件 - List wlRecordList = wlRecordFeignClient.getWlAssByWlId(reportSearchParam.getLineId()).getData(); - if (CollUtil.isEmpty(wlRecordList)) { - throw new BusinessException("当前测试项无测试数据"); - } - - //开始组织sql - reportTemplateDTOList = new LinkedHashSet<>(reportTemplateDTOList) - .stream() - .sorted(Comparator.comparing(ReportTemplateDTO::getItemName)) - .collect(Collectors.toList()); - - - Map> classMap = reportTemplateDTOList.stream().collect(Collectors.groupingBy(ReportTemplateDTO::getResourceId)); - Map assNoPassMap = new HashMap<>(); - long deal = System.currentTimeMillis(); - 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)) { - assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); - } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { - assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); - } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { - assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.AVG, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); - } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { - assSqlZhejiang(phaseVal, sql, endList, InfluxDbSqlConstant.PERCENTILE, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, wlRecordList); - } - }); - }); - - }); - - //处理指标最终判定合格还是不合格 - dealTargetResult(assNoPassMap,limitTargetMapX,endList); - - long dealEnd = System.currentTimeMillis(); - System.out.println("查询数据库花费时间" + (dealEnd - deal) / 1000 + "S"); - } - - - if (CollUtil.isNotEmpty(endList)) { - long jie = System.currentTimeMillis(); - //数据单位信息 - Map unit = unitMap(reportSearchParam); - //进行反向赋值到模板 - //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 - dealExcelResult(jsonArray,assMap,unit); - long jieEnd = System.currentTimeMillis(); - - System.out.println("组装信息耗时 " + (jieEnd - jie) / 1000 + "S"); - } - - - long daochu = System.currentTimeMillis(); - //导出自定义报表 - downReport(jsonArray, response); - long daochuEnd = System.currentTimeMillis(); - System.out.println("导出耗时 " + (daochuEnd - daochu) / 1000 + "S"); - - } - - - private void assSqlZhejiang(List data, StringBuilder sql, List endList, String method, ReportSearchParam reportSearchParam, Map limitMap, Map overLimitMap, Map assNoPassMap, List wlRecordList) { - //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)) { - for (int i = 0; i < data.size(); i++) { - if (i == data.size() - 1) { - sql.append(InfluxDbSqlConstant.PERCENTILE) - .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(InfluxDbSqlConstant.PERCENTILE) - .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); - } - } - } else { - 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(StrPool.C_SPACE).append(InfluxDbSqlConstant.FROM).append("pqd_data"); - //相别特殊处理 - sql.append(InfluxDbSqlConstant.WHERE) - .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 - sql.append(InfluxDbSqlConstant.AND) - .append(InfluxDBTableConstant.VALUE_TYPE) - .append(InfluxDbSqlConstant.EQ) - .append(InfluxDbSqlConstant.QM) - .append(data.get(0).getStatMethod().toLowerCase()) - .append(InfluxDbSqlConstant.QM); - - List> allList = new ArrayList<>(); - for (WlRecord wlRecord : wlRecordList) { - StringBuilder temSql = new StringBuilder(sql); - String start = LocalDateTimeUtil.format(wlRecord.getStartTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); - String end = LocalDateTimeUtil.format(wlRecord.getEndTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); - temSql.append(" and line_id = '").append(wlRecord.getLineId()).append(InfluxDbSqlConstant.QM) - .append(InfluxDbSqlConstant.AND) - .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(start).append(InfluxDbSqlConstant.QM) - .append(InfluxDbSqlConstant.AND) - .append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(end).append(InfluxDbSqlConstant.QM) - .append(InfluxDbSqlConstant.TZ); - - List> temMapList = influxDbUtils.getMapResult(temSql.toString()); - if (CollUtil.isNotEmpty(temMapList)) { - allList.add(temMapList.get(0)); - } - } - - Map resultMap = dealResultMap(method, allList); - if (resultMap.isEmpty()) { - data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList()); - } else { - for (ReportTemplateDTO item : data) { - if (resultMap.containsKey(item.getItemName())) { - double v = (Double) resultMap.get(item.getItemName()); - item.setValue(String.format("%.3f", v)); - - - if (overLimitMap.containsKey(item.getLimitName())) { - Float tagVal = overLimitMap.get(item.getLimitName()); - if (v > tagVal) { - item.setOverLimitFlag(1); - } else { - item.setOverLimitFlag(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); - tem.setValue(tem.getValue()); - assNoPassMap.put(key, tem); - } else if (!assNoPassMap.containsKey(key)) { - tem.setOverLimitFlag(0); - tem.setValue(tem.getValue()); - assNoPassMap.put(key, tem); - } - } - } else { - item.setValue("/"); - } - } - } - - endList.addAll(data); - } - - - private Map dealResultMap(String method, List> allList) { - Map resultMap = new HashMap<>(); - // 遍历列表中的每个Map - if (method.equals(InfluxDbSqlConstant.MIN)) { - for (Map map : allList) { - // 遍历当前Map的键值对 - for (Map.Entry entry : map.entrySet()) { - String key = entry.getKey(); - if (!key.equals("time")) { - double value = (double) entry.getValue(); - // 检查结果Map中是否已包含该键 - if (!resultMap.containsKey(key) || (double) resultMap.get(key) > value) { - // 如果不包含,或当前值更大,则更新结果Map - resultMap.put(key, value); - } - } - } - } - } else if (method.equals(InfluxDbSqlConstant.MAX) || method.equals(InfluxDbSqlConstant.PERCENTILE)) { - for (Map map : allList) { - // 遍历当前Map的键值对 - for (Map.Entry entry : map.entrySet()) { - String key = entry.getKey(); - if (!key.equals("time")) { - double value = (double) entry.getValue(); - // 检查结果Map中是否已包含该键 - if (!resultMap.containsKey(key) || (double) resultMap.get(key) < value) { - // 如果不包含,或当前值更大,则更新结果Map - resultMap.put(key, value); - } - } - } - } - } else if (method.equals(InfluxDbSqlConstant.AVG)) { - Map sumMap = new HashMap<>(); - Map countMap = new HashMap<>(); - // 遍历列表中的每个Map - for (Map map : allList) { - // 遍历当前Map的键值对 - for (Map.Entry entry : map.entrySet()) { - String key = entry.getKey(); - if (!key.equals("time")) { - double value = (double) entry.getValue(); - - // 更新累计和 - sumMap.put(key, sumMap.getOrDefault(key, 0.0) + value); - // 更新计数 - countMap.put(key, countMap.getOrDefault(key, 0) + 1); - } - } - } - - // 计算平均值并存储到结果Map中 - for (String key : sumMap.keySet()) { - double sum = sumMap.get(key); - int count = countMap.get(key); - double average = BigDecimal.valueOf(sum / count).setScale(3, RoundingMode.HALF_UP).doubleValue(); - resultMap.put(key, average); - } - } - - return resultMap; - } - - - private void dealExcelResult(JSONArray jsonArray,Map> assMap,Map unit){ - 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) == '&') { + } /*else if (v.charAt(0) == '&') { //结论 String tem = v.replace("&", ""); if (Objects.nonNull(finalTerminalMap)) { @@ -1302,128 +1333,132 @@ public class CustomReportServiceImpl implements CustomReportService { } } }*/ else if (v.charAt(0) == '@' && v.contains("#")) { - //解决数据单位问题 @指标#类型@ - String replace = v.replace("@", ""); - son.set("v", unit.getOrDefault(replace, "/")); + //解决数据单位问题 @指标#类型@ + String replace = v.replace("@", ""); + son.set("v", unit.getOrDefault(replace, "/")); - } - } - } - }); - }); - } - - - /** - * 处理指标超标结论 - */ - private void dealTargetResult(Map assNoPassMap,Map limitTargetMapX,List endList){ - 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); - }); - } - - - /** - * 解析模板 - * - * @author cdf - * @date 2023/10/20 - */ - private void parseTemplateZhejiang(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]); - 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); } + + + /** + * 处理指标超标结论 + */ + private void dealTargetResult + (Map < String, ReportTemplateDTO > assNoPassMap, Map < String, ReportTemplateDTO > limitTargetMapX, List < ReportTemplateDTO > endList) + { + 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); + }); + } + + + /** + * 解析模板 + * + * @author cdf + * @date 2023/10/20 + */ + private void parseTemplateZhejiang (JSONArray + jsonArray, List < ReportTemplateDTO > reportTemplateDTOList, List < ReportTemplateDTO > reportLimitList, List < ReportTemplateDTO > 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]); + 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); + } + } + + } -} - -