diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventDPO.java new file mode 100644 index 000000000..eac43f0ca --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventDPO.java @@ -0,0 +1,49 @@ +package com.njcn.prepare.harmonic.pojo.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 com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; + +/** + *

+ * + *

+ * + * @author zbj + * @since 2023-06-06 + */ +@Data +@TableName("r_stat_event_d") +public class RStatEventDPO { + + @MppMultiId(value = "org_no") + private String orgNo; + + @MppMultiId(value = "data_date") + private LocalDate dataDate; + + @MppMultiId(value = "measurement_type_class") + private String measurementTypeClass; + + @MppMultiId(value = "event_type") + private String eventType; + + @TableField(value = "event_measurement") + private Integer eventMeasurement; + + @TableField(value = "event_measurement_ratio") + private Float eventMeasurementRatio; + + @TableField(value = "event_count") + private Integer eventCount; + + @MppMultiId(value = "data_type") + private String dataType; + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventDController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventDController.java new file mode 100644 index 000000000..4f31e3064 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventDController.java @@ -0,0 +1,79 @@ +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.newalgorithm.RStatEventDService; +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("/rStartEventD") +@RequiredArgsConstructor +public class RStatEventDController extends BaseController { + + private final RStatEventDService rStatEventDService; + + private final CommTerminalGeneralClient commTerminalGeneralClient; + + private final DeptFeignClient deptFeignClient; + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/rStartEventDHandler") + @ApiOperation("暂态指标日统计") + @ApiImplicitParam(name = "orgParam", value = "参数", required = true) + public HttpResult rStartEventDHandler(@RequestBody @Validated OrgParam orgParam) { + log.info(LocalDateTime.now() + "rStartEventDHandler始执行"); + String methodDescribe = getMethodDescribe("rStartEventDHandler"); + /** + * 支持补录 + */ + 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(); + + rStatEventDService.rStartEventDHandler(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/newalgorithm/RStatEventDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventDMapper.java new file mode 100644 index 000000000..c8d2524e9 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventDMapper.java @@ -0,0 +1,17 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; +import org.apache.ibatis.annotations.Mapper; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/12/13 15:39【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Mapper +public interface RStatEventDMapper extends BaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventDPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventDPOMapper.java new file mode 100644 index 000000000..c3366e692 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventDPOMapper.java @@ -0,0 +1,17 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; +import org.apache.ibatis.annotations.Mapper; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/12/13 15:39【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Mapper +public interface RStatEventDPOMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RStatEventDMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RStatEventDMapper.xml new file mode 100644 index 000000000..d87bb4cd5 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RStatEventDMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDPOService.java new file mode 100644 index 000000000..f4d6c6764 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDPOService.java @@ -0,0 +1,14 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; + + +/** + * @author zbj + * @since 2023-06-08 + */ + +public interface RStatEventDPOService extends IMppService { +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDService.java new file mode 100644 index 000000000..8364d7729 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventDService.java @@ -0,0 +1,18 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; + +import java.util.List; + +/** + * @author zbj + * @since 2023-06-06 + */ + +public interface RStatEventDService extends IService { + + void rStartEventDHandler(List data, String dataDate, Integer type); + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDPOServiceImpl.java new file mode 100644 index 000000000..1cf1eabce --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDPOServiceImpl.java @@ -0,0 +1,21 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventDPOMapper; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventDPOService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + *

+ * 终端检测监督 + *

+ * + * @author zbj + * @since 2023-06-08 + */ +@Service +@RequiredArgsConstructor +public class RStatEventDPOServiceImpl extends MppServiceImpl implements RStatEventDPOService { +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDServiceImpl.java new file mode 100644 index 000000000..e7076eecb --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventDServiceImpl.java @@ -0,0 +1,228 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.harmonic.pojo.po.RMpEventDetailDPO; +import com.njcn.harmonic.pojo.po.RStatOrgDPO; +import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventDMapper; +import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventDPOService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventDService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; +import com.njcn.user.api.DeptFeignClient; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 终端检测监督 + *

+ * + * @author zbj + * @since 2023-06-06 + */ +@Service +@RequiredArgsConstructor +public class RStatEventDServiceImpl extends ServiceImpl implements RStatEventDService { + + private final CommTerminalGeneralClient commTerminalGeneralClient; + + private final DeptFeignClient deptFeignClient; + + private final DicDataFeignClient dicDataFeignClient; + + private final RStatEventDMapper rStatEventDMapper; + + private final RMpEventDetailDMapper rMpEventDetailDMapper; + + private final RStatEventDPOService rStatEventDPOService; + + private final RStatOrgDMapper rStatOrgDMapper; + + @Override + public void rStartEventDHandler(List data, String dataDate, Integer type) { + List rStatEventDPOList = new ArrayList<>(); + DecimalFormat df = new DecimalFormat("0.00"); + Date date = DateUtil.parse(dataDate); + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + /*获取暂态统计指标*/ + List eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_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)); + + QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgDPOQueryWrapper = 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()); + + rMpEventDetailDPOQueryWrapper.clear(); + rMpEventDetailDPOQueryWrapper. + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper); + + 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); + + eventStatis.forEach(dictData -> { + if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) { + return; + } + List transientStatisData = getTransientStatisData(dictData, rMpEventDetailDPOS); + RStatEventDPO rStatEventDPO = new RStatEventDPO(); + rStatEventDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatEventDPO.setDataDate(localDate); + rStatEventDPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap)); + rStatEventDPO.setEventType(dictData.getId()); + rStatEventDPO.setEventMeasurement(transientStatisData.get(0)); + rStatEventDPO.setEventCount(transientStatisData.get(1)); + rStatEventDPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + if (rStatOrgDPO.getEffectiveMeasurement() == 0) { + rStatEventDPO.setEventMeasurementRatio(1.00f); + + } else { + String value = df.format(rStatEventDPO.getEventMeasurement() / rStatOrgDPO.getEffectiveMeasurement()); + rStatEventDPO.setEventMeasurementRatio(Float.parseFloat(value)); + } + rStatEventDPOList.add(rStatEventDPO); + } + ); + }); + } + + /*配网*/ + 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()); + + rMpEventDetailDPOQueryWrapper.clear(); + rMpEventDetailDPOQueryWrapper. + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper); + + 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); + + eventStatis.forEach(dictData -> { + if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode()) + || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) { + return; + } + List transientStatisData = getTransientStatisData(dictData, rMpEventDetailDPOS); + RStatEventDPO rStatEventDPO = new RStatEventDPO(); + rStatEventDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatEventDPO.setDataDate(localDate); + rStatEventDPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap)); + rStatEventDPO.setEventType(dictData.getId()); + rStatEventDPO.setEventMeasurement(transientStatisData.get(0)); + rStatEventDPO.setEventCount(transientStatisData.get(1)); + rStatEventDPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()); + if (rStatOrgDPO.getEffectiveMeasurement() == 0) { + rStatEventDPO.setEventMeasurementRatio(1.00f); + } else { + String value = df.format(rStatEventDPO.getEventMeasurement() / rStatOrgDPO.getEffectiveMeasurement()); + rStatEventDPO.setEventMeasurementRatio(Float.parseFloat(value)); + } + rStatEventDPOList.add(rStatEventDPO); + } + ); + }); + } + + }); + if (!CollectionUtils.isEmpty(rStatEventDPOList)) { + rStatEventDPOService.saveOrUpdateBatchByMultiId(rStatEventDPOList, 500); + } + } + + //获取监测点类型 1/2/3类字典id + 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 List getTransientStatisData(DictData dictData, List list) { + List result = new ArrayList<>(2); + Integer value = 0; + Integer count = 0; + if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_DIP.getCode())) { + value = Integer.valueOf(list.stream().filter(temp -> temp.getSagTimes() > 0).count() + ""); + count = Integer.valueOf(list.stream().mapToInt(obj -> obj.getSagTimes()).sum() + ""); + } + if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_RISE.getCode())) { + value = Integer.valueOf(list.stream().filter(temp -> temp.getSwellTimes() > 0).count() + ""); + count = Integer.valueOf(list.stream().mapToInt(obj -> obj.getSwellTimes()).sum() + ""); + } + if (Objects.equals(dictData.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) { + value = Integer.valueOf(list.stream().filter(temp -> temp.getInterruptTimes() > 0).count() + ""); + count = Integer.valueOf(list.stream().mapToInt(obj -> obj.getInterruptTimes()).sum() + ""); + } + result.add(value); + result.add(count); + return result; + + } + +}