From a82529a088eb7e6f06468e76c804338eca21efaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E6=9C=A8c?= <857448963@qq.com> Date: Thu, 8 Jun 2023 10:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E6=A0=BC=E7=8E=87=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pq/api/GeneralDeviceInfoClient.java | 9 + .../device/pq/api/LineIntegrityClient.java | 34 +++ .../njcn/device/pq/api/OverLimitClient.java | 32 +++ ...eneralDeviceInfoClientFallbackFactory.java | 6 + .../LineIntegrityClientFallbackFactory.java | 45 ++++ .../fallback/OverLimitFallbackFactory.java | 44 ++++ .../device/pq/pojo/po/RStatIntegrityD.java | 4 + .../GeneralDeviceInfoController.java | 5 +- .../LineIntegrityDataController.java | 31 ++- .../pq/controller/OverLimitController.java | 55 +++++ .../njcn/device/pq/mapper/DeptLineMapper.java | 3 + .../pq/mapper/mapping/DeptLineMapper.xml | 22 ++ .../device/pq/mapper/mapping/LineMapper.xml | 2 +- .../device/pq/service/DeptLineService.java | 8 + .../pq/service/DeviceOnlineService.java | 12 -- .../device/pq/service/IOverLimitService.java | 20 ++ .../pq/service/IRStatIntegrityDService.java | 2 + .../pq/service/impl/DeptLineServiceImpl.java | 5 + .../pq/service/impl/GeneralDeviceService.java | 171 +++++++-------- .../pq/service/impl/OverLimitServiceImpl.java | 20 ++ .../njcn/harmonic/pojo/dto/FpyTagContent.java | 17 ++ .../controller/report/QualifiedReport.java | 21 +- .../mapper/report/QualifiedReportMapper.java | 32 +++ .../report/mapping/QualifiedReportMapper.xml | 110 ++++++++++ .../majornetwork/QualifiedReportService.java | 8 +- .../impl/QualifiedReportServiceImpl.java | 204 +++++++++++++++++- 26 files changed, 802 insertions(+), 120 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/OverLimitClient.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/OverLimitFallbackFactory.java create mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OverLimitController.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceOnlineService.java create mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IOverLimitService.java create mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/OverLimitServiceImpl.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/FpyTagContent.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/QualifiedReportMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/mapping/QualifiedReportMapper.xml diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/GeneralDeviceInfoClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/GeneralDeviceInfoClient.java index d5f168066..fc0987855 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/GeneralDeviceInfoClient.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/GeneralDeviceInfoClient.java @@ -16,6 +16,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -113,4 +114,12 @@ public interface GeneralDeviceInfoClient { */ @PostMapping("/getOnlineRateByDevIds") HttpResult> getOnlineRateByDevIds(@RequestBody OnlineRateParam param); + + /** + * + * @author cdf + * @date 2023/6/7 + */ + @PostMapping("/deptGetRunLine") + HttpResult> deptGetRunLine(@RequestParam("deptId")String deptId); } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java new file mode 100644 index 000000000..71d9f4e66 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java @@ -0,0 +1,34 @@ +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.DeviceTreeClientFallbackFactory; +import com.njcn.device.pq.api.fallback.LineIntegrityClientFallbackFactory; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * 监测点数据完整性 + * @author cdf + * @date 2023/6/7 + */ +@FeignClient(value = ServerInfo.DEVICE, + path = "/LineIntegrityData", + fallbackFactory = LineIntegrityClientFallbackFactory.class, + contextId = "LineIntegrityData") +public interface LineIntegrityClient { + + /** + * + * @author cdf + * @date 2023/6/7 + */ + @PostMapping("/getIntegrityByLineIds") + HttpResult> getIntegrityByLineIds(@RequestBody List lineIds, @RequestParam("startTime")String startTime, @RequestParam("endTime")String endTime); +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/OverLimitClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/OverLimitClient.java new file mode 100644 index 000000000..67ff912fc --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/OverLimitClient.java @@ -0,0 +1,32 @@ +package com.njcn.device.pq.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.api.fallback.LineIntegrityClientFallbackFactory; +import com.njcn.device.pq.api.fallback.OverLimitFallbackFactory; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * 监测点数据完整性 + * @author cdf + * @date 2023/6/7 + */ +@FeignClient(value = ServerInfo.DEVICE, + path = "/overLimit", + fallbackFactory = OverLimitFallbackFactory.class,contextId = "overLimit") +public interface OverLimitClient { + + /** + * + * @author cdf + * @date 2023/6/7 + */ + @PostMapping("/getOverLimitByLineIds") + HttpResult> getOverLimitByLineIds(@RequestBody List lineIds); +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/GeneralDeviceInfoClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/GeneralDeviceInfoClientFallbackFactory.java index 1b06ecc69..3596d67f4 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/GeneralDeviceInfoClientFallbackFactory.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/GeneralDeviceInfoClientFallbackFactory.java @@ -86,6 +86,12 @@ public class GeneralDeviceInfoClientFallbackFactory implements FallbackFactory> deptGetRunLine(String deptId) { + log.error("{}异常,降级处理,异常为:{}", "获取单位投运监测点", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } }; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java new file mode 100644 index 000000000..ec130b99c --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java @@ -0,0 +1,45 @@ +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.AlarmClient; +import com.njcn.device.pq.api.LineIntegrityClient; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * 告警管理熔断降级 + * @author yzh + * @date 2022/9/19 + */ +@Slf4j +@Component +public class LineIntegrityClientFallbackFactory implements FallbackFactory { + @Override + public LineIntegrityClient 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 LineIntegrityClient() { + @Override + public HttpResult> getIntegrityByLineIds(List lineIds,String startTime,String endTime) { + log.error("{}异常,降级处理,异常为:{}", "获取监测点数据完整性", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} + diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/OverLimitFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/OverLimitFallbackFactory.java new file mode 100644 index 000000000..48d2d6fa5 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/OverLimitFallbackFactory.java @@ -0,0 +1,44 @@ +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.pojo.po.Overlimit; +import com.njcn.device.biz.utils.DeviceEnumUtil; +import com.njcn.device.pq.api.LineIntegrityClient; +import com.njcn.device.pq.api.OverLimitClient; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 告警管理熔断降级 + * @author yzh + * @date 2022/9/19 + */ +@Slf4j +@Component +public class OverLimitFallbackFactory implements FallbackFactory { + @Override + public OverLimitClient 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 OverLimitClient() { + @Override + public HttpResult> getOverLimitByLineIds(List lineIds) { + log.error("{}异常,降级处理,异常为:{}", "监测点限值", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} + diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/RStatIntegrityD.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/RStatIntegrityD.java index ab1d25648..559d0b4d0 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/RStatIntegrityD.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/RStatIntegrityD.java @@ -9,6 +9,7 @@ import java.time.LocalDateTime; import lombok.Data; import lombok.Getter; import lombok.Setter; +import org.springframework.data.annotation.Transient; /** *

@@ -34,5 +35,8 @@ public class RStatIntegrityD { private Integer realTime; + @Transient + private Float integrityData; + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java index cc2567a45..1ea373fcd 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java @@ -283,9 +283,10 @@ public class GeneralDeviceInfoController extends BaseController { @PostMapping("/deptGetRunLine") @ApiOperation("根据单位获取投运监测点") @ApiImplicitParam(name = "deptId", value = "单位部门索引", required = true) - public HttpResult> deptGetRunLine(@RequestParam("deptId")String deptId) { + public HttpResult> deptGetRunLine(@RequestParam("deptId")String deptId) { String methodDescribe = getMethodDescribe("deptGetRunLine"); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,null,methodDescribe); + List runLineIds = generalDeviceService.deptGetRunLine(deptId,Stream.of(0).collect(Collectors.toList())); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,runLineIds,methodDescribe); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java index f54a11dc7..233432960 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java @@ -1,6 +1,8 @@ package com.njcn.device.pq.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -8,7 +10,9 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; +import com.njcn.device.pq.service.IRStatIntegrityDService; import com.njcn.device.pq.service.LineIntegrityDataService; import com.njcn.harmonic.pojo.vo.IntegrityIconVO; import com.njcn.web.controller.BaseController; @@ -18,10 +22,8 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; import java.util.List; @@ -40,6 +42,8 @@ public class LineIntegrityDataController extends BaseController { private final LineIntegrityDataService lineIntegrityDataService; + private final IRStatIntegrityDService irStatIntegrityDService; + /** * 监测点数据完整性 @@ -65,4 +69,23 @@ public class LineIntegrityDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrityIconVO, methodDescribe); } + + /** + * 通过监测点集合查询监测点数据完整性 + * @author cdf + * @date 2023/6/7 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getIntegrityByLineIds") + @ApiOperation("通过监测点集合查询监测点数据完整性") + @ApiImplicitParam(name = "lineIds", value = "监测点集合", required = true) + @ApiIgnore + public HttpResult> getIntegrityByLineIds(@RequestBody List lineIds, @RequestParam("startTime")String startTime, @RequestParam("endTime")String endTime) { + String methodDescribe = getMethodDescribe("getIntegrityByLineIds"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(real_time)/sum(due_time) as integrityData","line_index").in("line_index",lineIds).between("time_id",startTime,endTime).groupBy("line_index"); + List rStatIntegrityDList = irStatIntegrityDService.list(queryWrapper); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatIntegrityDList, methodDescribe); + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OverLimitController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OverLimitController.java new file mode 100644 index 000000000..0dad9112c --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OverLimitController.java @@ -0,0 +1,55 @@ +package com.njcn.device.pq.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.njcn.common.pojo.annotation.OperateInfo; +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.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.pojo.param.AlarmStrategyParam; +import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; +import com.njcn.device.pq.service.AlarmStrategyService; +import com.njcn.device.pq.service.IOverLimitService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.List; + +/** + * 监测点限值 + * @author cdf + * @date 2023/6/7 + */ +@Slf4j +@RestController +@RequestMapping("/overLimit") +@Api(tags = "监测点限值") +@RequiredArgsConstructor +public class OverLimitController extends BaseController { + + private final IOverLimitService iOverLimitService; + + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getOverLimitByLineIds") + @ApiOperation("监测点集合获取限值") + @ApiImplicitParam(name = "lineIds", value = "监测点ids", required = true) + @ApiIgnore + public HttpResult> getOverLimitByLineIds(@RequestBody List lineIds){ + String methodDescribe = getMethodDescribe("getOverLimitByLineIds"); + List overLimitList= iOverLimitService.list(new LambdaQueryWrapper().in(Overlimit::getId,lineIds)); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, overLimitList, methodDescribe); + } + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeptLineMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeptLineMapper.java index ea73a2372..a2fd7056e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeptLineMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/DeptLineMapper.java @@ -73,4 +73,7 @@ public interface DeptLineMapper extends BaseMapper { List lineDevGet(@Param("list")List devType,@Param("type")Integer type); List orgSubStationGet(@Param("list")List devType); + + + List getLineIdByDeptIds(@Param("deptIds")List deptIds,@Param("runFlag")List runFlag); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml index c7e80b589..6e5d78116 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml @@ -84,4 +84,26 @@ #{item} + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml index bb81f02ff..7b614f9eb 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml @@ -498,7 +498,7 @@ detail.pt1, detail.pt2, detail.obj_name, - detail.Dev_Capacity, + detail.Dev_Capacity deviceCapacity, detail.Short_Capacity, detail.Standard_Capacity, detail.Deal_Capacity, diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java index 649132dc7..d2311f02a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java @@ -38,6 +38,14 @@ public interface DeptLineService extends IService { */ List selectDeptBindLines(List ids); + + /** + * 根据部门ids集合查询所有监测点id + * @param ids 部门ids + * @return 查询结果 + */ + List getLineByDeptIds(List ids,List runFlag); + /** * 部门解除绑定监测点 * @param id 部门id diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceOnlineService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceOnlineService.java deleted file mode 100644 index 411a07970..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceOnlineService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.njcn.device.pq.service; - -/** - * @version 1.0.0 - * @author: chenchao - * @date: 2022/08/15 15:33 - */ -public interface DeviceOnlineService { - - - -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IOverLimitService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IOverLimitService.java new file mode 100644 index 000000000..c49693a6c --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IOverLimitService.java @@ -0,0 +1,20 @@ +package com.njcn.device.pq.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; + +/** + *

+ * 越限表实体 + *

+ * + * @author hongawen + * @since 2023-03-28 + */ +public interface IOverLimitService extends IService { + + + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java index 3b3a36040..e24e99a41 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java @@ -14,4 +14,6 @@ import com.njcn.device.pq.pojo.po.RStatIntegrityD; */ public interface IRStatIntegrityDService extends IService { + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java index 2806d651d..0dda45dc2 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java @@ -60,6 +60,11 @@ public class DeptLineServiceImpl extends ServiceImpl i return this.lambdaQuery().in(DeptLine::getId, ids).list(); } + @Override + public List getLineByDeptIds(List ids,List runFlag) { + return this.baseMapper.getLineIdByDeptIds(ids,runFlag); + } + @Override public int removeBind(String id) { QueryWrapper deptLineQueryWrapper = new QueryWrapper<>(); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java index 69fea8ffd..7fba854e0 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java @@ -43,7 +43,7 @@ import java.util.stream.Stream; /** * 终端信息处理器,根据需求返回笼统的台账信息。 -ii * 包括:类别名称、类别索引、监测点索引集合、终端索引集合、变电站索引集bb合、供电公司索引集合。 + * ii * 包括:类别名称、类别索引、监测点索引集合、终端索引集合、变电站索引集bb合、供电公司索引集合。 * PS:若后期需要比如:省会、项目时再动态添加。 * * @author hongawen @@ -139,7 +139,7 @@ public class GeneralDeviceService { return generalDeviceDTO; } //获取line详细数据 - List lines = terminalBaseService. getLineByCondition(deptLines.stream().map(DeptLine::getLineId).collect(Collectors.toList()), deviceInfoParam); + List lines = terminalBaseService.getLineByCondition(deptLines.stream().map(DeptLine::getLineId).collect(Collectors.toList()), deviceInfoParam); //返回空数据 if (CollectionUtil.isEmpty(lines)) { return generalDeviceDTO; @@ -200,7 +200,7 @@ public class GeneralDeviceService { public List getDeviceInfoAsSubstation(DeviceInfoParam deviceInfoParam, List runFlag, List devModel) { List deviceInfoAsSubstation = new ArrayList<>(); List scale = new ArrayList<>(); - if(CollUtil.isNotEmpty(deviceInfoParam.getScale())){ + if (CollUtil.isNotEmpty(deviceInfoParam.getScale())) { scale = deviceInfoParam.getScale().stream().map(SimpleDTO::getId).collect(Collectors.toList()); deviceInfoParam.setScale(new ArrayList<>()); } @@ -219,7 +219,7 @@ public class GeneralDeviceService { substationIds = substationIds.stream().distinct().collect(Collectors.toList()); lineIds = lineIds.stream().distinct().collect(Collectors.toList()); if (!CollectionUtil.isEmpty(substationIds)) { - List substations = terminalBaseService.getSubstationByIds(substationIds,scale); + List substations = terminalBaseService.getSubstationByIds(substationIds, scale); List lines = terminalBaseService.getLineById(lineIds); for (Line substation : substations) { deviceInfoAsSubstation.add(mergeDeviceInfoAsSubstation(substation, lines)); @@ -375,9 +375,9 @@ public class GeneralDeviceService { /** * 根据部门id集合获取监测点信息 * - * @param directDeptDTO 入参deptIndex的直接子部门 + * @param directDeptDTO 入参deptIndex的直接子部门 * @param deviceType - * @param ids 直接子部门以及后代部门id集合 + * @param ids 直接子部门以及后代部门id集合 * @param deviceInfoParam * @return */ @@ -415,8 +415,8 @@ public class GeneralDeviceService { }).collect(Collectors.toList()); // 再根据终端条件筛选合法终端信息 联查:pq_line t1,pq_device t2 List devices = terminalBaseService.getDeviceByCondition(devIds, - deviceType, - deviceInfoParam.getManufacturer()); + deviceType, + deviceInfoParam.getManufacturer()); //筛选出母线id,理论上监测点的pids中第六个id为母线id 联查: pq_line t1 ,pq_voltage t2 List voltageIds = lines.stream().map(line -> { String[] idsArray = line.getPids().split(","); @@ -424,7 +424,7 @@ public class GeneralDeviceService { }).collect(Collectors.toList()); //再根据电压等级筛选合法母线信息 List voltages = terminalBaseService.getVoltageByCondition(voltageIds, - deviceInfoParam.getScale()); + deviceInfoParam.getScale()); //筛选最终的数据 dealDeviceData(generalDeviceDTO, lines, devices, voltages); return generalDeviceDTO; @@ -474,7 +474,7 @@ public class GeneralDeviceService { List scaleDictData = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_VOLTAGE_STAND.getName()).getData(); scales = scaleDictData.stream().map(dictData -> { SimpleDTO simpleDTO = new SimpleDTO(); - BeanUtil.copyProperties(dictData,simpleDTO); + BeanUtil.copyProperties(dictData, simpleDTO); return simpleDTO; }).collect(Collectors.toList()); } @@ -502,7 +502,7 @@ public class GeneralDeviceService { List scaleDictData = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.INTERFERENCE_SOURCE_TYPE.getName()).getData(); loadType = scaleDictData.stream().map(dictData -> { SimpleDTO simpleDTO = new SimpleDTO(); - BeanUtil.copyProperties(dictData,simpleDTO); + BeanUtil.copyProperties(dictData, simpleDTO); return simpleDTO; }).collect(Collectors.toList()); } @@ -530,7 +530,7 @@ public class GeneralDeviceService { List scaleDictData = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_MANUFACTURER.getName()).getData(); manufacturer = scaleDictData.stream().map(dictData -> { SimpleDTO simpleDTO = new SimpleDTO(); - BeanUtil.copyProperties(dictData,simpleDTO); + BeanUtil.copyProperties(dictData, simpleDTO); return simpleDTO; }).collect(Collectors.toList()); } @@ -609,117 +609,117 @@ public class GeneralDeviceService { } /** - * @Description: 按部门分类获取通讯异常设备警告 - * @Param: [deviceInfoParam] - * @return: java.util.List - * @Author: clam - * @Date: 2022/10/14 - */ + * @Description: 按部门分类获取通讯异常设备警告 + * @Param: [deviceInfoParam] + * @return: java.util.List + * @Author: clam + * @Date: 2022/10/14 + */ public List getExceptionDeviceInfoAsDept(DeviceInfoParam deviceInfoParam) { - List exceptionDeviceInfoVOS = new ArrayList<> (); - List deviceInfoAsSubstation = getDeviceInfoAsDept (deviceInfoParam,null, Stream.of (1).collect (Collectors.toList ( ))); + List exceptionDeviceInfoVOS = new ArrayList<>(); + List deviceInfoAsSubstation = getDeviceInfoAsDept(deviceInfoParam, null, Stream.of(1).collect(Collectors.toList())); /*获取所有设备*/ - final List deviceIndexes = deviceInfoAsSubstation.stream ( ).map (GeneralDeviceDTO::getDeviceIndexes).flatMap (Collection::stream).distinct ( ).collect (Collectors.toList ( )); + final List deviceIndexes = deviceInfoAsSubstation.stream().map(GeneralDeviceDTO::getDeviceIndexes).flatMap(Collection::stream).distinct().collect(Collectors.toList()); - QueryWrapper wrapper = new QueryWrapper<> (); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.in("Id", deviceIndexes). + eq("Com_Flag", 0). + eq("Dev_Model", 1). + eq("Dev_Data_Type", 2). + eq("Run_Flag", 0); - wrapper.in ("Id",deviceIndexes). - eq ("Com_Flag", 0). - eq ("Dev_Model", 1). - eq ("Dev_Data_Type", 2). - eq ("Run_Flag", 0); + List deviceList = deviceMapper.selectList(wrapper); - List deviceList = deviceMapper.selectList (wrapper); + List filterDevIndexs = deviceList.stream().map(Device::getId).collect(Collectors.toList()); - List filterDevIndexs = deviceList.stream ( ).map (Device::getId).collect (Collectors.toList ( )); - - QueryWrapper lineQueryWrapper = new QueryWrapper<> (); - lineQueryWrapper.in ("Id",filterDevIndexs). - eq ("Level", 4); + QueryWrapper lineQueryWrapper = new QueryWrapper<>(); + lineQueryWrapper.in("Id", filterDevIndexs). + eq("Level", 4); /*终端*/ - List tempDevices = lineMapper.selectList (lineQueryWrapper); + List tempDevices = lineMapper.selectList(lineQueryWrapper); - List subIndexList = tempDevices.stream ( ).map (Line::getPid).distinct ().collect (Collectors.toList ( )); + List subIndexList = tempDevices.stream().map(Line::getPid).distinct().collect(Collectors.toList()); /*变电站*/ - QueryWrapper substationQueryWrapper = new QueryWrapper<> (); - substationQueryWrapper.in ("Id", subIndexList). - eq ("Level", 3); - List tempSubstations = lineMapper.selectList (substationQueryWrapper); + QueryWrapper substationQueryWrapper = new QueryWrapper<>(); + substationQueryWrapper.in("Id", subIndexList). + eq("Level", 3); + List tempSubstations = lineMapper.selectList(substationQueryWrapper); /* todo 设置警告类型*/ - DictData data = dicDataFeignClient.getDicDataByCode (DicDataEnum.COMM_ERR.getCode ( )).getData ( ); - deviceList.forEach (device -> { + DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.COMM_ERR.getCode()).getData(); + deviceList.forEach(device -> { ExceptionDeviceInfoVO exceptionDeviceInfoVO = new ExceptionDeviceInfoVO(); - exceptionDeviceInfoVO.setIp (device.getIp ()); - exceptionDeviceInfoVO.setUpdateTime (device.getUpdateTime ()); - exceptionDeviceInfoVO.setDevIndex (device.getId ()); + exceptionDeviceInfoVO.setIp(device.getIp()); + exceptionDeviceInfoVO.setUpdateTime(device.getUpdateTime()); + exceptionDeviceInfoVO.setDevIndex(device.getId()); - Line tempdevice = tempDevices.stream ( ).filter (temp -> Objects.equals (temp.getId ( ), device.getId ( ))).collect (Collectors.toList ( )).get (0); + Line tempdevice = tempDevices.stream().filter(temp -> Objects.equals(temp.getId(), device.getId())).collect(Collectors.toList()).get(0); - exceptionDeviceInfoVO.setDevName (tempdevice.getName ()); - exceptionDeviceInfoVO.setSubIndex (tempdevice.getPid ()); - Line substation = tempSubstations.stream ( ).filter (temp -> Objects.equals (temp.getId ( ), tempdevice.getPid ( ))).collect (Collectors.toList ( )).get (0); - exceptionDeviceInfoVO.setSubName (substation.getName () ); + exceptionDeviceInfoVO.setDevName(tempdevice.getName()); + exceptionDeviceInfoVO.setSubIndex(tempdevice.getPid()); + Line substation = tempSubstations.stream().filter(temp -> Objects.equals(temp.getId(), tempdevice.getPid())).collect(Collectors.toList()).get(0); + exceptionDeviceInfoVO.setSubName(substation.getName()); - exceptionDeviceInfoVO.setWarningId (data.getId ()); - exceptionDeviceInfoVO.setWarningType (data.getName ()); - String exceptionDescription = String.format("%s变电站,%s终端于%s通讯中断",substation.getName (),tempdevice.getName (),device.getUpdateTime ()); - exceptionDeviceInfoVO.setExceptionDescription (exceptionDescription); - exceptionDeviceInfoVOS.add (exceptionDeviceInfoVO); + exceptionDeviceInfoVO.setWarningId(data.getId()); + exceptionDeviceInfoVO.setWarningType(data.getName()); + String exceptionDescription = String.format("%s变电站,%s终端于%s通讯中断", substation.getName(), tempdevice.getName(), device.getUpdateTime()); + exceptionDeviceInfoVO.setExceptionDescription(exceptionDescription); + exceptionDeviceInfoVOS.add(exceptionDeviceInfoVO); }); return exceptionDeviceInfoVOS; } + /** - * @Description: getDeptDeviceDetail - * @Param: [deviceInfoParam] - * @return: com.njcn.device.pq.pojo.vo.DeptDeviceDetailVO - * @Author: clam - * @Date: 2022/11/4 - */ + * @Description: getDeptDeviceDetail + * @Param: [deviceInfoParam] + * @return: com.njcn.device.pq.pojo.vo.DeptDeviceDetailVO + * @Author: clam + * @Date: 2022/11/4 + */ public DeptDeviceDetailVO getDeptDeviceDetail(DeviceInfoParam deviceInfoParam) { - DeptDeviceDetailVO deptDeviceDetailVO =new DeptDeviceDetailVO(); + DeptDeviceDetailVO deptDeviceDetailVO = new DeptDeviceDetailVO(); /*总数*/ - List deptDeviceInfos = this.getDeviceInfoAsDept(deviceInfoParam, Stream.of(0,1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); - List DeviceIds = deptDeviceInfos.stream ( ).map (GeneralDeviceDTO::getDeviceIndexes).flatMap (Collection::stream).collect (Collectors.toList ( )); - Integer deviceCount = DeviceIds.size (); + List deptDeviceInfos = this.getDeviceInfoAsDept(deviceInfoParam, Stream.of(0, 1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); + List DeviceIds = deptDeviceInfos.stream().map(GeneralDeviceDTO::getDeviceIndexes).flatMap(Collection::stream).collect(Collectors.toList()); + Integer deviceCount = DeviceIds.size(); /*实际运行*/ - QueryWrapper query = new QueryWrapper<> (); - query.in ("Id",DeviceIds). - eq ("Run_Flag",0); - Integer runDeviceCount = deviceMapper.selectCount (query); - BigDecimal rate = BigDecimal.valueOf (runDeviceCount).divide ( BigDecimal.valueOf (deviceCount),4,BigDecimal.ROUND_HALF_UP); - deptDeviceDetailVO.setDeviceCount (deviceCount); - deptDeviceDetailVO.setRunDeviceCount (runDeviceCount); - deptDeviceDetailVO.setOnLineRate (rate); + QueryWrapper query = new QueryWrapper<>(); + query.in("Id", DeviceIds). + eq("Run_Flag", 0); + Integer runDeviceCount = deviceMapper.selectCount(query); + BigDecimal rate = BigDecimal.valueOf(runDeviceCount).divide(BigDecimal.valueOf(deviceCount), 4, BigDecimal.ROUND_HALF_UP); + deptDeviceDetailVO.setDeviceCount(deviceCount); + deptDeviceDetailVO.setRunDeviceCount(runDeviceCount); + deptDeviceDetailVO.setOnLineRate(rate); return deptDeviceDetailVO; } public DeptSubstationDetailVO getDeptSubstationDetail(DeviceInfoParam deviceInfoParam) { - DeptSubstationDetailVO deptSubstationDetailVO = new DeptSubstationDetailVO (); + DeptSubstationDetailVO deptSubstationDetailVO = new DeptSubstationDetailVO(); - List deptDeviceInfos = this.getDeviceInfoAsDept(deviceInfoParam, Stream.of(0,1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); + List deptDeviceInfos = this.getDeviceInfoAsDept(deviceInfoParam, Stream.of(0, 1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); - List DeviceIds = deptDeviceInfos.stream ( ).map (GeneralDeviceDTO::getSubIndexes).flatMap (Collection::stream).collect (Collectors.toList ( )); - Integer substationCount = DeviceIds.size (); + List DeviceIds = deptDeviceInfos.stream().map(GeneralDeviceDTO::getSubIndexes).flatMap(Collection::stream).collect(Collectors.toList()); + Integer substationCount = DeviceIds.size(); - Integer count =lineMapper.queryOnlineSubstaion(DeviceIds); - deptSubstationDetailVO.setSubstationCount (substationCount); - deptSubstationDetailVO.setRunsubstationCount (count); - BigDecimal rate = BigDecimal.valueOf (count).divide ( BigDecimal.valueOf (substationCount),4,BigDecimal.ROUND_HALF_UP); - deptSubstationDetailVO.setOnLineRate (rate); + Integer count = lineMapper.queryOnlineSubstaion(DeviceIds); + deptSubstationDetailVO.setSubstationCount(substationCount); + deptSubstationDetailVO.setRunsubstationCount(count); + BigDecimal rate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(substationCount), 4, BigDecimal.ROUND_HALF_UP); + deptSubstationDetailVO.setOnLineRate(rate); return deptSubstationDetailVO; @@ -727,10 +727,13 @@ public class GeneralDeviceService { } - public List deptGetRunLine(String deptId){ + public List deptGetRunLine(String deptId,List runFlag) { List deptDTOList = deptFeignClient.getDeptDescendantIndexes(deptId, Stream.of(0, 1).collect(Collectors.toList())).getData(); + if (CollUtil.isNotEmpty(deptDTOList)) { + List deptIds = deptDTOList.stream().map(DeptDTO::getId).distinct().collect(Collectors.toList()); - return null; - + return deptLineService.getLineByDeptIds(deptIds,runFlag); + } + return new ArrayList<>(); } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/OverLimitServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/OverLimitServiceImpl.java new file mode 100644 index 000000000..5e062e1f2 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/OverLimitServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.device.pq.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.mapper.OverlimitMapper; +import com.njcn.device.pq.service.IOverLimitService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * pqs + * + * @author cdf + * @date 2023/6/7 + */ +@Service +@RequiredArgsConstructor +public class OverLimitServiceImpl extends ServiceImpl implements IOverLimitService { + +} diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/FpyTagContent.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/FpyTagContent.java new file mode 100644 index 000000000..0720cfaff --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/FpyTagContent.java @@ -0,0 +1,17 @@ +package com.njcn.harmonic.pojo.dto; + +import lombok.Data; + +/** + * pqs + * + * @author cdf + * @date 2023/6/7 + */ +@Data +public class FpyTagContent { + + private String passFlag; + + private String content; +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java index a9de01bc5..275ebe89a 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java @@ -1,5 +1,6 @@ package com.njcn.harmonic.controller.report; +import cn.hutool.core.date.TimeInterval; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -16,12 +17,15 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * pqs * 合格率报告 @@ -40,16 +44,19 @@ public class QualifiedReport extends BaseController { /** * 合格率报告 * @author cdf - * @date \ + * @date 2023/6/7 */ @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/page") - @ApiOperation("合格率报告") + @PostMapping("/pageTable") + @ApiOperation("合格率报告_列表") @ApiImplicitParam(name = "qualifiedReportParam", value = "合格率报告参数", required = true) - public HttpResult page(@RequestBody @Validated QualifiedReportParam qualifiedReportParam) { - String methodDescribe = getMethodDescribe("page"); - //AssesVO list = assesService.getQualityAssessData(pulicTimeStatisParam); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + public HttpResult> pageTable(@RequestBody @Validated QualifiedReportParam qualifiedReportParam) { + TimeInterval timeInterval = new TimeInterval(); + String methodDescribe = getMethodDescribe("pageTable"); + List result = qualifiedReportService.pageTable(qualifiedReportParam); + log.info("合格率报告执行时长:"+timeInterval.interval()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/QualifiedReportMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/QualifiedReportMapper.java new file mode 100644 index 000000000..0d1bae8fe --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/QualifiedReportMapper.java @@ -0,0 +1,32 @@ +package com.njcn.harmonic.mapper.report; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + * pqs + * 合格率报告 + * @author cdf + * @date 2023/6/7 + */ +public interface QualifiedReportMapper { + + /** + * 获取合格率详情 + * @author cdf + * @date 2023/6/8 + */ + List> getLimitRateData(@Param("page") Page>> page, @Param("lineIds")List lineIds, @Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime); + + /** + * + * @author cdf + * @date 2023/6/8 + */ + List> getLimitRateDataIHarm(@Param("lineIds")List lineIds, @Param("startTime")String startTime, @Param("endTime")String endTime); + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/mapping/QualifiedReportMapper.xml b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/mapping/QualifiedReportMapper.xml new file mode 100644 index 000000000..c2ddfcb8f --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/report/mapping/QualifiedReportMapper.xml @@ -0,0 +1,110 @@ + + + + + + + + + + diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/QualifiedReportService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/QualifiedReportService.java index 25b40b9aa..06901e664 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/QualifiedReportService.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/QualifiedReportService.java @@ -6,6 +6,8 @@ import com.njcn.harmonic.pojo.param.QualifiedReportParam; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + /** * pqs * @@ -15,9 +17,9 @@ import org.springframework.web.bind.annotation.RequestBody; public interface QualifiedReportService { /** - * 合格率报告 + * 合格率报告_列表 * @author cdf - * @date \ + * @date 2023/6/7 */ - HttpResult page(@RequestBody @Validated QualifiedReportParam qualifiedReportParam); + List pageTable(QualifiedReportParam qualifiedReportParam); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/QualifiedReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/QualifiedReportServiceImpl.java index 41dd21a81..e7a80bfe4 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/QualifiedReportServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/QualifiedReportServiceImpl.java @@ -1,11 +1,40 @@ package com.njcn.harmonic.service.majornetwork.impl; -import com.njcn.common.pojo.response.HttpResult; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.utils.PubUtils; +import com.njcn.device.biz.pojo.po.Overlimit; +import com.njcn.device.pq.api.GeneralDeviceInfoClient; +import com.njcn.device.pq.api.LineFeignClient; +import com.njcn.device.pq.api.LineIntegrityClient; +import com.njcn.device.pq.api.OverLimitClient; +import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.vo.AreaLineInfoVO; +import com.njcn.harmonic.mapper.report.QualifiedReportMapper; import com.njcn.harmonic.pojo.dto.FpyReportDTO; +import com.njcn.harmonic.pojo.dto.FpyTagContent; import com.njcn.harmonic.pojo.param.QualifiedReportParam; +import com.njcn.harmonic.pojo.po.report.EnumPass; import com.njcn.harmonic.service.majornetwork.QualifiedReportService; +import com.njcn.web.factory.PageFactory; +import lombok.RequiredArgsConstructor; +import org.apache.commons.beanutils.BeanUtils; import org.springframework.stereotype.Service; +import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + /** * pqs * @@ -13,16 +42,177 @@ import org.springframework.stereotype.Service; * @date 2023/5/31 */ @Service +@RequiredArgsConstructor public class QualifiedReportServiceImpl implements QualifiedReportService { + private final QualifiedReportMapper qualifiedReportMapper; + + private final GeneralDeviceInfoClient generalDeviceInfoClient; + + private final LineFeignClient lineFeignClient; + + private final LineIntegrityClient lineIntegrityClient; + + private final OverLimitClient overLimitClient; + + + + + @Override + public List pageTable(QualifiedReportParam qualifiedReportParam) { + List fpyReportDTOList = new ArrayList<>(); + List lineIds = generalDeviceInfoClient.deptGetRunLine(qualifiedReportParam.getDeptId()).getData(); + if(CollUtil.isEmpty(lineIds)){ + return fpyReportDTOList; + } + + LineBaseQueryParam lineBaseQueryParam = new LineBaseQueryParam(); + lineBaseQueryParam.setLineIds(lineIds); + lineBaseQueryParam.setSearchValue(qualifiedReportParam.getSearchValue()); + List areaLineInfoVOList = lineFeignClient.getRichLineInfo(lineBaseQueryParam).getData(); + List lineNewIds = areaLineInfoVOList.stream().map(AreaLineInfoVO::getLineId).distinct().collect(Collectors.toList()); + Map lineMap = areaLineInfoVOList.stream().collect(Collectors.toMap(AreaLineInfoVO::getLineId,Function.identity())); + + List> limitMap = qualifiedReportMapper.getLimitRateData(new Page<>(PageFactory.getPageNum(qualifiedReportParam),PageFactory.getPageSize(qualifiedReportParam)),lineNewIds, PubUtils.beginTimeToLocalDateTime(qualifiedReportParam.getBeginTime()),PubUtils.endTimeToLocalDateTime(qualifiedReportParam.getEndTime())); + List realLineIds = limitMap.stream().map(item->item.get("my_index").toString()).distinct().collect(Collectors.toList()); + + List> dayIhMapList = qualifiedReportMapper.getLimitRateDataIHarm(lineIds,qualifiedReportParam.getBeginTime(),qualifiedReportParam.getEndTime()); + Map> mapMap = dayIhMapList.stream().collect(Collectors.toMap(it->it.get("MYINDEX").toString(),Function.identity())); + + + if(CollUtil.isNotEmpty(limitMap)){ + + } + List rStatIntegrityList = lineIntegrityClient.getIntegrityByLineIds(realLineIds,qualifiedReportParam.getBeginTime(),qualifiedReportParam.getEndTime()).getData(); + Map rStatIntegrityMap = rStatIntegrityList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex, Function.identity())); + + + List overLimitList = overLimitClient.getOverLimitByLineIds(realLineIds).getData(); + Map overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity())); + + for(Map map:limitMap){ + String lineId = map.get("my_index").toString(); + Map mapOverLimit = new HashMap<>(); + try { + BeanUtils.describe(overLimitMap.get(lineId)).forEach((key, value) -> mapOverLimit.put((String) key, value)); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + e.printStackTrace(); + } + + //获取平均值的最大值 + Map iM = mapMap.get(lineId); + + FpyTagContent fpyTagContent = calAllTag(map, mapOverLimit,iM); + + FpyReportDTO fpyReportData = new FpyReportDTO(); + if (lineMap.containsKey(lineId)) { + AreaLineInfoVO areaLineInfoVO = lineMap.get(lineId); + + BeanUtil.copyProperties(areaLineInfoVO, fpyReportData); + fpyReportData.setHarmDes(fpyTagContent.getPassFlag()); + fpyReportData.setPowerDes(fpyTagContent.getContent()); + fpyReportDTOList.add(fpyReportData); + } + + if(rStatIntegrityMap.containsKey(lineId)) { + RStatIntegrityD rStatIntegrityD = rStatIntegrityMap.get(lineId); + fpyReportData.setIntegrityValue(rStatIntegrityD.getIntegrityData()); + }else { + fpyReportData.setIntegrityValue(3.14159f); + } + } + return fpyReportDTOList; + } /** - * 合格率报告 - * @author cdf - * @date + * 其他指标计算 */ - @Override - public HttpResult page(QualifiedReportParam qualifiedReportParam) { - return null; + private FpyTagContent calAllTag(Map map, Map mapOverLimit,Map iMap) { + StrBuilder content = new StrBuilder(); + BigDecimal alltime = (BigDecimal) map.get("ALLTIME"); + BigDecimal flicketAllTime = (BigDecimal)map.get("FLICKET_ALL_TIME"); + + FpyTagContent fpyTagContent = new FpyTagContent(); + if(alltime.intValue() > 0) { + //频率偏差 + BigDecimal freq = (BigDecimal) map.get("FREQ_DEV_OVERTIME"); + if (freq.intValue() > 0) { + BigDecimal freqRate = alltime.subtract(freq).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + content.append("频率偏差合格率").append(String.valueOf(freqRate.floatValue())).append("%;"); + } + + //电压偏差 + BigDecimal voltageDev = (BigDecimal) map.get("VOLTAGE_DEV_OVERTIME"); + if (voltageDev.intValue() > 0) { + BigDecimal voltageDevRate = alltime.subtract(voltageDev).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + content.append("电压偏差合格率").append(String.valueOf(voltageDevRate.floatValue())).append("%;"); + } + + //三项不平衡 + BigDecimal ubalance = (BigDecimal) map.get("UBALANCE_OVERTIME"); + if (ubalance.intValue() > 0) { + BigDecimal ubalanceRate = alltime.subtract(ubalance).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + content.append("三相电压不平衡合格率").append(String.valueOf(ubalanceRate.floatValue())).append("%;"); + } + + //闪变 + BigDecimal flickOver = (BigDecimal) map.get("FLICKER_OVERTIME"); + if (flickOver.intValue() > 0) { + BigDecimal flickOverRate = flicketAllTime.subtract(flickOver).divide(flicketAllTime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + content.append("闪变合格率").append(String.valueOf(flickOverRate.floatValue())).append("%;"); + } + + //电压畸变 + BigDecimal uab = (BigDecimal) map.get("UABERRANCE_OVERTIME"); + BigDecimal uabRate = alltime.subtract(uab).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + if (uabRate.floatValue() < 95) { + content.append("电压总畸变率").append(String.valueOf(uabRate.floatValue())).append("%;"); + } + + //计算组装谐波含电压有率 + int flagV = 0; + for (int i = 2; i < 26; i++) { + BigDecimal v = (BigDecimal) map.get("UHARM_" + i + "_OVERTIME"); + BigDecimal hegeRate = alltime.subtract(v).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + if (hegeRate.floatValue() < 95) { + content.append(String.valueOf(i)).append("次谐波电压含有率合格率").append(String.valueOf(hegeRate.floatValue())).append("%;"); + flagV++; + } + } + + //计算组装谐波电流幅值 + int flagI = 0; + for (int i = 2; i < 26; i++) { + String key = "IHARM_" + i + "_OVERTIME"; + BigDecimal ih = (BigDecimal) map.get(key); + BigDecimal hegeRate = alltime.subtract(ih).divide(alltime, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + if (hegeRate.floatValue() < 95) { + BigDecimal maxI = (BigDecimal)iMap.get(key); + BigDecimal overLimit = new BigDecimal(mapOverLimit.get("iharm" + i).toString()); + content.append(String.valueOf(i)).append("次谐波电流合格率").append(String.valueOf(hegeRate.floatValue())).append("%,限值为").append(String.valueOf(overLimit.floatValue())).append("A," + "最大值为").append(String.valueOf(maxI.setScale(2,RoundingMode.HALF_UP))).append("A;"); + flagI++; + } + } + + if(flagV==0 && flagI==0){ + fpyTagContent.setPassFlag(EnumPass.PASS.getDescribe()); + }else if(flagV>0 && flagI==0){ + fpyTagContent.setPassFlag("谐波电压"); + }else if(flagV==0 && flagI>0){ + fpyTagContent.setPassFlag("谐波电流"); + }else { + fpyTagContent.setPassFlag("谐波电压;谐波电流"); + } + if(StrUtil.isBlank(content)){ + fpyTagContent.setContent("合格;"); + }else { + fpyTagContent.setContent(content.toString()); + } + }else { + fpyTagContent.setPassFlag("暂无数据"); + fpyTagContent.setContent("暂无数据;"); + } + + return fpyTagContent; } }