diff --git a/pqs-algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/impl/AppTopologyDiagramServiceImpl.java b/pqs-algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/impl/AppTopologyDiagramServiceImpl.java index 1ec2edbb0..1aaaf5a39 100644 --- a/pqs-algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/impl/AppTopologyDiagramServiceImpl.java +++ b/pqs-algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/impl/AppTopologyDiagramServiceImpl.java @@ -93,7 +93,9 @@ public class AppTopologyDiagramServiceImpl extends MppServiceImpl list = this.list (queryWrapper); List collect = list.stream ( ).map (temp -> { @@ -117,7 +119,8 @@ public class AppTopologyDiagramServiceImpl extends MppServiceImpl queryWrapper = new QueryWrapper<> (); queryWrapper.eq ("status","1"). eq (StringUtils.isNotBlank (appTopologyDiagramQueryPageParm.getProjectId ()),"project_id",appTopologyDiagramQueryPageParm.getProjectId ()). - like (StringUtils.isNotBlank (appTopologyDiagramQueryPageParm.getSearchValue ()),"name", appTopologyDiagramQueryPageParm.getSearchValue ()); + like (StringUtils.isNotBlank (appTopologyDiagramQueryPageParm.getSearchValue ()),"name", appTopologyDiagramQueryPageParm.getSearchValue ()). + orderByDesc("create_time"); tempPage = appTopologyDiagramMapper.selectPage (tempPage, queryWrapper); List collect = tempPage.getRecords ( ).stream ( ).map (temp -> { AppTopologyDiagramVO vo = new AppTopologyDiagramVO ( ); diff --git a/pqs-gateway/src/main/resources/bootstrap.yml b/pqs-gateway/src/main/resources/bootstrap.yml index b66db58a0..457fa45df 100644 --- a/pqs-gateway/src/main/resources/bootstrap.yml +++ b/pqs-gateway/src/main/resources/bootstrap.yml @@ -139,6 +139,34 @@ spring: filters: - SwaggerHeaderFilter - StripPrefix=1 + - id: cs-device-boot + uri: lb://cs-device-boot + predicates: + - Path=/cs-device-boot/** + filters: + - SwaggerHeaderFilter + - StripPrefix=1 + - id: cs-system-boot + uri: lb://cs-system-boot + predicates: + - Path=/cs-system-boot/** + filters: + - SwaggerHeaderFilter + - StripPrefix=1 + - id: cs-warn-boot + uri: lb://cs-warn-boot + predicates: + - Path=/cs-warn-boot/** + filters: + - SwaggerHeaderFilter + - StripPrefix=1 + - id: cs-harmonic-boot + uri: lb://cs-harmonic-boot + predicates: + - Path=/cs-harmonic-boot/** + filters: + - SwaggerHeaderFilter + - StripPrefix=1 #项目日志的配置 logging: config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicDPO.java new file mode 100644 index 000000000..1a0d651a0 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicDPO.java @@ -0,0 +1,64 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; + +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +/** + * + * Description: + * Date: 2023/5/26 15:52【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +@TableName(value = "r_stat_harmonic_d") +public class RStatHarmonicDPO { + /** + * 单位ID + */ + @MppMultiId(value = "org_no") + private String orgNo; + + /** + * 生成数据的时间,每日统计一次 + */ + @MppMultiId(value = "data_date") + private Date dataDate; + + /** + * 监测点类别ID、监测对象类型ID + */ + @MppMultiId(value = "measurement_type_class") + private String measurementTypeClass; + + /** + * 稳态指标类型Id,字典表ID + */ + @MppMultiId(value = "harmonic_type") + private String harmonicType; + + /** + * 数据类型,字典表(01:主网测点 02:配网测点) + */ + @MppMultiId(value = "data_type") + private String dataType; + + /** + * 超标监测点数 + */ + @TableField(value = "over_limit_measurement") + private Integer overLimitMeasurement; + + /** + * 超标监测点数占比 + */ + @TableField(value = "over_limit_measurement_ratio") + private Double overLimitMeasurementRatio; +} \ No newline at end of file diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceParam.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceParam.java index 168843126..ad1a9e51a 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceParam.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceParam.java @@ -2,7 +2,9 @@ package com.njcn.prepare.harmonic.pojo.param; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.management.loading.PrivateMLet; import javax.validation.constraints.NotBlank; import java.util.List; @@ -16,16 +18,23 @@ import java.util.List; @Data public class DeviceParam { - @ApiModelProperty(name = "devId",value = "终端id") - private String devId; - private String updateTime; - @ApiModelProperty(name = "lineIds",value = "监测点索引集合") - private List lineIds; + private List detailList; @ApiModelProperty(name = "dataDate",value = "时间") @NotBlank(message = "报表时间不可为空") private String dataDate; - private String deviceStatus; + + @Data + public static class DeviceDetail{ + @ApiModelProperty(name = "devId",value = "终端id") + private String devId; + + private String updateTime; + @ApiModelProperty(name = "lineIds",value = "监测点索引集合") + private List lineIds; + + private String deviceStatus; + } } diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/OrgParam.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/OrgParam.java new file mode 100644 index 000000000..dd17ed9c6 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/OrgParam.java @@ -0,0 +1,31 @@ +package com.njcn.prepare.harmonic.pojo.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author clam + * Date: 2022/10/20 11:41 + * @version V1.0.0 + */ +@Data +public class OrgParam { + + @ApiModelProperty(name = "orgId",value = "单位Id") + private String orgId; + + @ApiModelProperty(name = "type",value = "报表类型,1,年,2季,3月,4周,5日") + @NotNull(message = "报表类型不可为空") + private Integer type; + + @ApiModelProperty(name = "dataDate",value = "时间") + @NotBlank(message = "报表时间不可为空") + private String dataDate; + + + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java index fe3a9f4ea..fc1fbf74d 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java @@ -1,19 +1,27 @@ package com.njcn.prepare.harmonic.controller.newalgorithm; import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService; import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -21,7 +29,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * Description: @@ -40,16 +52,58 @@ public class RMpDevEvaluateDetailController extends BaseController { private final RMpDevEvaluateDetailPOService rMpDevEvaluateDetailPOService; + private final DeptFeignClient deptFeignClient; + private final CommTerminalGeneralClient commTerminalGeneralClient; + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/handler") @ApiOperation("终端数据评价_日统计") - @ApiImplicitParam(name = "deviceParamList", value = "参数", required = true) - public HttpResult handler(@RequestBody @Validated List deviceParamList){ + @ApiImplicitParam(name = "deviceParam", value = "参数", required = true) + public HttpResult handler(@RequestBody @Validated DeviceParam deviceParam){ log.info(LocalDateTime.now()+"handler始执行"); String methodDescribe = getMethodDescribe("handler"); +/** + * 支持补录 + */ + if(CollectionUtils.isEmpty(deviceParam.getDetailList())){ + List list = new ArrayList<>(); + Dept data = deptFeignClient.getRootDept().getData(); + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + deptGetLineParam.setDeptId(data.getId()); + deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT); + List data1 = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData(); + /*主网*/ + List collect = data1.stream().map(DeptGetDeviceDTO::getDeviceList).flatMap(Collection::stream).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(collect)){ + Map> map = collect.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); + map.forEach((k, v) -> { + DeviceParam.DeviceDetail deviceDetail = new DeviceParam.DeviceDetail(); + deviceDetail.setDevId(k); + List lineIds = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + deviceDetail.setLineIds(lineIds); + deviceDetail.setUpdateTime(v.get(0).getUpdateTime()+""); + list.add(deviceDetail); + }); + } - rMpDevEvaluateDetailPOService.handler (deviceParamList); + /*配网*/ + List collect2 = data1.stream().map(DeptGetDeviceDTO::getPwDeviceList).flatMap(Collection::stream).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(collect2)){ + Map> map = collect2.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); + map.forEach((k, v) -> { + DeviceParam.DeviceDetail deviceDetail = new DeviceParam.DeviceDetail(); + deviceDetail.setDevId(k); + List lineIds = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + deviceDetail.setLineIds(lineIds); + deviceDetail.setUpdateTime(v.get(0).getUpdateTime()+""); + list.add(deviceDetail); + }); + } + deviceParam.setDetailList(list); + } + + rMpDevEvaluateDetailPOService.handler (deviceParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java index bc2c6842d..c1b8ab30b 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java @@ -1,15 +1,23 @@ package com.njcn.prepare.harmonic.controller.newalgorithm; import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.device.pq.api.DeptLineFeignClient; import com.njcn.device.pq.api.LineFeignClient; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; import com.njcn.prepare.harmonic.pojo.param.LineParam; import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -25,7 +33,10 @@ import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * Description: @@ -44,16 +55,56 @@ public class RStatDevSignalController extends BaseController { private final RStatDevSignalDPOService rStatDevSignalDPOService; + private final CommTerminalGeneralClient commTerminalGeneralClient; + private final DeptFeignClient deptFeignClient; @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/rstatdevsignalHandler") @ApiOperation("终端通信管理_日统计") - @ApiImplicitParam(name = "deviceParamList", value = "参数", required = true) - public HttpResult rstatdevsignalHandler(@RequestBody @Validated List deviceParamList){ + @ApiImplicitParam(name = "deviceParam", value = "参数", required = true) + public HttpResult rstatdevsignalHandler(@RequestBody @Validated DeviceParam deviceParam ){ log.info(LocalDateTime.now()+"rstatdevsignalHandler始执行"); String methodDescribe = getMethodDescribe("rstatdevsignalHandler"); + /** + * 支持补录 + */ + if(CollectionUtils.isEmpty(deviceParam.getDetailList())){ + List list = new ArrayList<>(); + Dept data = deptFeignClient.getRootDept().getData(); + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + deptGetLineParam.setDeptId(data.getId()); + deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT); + List data1 = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData(); + /*主网*/ + List collect = data1.stream().map(DeptGetDeviceDTO::getDeviceList).flatMap(Collection::stream).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(collect)){ + Map> map = collect.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); + map.forEach((k, v) -> { + DeviceParam.DeviceDetail deviceDetail = new DeviceParam.DeviceDetail(); + deviceDetail.setDevId(k); + List lineIds = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + deviceDetail.setLineIds(lineIds); + deviceDetail.setUpdateTime(v.get(0).getUpdateTime()+""); + list.add(deviceDetail); + }); + } - rStatDevSignalDPOService.eventdetailHandler (deviceParamList); + /*配网*/ + List collect2 = data1.stream().map(DeptGetDeviceDTO::getPwDeviceList).flatMap(Collection::stream).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(collect2)){ + Map> map = collect2.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); + map.forEach((k, v) -> { + DeviceParam.DeviceDetail deviceDetail = new DeviceParam.DeviceDetail(); + deviceDetail.setDevId(k); + List lineIds = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + deviceDetail.setLineIds(lineIds); + deviceDetail.setUpdateTime(v.get(0).getUpdateTime()+""); + list.add(deviceDetail); + }); + } + deviceParam.setDetailList(list); + } + rStatDevSignalDPOService.eventdetailHandler (deviceParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicController.java new file mode 100644 index 000000000..a81410f8e --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicController.java @@ -0,0 +1,75 @@ +package com.njcn.prepare.harmonic.controller.newalgorithm; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.prepare.harmonic.pojo.param.OrgParam; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; +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.time.LocalDateTime; +import java.util.List; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/12/28 13:47【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Slf4j +@Api(tags = "单位监测点稳态指标统计") +@RestController +@RequestMapping("/rstatharmonic") +@RequiredArgsConstructor +public class RStatHarmonicController extends BaseController { + + + private final RStatHarmonicService service; + private final CommTerminalGeneralClient commTerminalGeneralClient; + private final DeptFeignClient deptFeignClient; + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/Handler") + @ApiOperation("单位监测点稳态指标统计") + @ApiImplicitParam(name = "orgParam", value = "参数", required = true) + public HttpResult handler(@RequestBody @Validated OrgParam orgParam ){ + log.info(LocalDateTime.now()+"dayHandler始执行"); + String methodDescribe = getMethodDescribe("dayHandler"); + /** + * 支持补录 + */ + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + + if(StringUtils.isEmpty(orgParam.getOrgId())){ + Dept data = deptFeignClient.getRootDept().getData(); + deptGetLineParam.setDeptId(data.getId()); + }else { + deptGetLineParam.setDeptId(orgParam.getOrgId()); + } + deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT); + List data = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); + service.handler (data,orgParam.getDataDate(),orgParam.getType()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatOrgController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatOrgController.java new file mode 100644 index 000000000..738ceae07 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatOrgController.java @@ -0,0 +1,83 @@ +package com.njcn.prepare.harmonic.controller.newalgorithm; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.prepare.harmonic.pojo.param.DeviceParam; +import com.njcn.prepare.harmonic.pojo.param.OrgParam; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService; +import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +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.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/12/28 13:47【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Slf4j +@Api(tags = "单位监测点统计") +@RestController +@RequestMapping("/rstatorg") +@RequiredArgsConstructor +public class RStatOrgController extends BaseController { + + + private final RStatOrgService rStatOrgService; + private final CommTerminalGeneralClient commTerminalGeneralClient; + private final DeptFeignClient deptFeignClient; + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/Handler") + @ApiOperation("单位监测点_统计") + @ApiImplicitParam(name = "orgParam", value = "参数", required = true) + public HttpResult handler(@RequestBody @Validated OrgParam orgParam ){ + log.info(LocalDateTime.now()+"dayHandler始执行"); + String methodDescribe = getMethodDescribe("dayHandler"); + /** + * 支持补录 + */ + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + + if(StringUtils.isEmpty(orgParam.getOrgId())){ + Dept data = deptFeignClient.getRootDept().getData(); + deptGetLineParam.setDeptId(data.getId()); + }else { + deptGetLineParam.setDeptId(orgParam.getOrgId()); + } + deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT); + List data = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); + rStatOrgService.handler (data,orgParam.getDataDate(),orgParam.getType()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicDPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicDPOMapper.java new file mode 100644 index 000000000..997db1e90 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicDPOMapper.java @@ -0,0 +1,16 @@ +package com.njcn.prepare.harmonic.mapper.mysql.area; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO; + +/** + * + * Description: + * Date: 2023/5/26 15:52【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RStatHarmonicDPOMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicDPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicDPOMapper.xml new file mode 100644 index 000000000..5bd3aece1 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicDPOMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + org_no, data_date, measurement_type_class, harmonic_type, data_type, over_limit_measurement, + over_limit_measurement_ratio + + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java index 78cb35966..fca394a1a 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java @@ -15,6 +15,9 @@ import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService; import com.njcn.prepare.harmonic.service.mysql.area.ROperatingIndexDPOService; import com.njcn.prepare.harmonic.service.mysql.device.RMpDevSolveDetailPOService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.scheduling.annotation.Async; @@ -49,14 +52,14 @@ public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl deviceParamList) { + public void handler(DeviceParam deviceParam) { List rMpDevEvaluateDetailPOList = new ArrayList<>(); - Date date = DateUtil.parse(deviceParamList.get(0).getDataDate()); + Date date = DateUtil.parse(deviceParam.getDataDate()); QueryWrapper wrapper = new QueryWrapper<>(); QueryWrapper wrapper1 = new QueryWrapper<>(); - deviceParamList.forEach(temp -> { + deviceParam.getDetailList().forEach(temp -> { RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId()); @@ -66,7 +69,7 @@ public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl implements RStatHarmonicDPOService{ + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java new file mode 100644 index 000000000..e5aa92e60 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java @@ -0,0 +1,261 @@ +package com.njcn.prepare.harmonic.service.mysql.Impl.area; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD; +import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD; +import com.njcn.harmonic.pojo.po.RStatHarmonicD; +import com.njcn.harmonic.pojo.po.RStatOrgDPO; +import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper; +import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO; +import com.njcn.prepare.harmonic.service.mysql.Impl.line.RMpPartHarmonicDetailDServiceImpl; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicDPOService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgDService; +import com.njcn.prepare.harmonic.service.mysql.line.IRMpPartHarmonicDetailDService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Description: + * Date: 2023/5/26 15:41【需求编号】 + * + * @author clam + * @version V1.0.0 + */ + +@Service +@RequiredArgsConstructor +public class RStatHarmonicServiceImpl implements RStatHarmonicService { + + private final RStatHarmonicDPOService rStatHarmonicDPOService; + private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper; + private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper; + private final RStatOrgDMapper rStatOrgDMapper; + + private final + DicDataFeignClient dicDataFeignClient; + + @Override + public void handler(List data, String dataDate, Integer type) { + switch (type) { +// case 1: +// this.hanlderOracleYear (lineParam); +// break; +// case 2: +// this.hanlderOracleQtr (lineParam); +// break; +// case 3: +// this.hanlderOracleMonth (lineParam); +// break; + case 5: + this.hanlderDay ( data, dataDate, type); + break; + default: + break; + } + } + + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderDay(List data, String dataDate, Integer type) { + List rStatHarmonicDPOList = new ArrayList<>(); + Date date = DateUtil.parse(dataDate); + QueryWrapper queryWrapper = new QueryWrapper<>(); + QueryWrapper rMpSurplusHarmonicDetailDQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgDPOQueryWrapper = new QueryWrapper<>(); + DecimalFormat df = new DecimalFormat("0.00"); + + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + /*获取数据类型*/ + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取监测点类型类型*/ + List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData(); + Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + + + data.forEach(deptGetChildrenMoreDTO -> { + + /*主网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){ + List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList(); + Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + collect.forEach((k, v)->{ + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + + queryWrapper.clear(); + queryWrapper.select("is_freq","is_v_dev","is_v","is_i","is_unbalance","is_i_neg"). + in("measurement_point_id",collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper); + + rMpSurplusHarmonicDetailDQueryWrapper.clear(); + rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker","is_inuharm"). + in("measurement_point_id",collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper); + + rStatOrgDPOQueryWrapper.clear(); + rStatOrgDPOQueryWrapper.select("effective_measurement"). + eq("org_no",deptGetChildrenMoreDTO.getUnitId()). + eq("measurement_type_class",getmeasurementType(k,lineSortMap)). + eq("data_type",dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper); + + steadyStatis.forEach(dictData -> { + if(Objects.equals(dictData.getCode(),DicDataEnum.TOTAL_INDICATOR.getCode())){ + return; + } + RStatHarmonicDPO rStatHarmonicDPO = new RStatHarmonicDPO(); + rStatHarmonicDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatHarmonicDPO.setDataDate(date); + rStatHarmonicDPO.setHarmonicType(dictData.getId()); + rStatHarmonicDPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + rStatHarmonicDPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap)); + rStatHarmonicDPO.setOverLimitMeasurement(getSteadyStatisData(dictData,rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS)); + if(rStatOrgDPO.getEffectiveMeasurement()==0){ + rStatHarmonicDPO.setOverLimitMeasurementRatio(1.00); + + }else{ + String value = df.format((float)rStatHarmonicDPO.getOverLimitMeasurement() / rStatOrgDPO.getEffectiveMeasurement()); + rStatHarmonicDPO.setOverLimitMeasurementRatio(Double.parseDouble(value)); + } + rStatHarmonicDPOList.add(rStatHarmonicDPO); + }); + + }); + + } + /*配网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())) { + List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds(); + Map> pwMonitorMap = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + pwMonitorMap.forEach((k, v) -> { + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + + queryWrapper.clear(); + queryWrapper.select("is_freq", "is_v_dev", "is_v", "is_i", "is_unbalance", "is_i_neg"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper); + + rMpSurplusHarmonicDetailDQueryWrapper.clear(); + rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker", "is_inuharm"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper); + + rStatOrgDPOQueryWrapper.clear(); + rStatOrgDPOQueryWrapper.select("effective_measurement"). + eq("org_no", deptGetChildrenMoreDTO.getUnitId()). + eq("measurement_type_class", getmeasurementType(k, lineSortMap)). + eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper); + + steadyStatis.forEach(dictData -> { + if (Objects.equals(dictData.getCode(), DicDataEnum.NEG_CURRENT.getCode())) { + return; + } + RStatHarmonicDPO rStatHarmonicDPO = new RStatHarmonicDPO(); + rStatHarmonicDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatHarmonicDPO.setDataDate(date); + rStatHarmonicDPO.setHarmonicType(dictData.getId()); + rStatHarmonicDPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()); + rStatHarmonicDPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap)); + rStatHarmonicDPO.setOverLimitMeasurement(getSteadyStatisData(dictData, rMpPartHarmonicDetailDS, rMpSurplusHarmonicDetailDS)); + if (rStatOrgDPO.getEffectiveMeasurement() == 0) { + rStatHarmonicDPO.setOverLimitMeasurementRatio(1.00); + + } else { + String value = df.format(rStatHarmonicDPO.getOverLimitMeasurement() / rStatOrgDPO.getEffectiveMeasurement()); + rStatHarmonicDPO.setOverLimitMeasurementRatio(Double.parseDouble(value)); + } + rStatHarmonicDPOList.add(rStatHarmonicDPO); + }); + + }); + } + + }); + if(!CollectionUtils.isEmpty(rStatHarmonicDPOList)){ + rStatHarmonicDPOService.saveOrUpdateBatchByMultiId(rStatHarmonicDPOList,500); + } + + + } + + private String getmeasurementType(Integer k, Map lineSortMap) { + String value =""; + switch (k) { + case 1: + value =lineSortMap.get(DicDataEnum.ONE_LINE.getCode()).getId(); + break; + case 2: + value =lineSortMap.get(DicDataEnum.TWO_LINE.getCode()).getId(); + break; + case 3: + value =lineSortMap.get(DicDataEnum.THREE_LINE.getCode()).getId(); + break; + default: + break; + } + return value; + } + + private Integer getSteadyStatisData(DictData dictData, List rMpPartHarmonicDetailDS, List rMpSurplusHarmonicDetailDS) { + Integer value = 0; + if (Objects.equals(dictData.getCode(),DicDataEnum.VOLTAGE_DEV.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsVDev()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.FLICKER.getCode())) { + value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsFlicker()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsV()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_CURRENT.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsI()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsInuharm()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.PHASE_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsUnbalance()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.FREQUENCY_DEV.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsFreq()==1).count()+""); + + } + if (Objects.equals(dictData.getCode(),DicDataEnum.NEG_CURRENT.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsINeg()==1).count()+""); + } + + return value; + + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgMServiceImpl.java index 2c74cdbdd..4d2e746e6 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgMServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgMServiceImpl.java @@ -3,7 +3,9 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.area; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.harmonic.pojo.po.RStatOrgMPO; import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgDService; import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgMService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; /** * @@ -15,6 +17,10 @@ import org.springframework.stereotype.Service; * @version V1.0.0 */ @Service +@RequiredArgsConstructor public class RStatOrgMServiceImpl extends MppServiceImpl implements RStatOrgMService{ + + + } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java new file mode 100644 index 000000000..baaee7a88 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java @@ -0,0 +1,229 @@ +package com.njcn.prepare.harmonic.service.mysql.Impl.area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.harmonic.pojo.po.*; +import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper; +import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO; +import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO; +import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgDService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Description: + * Date: 2023/5/26 10:50【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +@RequiredArgsConstructor +public class RStatOrgServiceImpl implements RStatOrgService { + + private final RStatOrgDService rStatOrgDService; + private final + DicDataFeignClient dicDataFeignClient; + + private final ROperatingMonitorDMapper rOperatingMonitorDMapper; + private final RMpTargetWarnDMapper rMpTargetWarnDMapper; + private final RMpEventDetailDMapper rMpEventDetailDMapper; + @Override + + public void handler(List data, String dataDate, Integer type) { + switch (type) { +// case 1: +// this.hanlderOracleYear (lineParam); +// break; +// case 2: +// this.hanlderOracleQtr (lineParam); +// break; +// case 3: +// this.hanlderOracleMonth (lineParam); +// break; + case 5: + this.hanlderDay ( data, dataDate, type); + break; + default: + break; + } + } + + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderDay(List data, String dataDate, Integer type) { + List rStatOrgDPOList = new ArrayList<>(); + Date date = DateUtil.parse(dataDate); + + /*获取数据类型*/ + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取监测点类型类型*/ + List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData(); + Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + + QueryWrapper rOperatingMonitorDPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rmpTargetWarnDPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>(); + + + data.forEach(deptGetChildrenMoreDTO -> { + + /*主网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){ + List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList(); + Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + collect.forEach((k, v)->{ + + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + RStatOrgDPO rStatOrgDPO = new RStatOrgDPO(); + rStatOrgDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatOrgDPO.setDataDate(date); + rStatOrgDPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + rStatOrgDPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap)); + rStatOrgDPO.setAllCount(v.size()); + /*2、接入有效监测点数*/ + rOperatingMonitorDPOQueryWrapper.clear(); + rOperatingMonitorDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + gt("effective_minute_count",0). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper); + rStatOrgDPO.setEffectiveMeasurement(integer); + /*3、稳态超标监测点数*/ + rmpTargetWarnDPOQueryWrapper.clear(); + rmpTargetWarnDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + eq("is_harmonic",1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer1 = rMpTargetWarnDMapper.selectCount(rmpTargetWarnDPOQueryWrapper); + rStatOrgDPO.setHarmonicMeasurement(integer1); + /*4、发生暂态的监测点数,5、暂态指标发生次数*/ + rMpEventDetailDPOQueryWrapper.clear(); + rMpEventDetailDPOQueryWrapper. + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper); + Integer eventCount =0; + int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum(); + int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum(); + int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum(); + + rStatOrgDPO.setEventCount(sum+sum1+sum2); + rStatOrgDPO.setEventMeasurement(rMpEventDetailDPOS.size()); + /*todo这个指标不重要,后续根据配置来*/ + rStatOrgDPO.setShouldCount(8); + /*7、告警监测点数*/ + rOperatingMonitorDPOQueryWrapper.clear(); + rOperatingMonitorDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + eq("is_unusual",1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper); + rStatOrgDPO.setWarnCount(integer2); + rStatOrgDPOList.add(rStatOrgDPO); + }); + + } + /*配网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){ + List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds(); + Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + collect.forEach((k, v)->{ + + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + RStatOrgDPO rStatOrgDPO = new RStatOrgDPO(); + rStatOrgDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatOrgDPO.setDataDate(date); + rStatOrgDPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()); + rStatOrgDPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap)); + rStatOrgDPO.setAllCount(v.size()); + /*2、接入有效监测点数*/ + rOperatingMonitorDPOQueryWrapper.clear(); + rOperatingMonitorDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + gt("effective_minute_count",0). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper); + rStatOrgDPO.setEffectiveMeasurement(integer); + /*3、稳态超标监测点数*/ + rmpTargetWarnDPOQueryWrapper.clear(); + rmpTargetWarnDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + eq("is_harmonic",1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer1 = rMpTargetWarnDMapper.selectCount(rmpTargetWarnDPOQueryWrapper); + rStatOrgDPO.setHarmonicMeasurement(integer1); + /*4、发生暂态的监测点数,5、暂态指标发生次数*/ + rMpEventDetailDPOQueryWrapper.clear(); + rMpEventDetailDPOQueryWrapper.select("measurement_point_id"). + in("measurement_point_id", collect1). + in("measurement_point_id",collect1). + eq("is_harmonic",1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper); + rStatOrgDPO.setEventCount(rMpEventDetailDPOS.size()); + long count = rMpEventDetailDPOS.stream().distinct().count(); + rStatOrgDPO.setEventMeasurement(Integer.valueOf(count+"")); + /*todo这个指标不重要,后续根据配置来*/ + rStatOrgDPO.setShouldCount(8); + /*7、告警监测点数*/ + rOperatingMonitorDPOQueryWrapper.clear(); + rOperatingMonitorDPOQueryWrapper.select("1"). + in("measurement_point_id",collect1). + eq("is_unusual",1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper); + rStatOrgDPO.setWarnCount(integer2); + rStatOrgDPOList.add(rStatOrgDPO); + }); + + } + + }); + if (!CollectionUtils.isEmpty(rStatOrgDPOList)){ + rStatOrgDService.saveOrUpdateBatchByMultiId(rStatOrgDPOList,500); + } + + } + + private String getmeasurementType(Integer k, Map lineSortMap) { + String value =""; + switch (k) { + case 1: + value =lineSortMap.get(DicDataEnum.ONE_LINE.getCode()).getId(); + break; + case 2: + value =lineSortMap.get(DicDataEnum.TWO_LINE.getCode()).getId(); + break; + case 3: + value =lineSortMap.get(DicDataEnum.THREE_LINE.getCode()).getId(); + break; + default: + break; + } + return value; + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java index 2b88f0ca2..471e343b2 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java @@ -6,6 +6,9 @@ import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper; import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.scheduling.annotation.Async; @@ -25,6 +28,8 @@ import java.util.List; * Description: * Date: 2023/5/4 14:25【需求编号】 * + + * @author clam * @version V1.0.0 */ @@ -33,19 +38,22 @@ import java.util.List; public class RStatDevSignalDPOServiceImpl extends MppServiceImpl implements RStatDevSignalDPOService{ private final RMpMonitorEvaluateDMapper revaluateDMapper; + private final + DicDataFeignClient dicDataFeignClient; @Override @Transactional(rollbackFor = {Exception.class}) @Async("asyncExecutor") @SneakyThrows - public void eventdetailHandler(List deviceParamList) { + public void eventdetailHandler(DeviceParam deviceParam) { List rStatDevSignalDPOList = new ArrayList<>(); - Date date = DateUtil.parse(deviceParamList.get(0).getDataDate()); + Date date = DateUtil.parse(deviceParam.getDataDate()); QueryWrapper wrapper = new QueryWrapper<>(); - deviceParamList.forEach(temp -> { + DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData(); + deviceParam.getDetailList().forEach(temp -> { RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO(); rStatDevSignalDPO.setDevId(temp.getDevId()); - rStatDevSignalDPO.setDeviceStatus(temp.getDeviceStatus()); + rStatDevSignalDPO.setDeviceStatus(data.getId()); rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime()); rStatDevSignalDPO.setDataDate(date); /** diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java index 7ed94b5a7..7ec6c25a7 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java @@ -18,5 +18,5 @@ import java.util.List; public interface RMpDevEvaluateDetailPOService extends IMppService { - void handler(List deviceParamList); + void handler(DeviceParam deviceParam); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicDPOService.java new file mode 100644 index 000000000..43bd79d93 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicDPOService.java @@ -0,0 +1,17 @@ +package com.njcn.prepare.harmonic.service.mysql.area; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO; +import com.baomidou.mybatisplus.extension.service.IService; + /** + * + * Description: + * Date: 2023/5/26 15:52【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RStatHarmonicDPOService extends IMppService { + + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java new file mode 100644 index 000000000..bd795fbec --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java @@ -0,0 +1,16 @@ +package com.njcn.prepare.harmonic.service.mysql.area; + +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; + +import java.util.List; + +/** + * Description: + * Date: 2023/5/26 15:40【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RStatHarmonicService { + void handler(List data, String dataDate, Integer type); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgService.java new file mode 100644 index 000000000..7ffdac52f --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgService.java @@ -0,0 +1,17 @@ +package com.njcn.prepare.harmonic.service.mysql.area; + +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; + +import java.util.List; + +/** + * Description: + * Date: 2023/5/26 10:50【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RStatOrgService +{ + void handler(List data, String dataDate, Integer type); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java index 77d7eb4c8..6e2eeba96 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java @@ -18,5 +18,5 @@ import java.util.List; public interface RStatDevSignalDPOService extends IMppService { - void eventdetailHandler(List deviceParamList); + void eventdetailHandler(DeviceParam deviceParam); } diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java index 26dc710ca..bbc86747d 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java @@ -244,7 +244,12 @@ public enum DicDataEnum { VOLTAGE_DEV("电压偏差", "Voltage_Dev"), FLICKER("闪变", "Flicker"), HARMONIC_VOLTAGE("谐波电压", "Harmonic_Voltage"), - + HARMONIC_CURRENT("谐波电流", "Harmonic_Current"), + INTERHARMONIC_VOLTAGE("间谐波电压", "Interharmonic_Voltage"), + PHASE_VOLTAGE("三相电压不平衡度", "phase_Voltage"), + FREQUENCY_DEV("频率偏差", "Frequency_Dev"), + NEG_CURRENT("负序电流", "Neg_Current"), + TOTAL_INDICATOR("总稳态指标", "Total_Indicator"), /** * 监测对象 */