添加算法

This commit is contained in:
huangzj
2023-11-28 10:27:53 +08:00
parent 543ad5908d
commit 2b77e54eba
17 changed files with 727 additions and 3 deletions

View File

@@ -0,0 +1,53 @@
package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.time.LocalDate;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_dim_bus_station_event_startis_d")
public class RDimBusStationEventStartisDPO {
@MppMultiId(value = "Org_Id")
private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate;
@MppMultiId(value = "Startis_Type")
private String startisType;
/**
* 监测到暂态指标的变电站母线占比(%
*/
@TableField(value = "Limit_Rate")
private Double limitRate;
/**
* 变电站母线暂态指标发生频次(次/线)
*/
@TableField(value = "Limit_Freq")
private Double limitFreq;
/**
* 监测到暂态指标的变电站占比(%
*/
@TableField(value = "Station_Limit_Rate")
private Double stationLimitRate;
/**
* 变电站暂态指标发生频次(次/站)
*/
@TableField(value = "Station_Freq")
private Double stationFreq;
}

View File

@@ -0,0 +1,53 @@
package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.time.LocalDate;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_dim_bus_station_event_startis_m")
public class RDimBusStationEventStartisMPO {
@MppMultiId(value = "Org_Id")
private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate;
@MppMultiId(value = "Startis_Type")
private String startisType;
/**
* 监测到暂态指标的变电站母线占比(%
*/
@TableField(value = "Limit_Rate")
private Double limitRate;
/**
* 变电站母线暂态指标发生频次(次/线)
*/
@TableField(value = "Limit_Freq")
private Double limitFreq;
/**
* 监测到暂态指标的变电站占比(%
*/
@TableField(value = "Station_Limit_Rate")
private Double stationLimitRate;
/**
* 变电站暂态指标发生频次(次/站)
*/
@TableField(value = "Station_Freq")
private Double stationFreq;
}

View File

@@ -0,0 +1,53 @@
package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.time.LocalDate;
/**
*
* Description:
* Date: 2023/11/27 15:10【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_dim_bus_station_event_startis_y")
public class RDimBusStationEventStartisYPO {
@MppMultiId(value = "Org_Id")
private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate;
@MppMultiId(value = "Startis_Type")
private String startisType;
/**
* 监测到暂态指标的变电站母线占比(%
*/
@TableField(value = "Limit_Rate")
private Double limitRate;
/**
* 变电站母线暂态指标发生频次(次/线)
*/
@TableField(value = "Limit_Freq")
private Double limitFreq;
/**
* 监测到暂态指标的变电站占比(%
*/
@TableField(value = "Station_Limit_Rate")
private Double stationLimitRate;
/**
* 变电站暂态指标发生频次(次/站)
*/
@TableField(value = "Station_Freq")
private Double stationFreq;
}

View File

@@ -20,7 +20,7 @@ public class CalculatedParam<T> implements Serializable {
* 是否全链路执行算法
* 非全链路执行时tag集合必须非空
*/
@ApiModelProperty(name = "repair",value = "是否全链执行")
@ApiModelProperty(name = "fullChain",value = "是否全链执行")
private boolean fullChain;
/**

View File

@@ -64,8 +64,9 @@ public class OrgPointExecutor extends BaseExecutor{
private final IRDimObjGlobalMService irDimObjGlobalMService;
private final IRDimObjGlobalYService irDimObjGlobalYService;
private final RDimBusStationEventStartisDPOService rDimBusStationEventStartisDPOService;
private final RDimBusStationEventStartisMPOService rDimBusStationEventStartisMPOService;
private final RDimBusStationEventStartisYPOService rDimBusStationEventStartisYPOService;
/**
*
* 3.3.2. 单位标数据质量
@@ -565,5 +566,34 @@ public class OrgPointExecutor extends BaseExecutor{
}
}
/**
* 河北主网新增算法表r_dim_obj_target_d/m/y
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rDimObjBusStationEventStartis", nodeType = NodeTypeEnum.COMMON)
public boolean processRDimObjBusStationEventStartisAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rDimObjBusStationEventStartis", nodeType = NodeTypeEnum.COMMON)
public void processDimObjBusStationEventStartisProcess(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
if (tag.equalsIgnoreCase("r_dim_bus_station_event_startis_d")) {
//日表
rDimBusStationEventStartisDPOService.handleDay(calculatedParam);
} else if (tag.equalsIgnoreCase("r_dim_bus_station_event_startis_m")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//月表
rDimBusStationEventStartisMPOService.handleMonth(calculatedParam);
}
}else if (tag.equalsIgnoreCase("r_dim_bus_station_event_startis_y")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//年表
rDimBusStationEventStartisYPOService.handleYear(calculatedParam);
}
}
}
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisDPO;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisDPOMapper extends MppBaseMapper<RDimBusStationEventStartisDPO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisMPO;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisMPOMapper extends MppBaseMapper<RDimBusStationEventStartisMPO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisYPO;
/**
*
* Description:
* Date: 2023/11/27 15:10【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisYPOMapper extends MppBaseMapper<RDimBusStationEventStartisYPO> {
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisDPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisDPO">
<!--@mbg.generated-->
<!--@Table r_dim_bus_station_event_startis_d-->
<id column="Org_Id" jdbcType="CHAR" property="orgId" />
<id column="Statis_Date" jdbcType="DATE" property="statisDate" />
<id column="Startis_Type" jdbcType="VARCHAR" property="startisType" />
<result column="Limit_Rate" jdbcType="REAL" property="limitRate" />
<result column="Limit_Freq" jdbcType="REAL" property="limitFreq" />
<result column="Station_Limit_Rate" jdbcType="REAL" property="stationLimitRate" />
<result column="Station_Freq" jdbcType="REAL" property="stationFreq" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
Org_Id, Statis_Date, Startis_Type, Limit_Rate, Limit_Freq, Station_Limit_Rate, Station_Freq
</sql>
</mapper>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisMPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisMPO">
<!--@mbg.generated-->
<!--@Table r_dim_bus_station_event_startis_m-->
<id column="Org_Id" jdbcType="CHAR" property="orgId" />
<id column="Statis_Date" jdbcType="DATE" property="statisDate" />
<id column="Startis_Type" jdbcType="VARCHAR" property="startisType" />
<result column="Limit_Rate" jdbcType="REAL" property="limitRate" />
<result column="Limit_Freq" jdbcType="REAL" property="limitFreq" />
<result column="Station_Limit_Rate" jdbcType="REAL" property="stationLimitRate" />
<result column="Station_Freq" jdbcType="REAL" property="stationFreq" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
Org_Id, Statis_Date, Startis_Type, Limit_Rate, Limit_Freq, Station_Limit_Rate, Station_Freq
</sql>
</mapper>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisYPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisYPO">
<!--@mbg.generated-->
<!--@Table r_dim_bus_station_event_startis_y-->
<id column="Org_Id" jdbcType="CHAR" property="orgId" />
<id column="Statis_Date" jdbcType="DATE" property="statisDate" />
<id column="Startis_Type" jdbcType="VARCHAR" property="startisType" />
<result column="Limit_Rate" jdbcType="REAL" property="limitRate" />
<result column="Limit_Freq" jdbcType="REAL" property="limitFreq" />
<result column="Station_Limit_Rate" jdbcType="REAL" property="stationLimitRate" />
<result column="Station_Freq" jdbcType="REAL" property="stationFreq" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
Org_Id, Statis_Date, Startis_Type, Limit_Rate, Limit_Freq, Station_Limit_Rate, Station_Freq
</sql>
</mapper>

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.dim;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisDPO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisDPOService extends IMppService<RDimBusStationEventStartisDPO> {
void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.dim;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisMPO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisMPOService extends IMppService<RDimBusStationEventStartisMPO> {
void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.dim;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisYPO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/11/27 15:10【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusStationEventStartisYPOService extends IMppService<RDimBusStationEventStartisYPO> {
void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,123 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisDPO;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.njcn.harmonic.pojo.po.dim.RDimStationHarmnicDPO;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisDPOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusStationEventStartisDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimStationHarmnicDPOService;
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 org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RDimBusStationEventStartisDPOServiceImpl extends MppServiceImpl<RDimBusStationEventStartisDPOMapper, RDimBusStationEventStartisDPO> implements RDimBusStationEventStartisDPOService{
private final RDimBusbarHarmnicDPOService rDimBusbarHarmnicDPOService;
private final RDimStationHarmnicDPOService rDimStationHarmnicDPOService;
private final DicDataFeignClient dicDataFeignClient;
@Override
public void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimBusStationEventStartisDPO> poList = new ArrayList<>();
LocalDate date = LocalDate.parse(calculatedParam.getDataDate());
List<DictData> eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
LambdaQueryWrapper<RDimBusbarHarmnicDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RDimBusbarHarmnicDPO::getOrgId,deptGetChildrenMoreDTO.getUnitId())
.eq(RDimBusbarHarmnicDPO::getStatisDate,date)
.eq(RDimBusbarHarmnicDPO::getLevel,1);
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOList = rDimBusbarHarmnicDPOService.list(lambdaQueryWrapper);
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOList = rDimStationHarmnicDPOService.lambdaQuery().eq(RDimStationHarmnicDPO::getOrgId, deptGetChildrenMoreDTO.getUnitId())
.eq(RDimStationHarmnicDPO::getStatisDate, date)
.eq(RDimStationHarmnicDPO::getLevel, 1).list();
//暂态
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;
}
RDimBusStationEventStartisDPO rDimBusStationEventStartisDPO = new RDimBusStationEventStartisDPO();
rDimBusStationEventStartisDPO.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimBusStationEventStartisDPO.setStatisDate(date);
rDimBusStationEventStartisDPO.setStartisType(dictData.getId());
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOListBytag = rDimBusbarHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOListBytag = rDimStationHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
if(CollUtil.isEmpty(rDimBusbarHarmnicDPOListBytag)){
rDimBusStationEventStartisDPO.setLimitRate(0.00);
rDimBusStationEventStartisDPO.setLimitFreq(0.00);
}else {
long allBus = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
List<RDimBusbarHarmnicDPO> limitBus = rDimBusbarHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
rDimBusStationEventStartisDPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitBus.stream().mapToInt(RDimBusbarHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisDPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
if(CollUtil.isEmpty(rDimStationHarmnicDPOListBytag)){
rDimBusStationEventStartisDPO.setStationFreq(0.00);
rDimBusStationEventStartisDPO.setStationLimitRate(0.00);
}else {
long allBus = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
List<RDimStationHarmnicDPO> limitstation = rDimStationHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
rDimBusStationEventStartisDPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitstation.stream().mapToInt(RDimStationHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisDPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
poList.add(rDimBusStationEventStartisDPO);
});
}
if (!CollectionUtils.isEmpty(poList) ) {
this.saveOrUpdateBatchByMultiId(poList,500);
}
}
}

View File

@@ -0,0 +1,126 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisMPO;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.njcn.harmonic.pojo.po.dim.RDimStationHarmnicDPO;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisMPOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusStationEventStartisMPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimStationHarmnicDPOService;
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 org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/11/27 15:09【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RDimBusStationEventStartisMPOServiceImpl extends MppServiceImpl<RDimBusStationEventStartisMPOMapper, RDimBusStationEventStartisMPO> implements RDimBusStationEventStartisMPOService{
private final RDimBusbarHarmnicDPOService rDimBusbarHarmnicDPOService;
private final RDimStationHarmnicDPOService rDimStationHarmnicDPOService;
private final DicDataFeignClient dicDataFeignClient;
@Override
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimBusStationEventStartisMPO> poList = new ArrayList<>();
LocalDate date = LocalDate.parse(calculatedParam.getDataDate());
//获取日期
DateTime begin = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
DateTime end = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
List<DictData> eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
LambdaQueryWrapper<RDimBusbarHarmnicDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RDimBusbarHarmnicDPO::getOrgId,deptGetChildrenMoreDTO.getUnitId())
.between(RDimBusbarHarmnicDPO::getStatisDate,begin,end)
.eq(RDimBusbarHarmnicDPO::getLevel,1);
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOList = rDimBusbarHarmnicDPOService.list(lambdaQueryWrapper);
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOList = rDimStationHarmnicDPOService.lambdaQuery().eq(RDimStationHarmnicDPO::getOrgId, deptGetChildrenMoreDTO.getUnitId())
.between(RDimStationHarmnicDPO::getStatisDate,begin,end)
.eq(RDimStationHarmnicDPO::getLevel, 1).list();
//暂态
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;
}
RDimBusStationEventStartisMPO rDimBusStationEventStartisMPO = new RDimBusStationEventStartisMPO();
rDimBusStationEventStartisMPO.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimBusStationEventStartisMPO.setStatisDate(date);
rDimBusStationEventStartisMPO.setStartisType(dictData.getId());
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOListBytag = rDimBusbarHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOListBytag = rDimStationHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
if(CollUtil.isEmpty(rDimBusbarHarmnicDPOListBytag)){
rDimBusStationEventStartisMPO.setLimitRate(0.00);
rDimBusStationEventStartisMPO.setLimitFreq(0.00);
}else {
long allBus = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
List<RDimBusbarHarmnicDPO> limitBus = rDimBusbarHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
rDimBusStationEventStartisMPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitBus.stream().mapToInt(RDimBusbarHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisMPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
if(CollUtil.isEmpty(rDimStationHarmnicDPOListBytag)){
rDimBusStationEventStartisMPO.setStationFreq(0.00);
rDimBusStationEventStartisMPO.setStationLimitRate(0.00);
}else {
long allBus = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
List<RDimStationHarmnicDPO> limitstation = rDimStationHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
rDimBusStationEventStartisMPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitstation.stream().mapToInt(RDimStationHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisMPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
poList.add(rDimBusStationEventStartisMPO);
});
}
if (!CollectionUtils.isEmpty(poList) ) {
this.saveOrUpdateBatchByMultiId(poList,500);
}
}
}

View File

@@ -0,0 +1,124 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusStationEventStartisYPO;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.njcn.harmonic.pojo.po.dim.RDimStationHarmnicDPO;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusStationEventStartisYPOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusStationEventStartisYPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimStationHarmnicDPOService;
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 org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/11/27 15:10【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RDimBusStationEventStartisYPOServiceImpl extends MppServiceImpl<RDimBusStationEventStartisYPOMapper, RDimBusStationEventStartisYPO> implements RDimBusStationEventStartisYPOService{
private final RDimBusbarHarmnicDPOService rDimBusbarHarmnicDPOService;
private final RDimStationHarmnicDPOService rDimStationHarmnicDPOService;
private final DicDataFeignClient dicDataFeignClient;
@Override
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimBusStationEventStartisYPO> poList = new ArrayList<>();
LocalDate date = LocalDate.parse(calculatedParam.getDataDate());
//获取日期
DateTime begin = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
DateTime end = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
List<DictData> eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
LambdaQueryWrapper<RDimBusbarHarmnicDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RDimBusbarHarmnicDPO::getOrgId,deptGetChildrenMoreDTO.getUnitId())
.between(RDimBusbarHarmnicDPO::getStatisDate,begin,end)
.eq(RDimBusbarHarmnicDPO::getLevel,1);
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOList = rDimBusbarHarmnicDPOService.list(lambdaQueryWrapper);
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOList = rDimStationHarmnicDPOService.lambdaQuery().eq(RDimStationHarmnicDPO::getOrgId, deptGetChildrenMoreDTO.getUnitId())
.between(RDimStationHarmnicDPO::getStatisDate,begin,end)
.eq(RDimStationHarmnicDPO::getLevel, 1).list();
//暂态
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;
}
RDimBusStationEventStartisYPO rDimBusStationEventStartisYPO = new RDimBusStationEventStartisYPO();
rDimBusStationEventStartisYPO.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimBusStationEventStartisYPO.setStatisDate(date);
rDimBusStationEventStartisYPO.setStartisType(dictData.getId());
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOListBytag = rDimBusbarHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
List<RDimStationHarmnicDPO> rDimStationHarmnicDPOListBytag = rDimStationHarmnicDPOList.stream().filter(temp -> Objects.equals(temp.getTargetType(), dictData.getId())).collect(Collectors.toList());
if(CollUtil.isEmpty(rDimBusbarHarmnicDPOListBytag)){
rDimBusStationEventStartisYPO.setLimitRate(0.00);
rDimBusStationEventStartisYPO.setLimitFreq(0.00);
}else {
long allBus = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
List<RDimBusbarHarmnicDPO> limitBus = rDimBusbarHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimBusbarHarmnicDPOListBytag.stream().map(RDimBusbarHarmnicDPO::getBusbarId).distinct().count();
rDimBusStationEventStartisYPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitBus.stream().mapToInt(RDimBusbarHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisYPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
if(CollUtil.isEmpty(rDimStationHarmnicDPOListBytag)){
rDimBusStationEventStartisYPO.setStationFreq(0.00);
rDimBusStationEventStartisYPO.setStationLimitRate(0.00);
}else {
long allBus = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
List<RDimStationHarmnicDPO> limitstation = rDimStationHarmnicDPOListBytag.stream().filter(item->item.getLimitCount()>0).collect(Collectors.toList());
long limit = rDimStationHarmnicDPOListBytag.stream().map(RDimStationHarmnicDPO::getStationId).distinct().count();
rDimBusStationEventStartisYPO.setLimitRate(Double.valueOf((float)limit/allBus));
int sum = limitstation.stream().mapToInt(RDimStationHarmnicDPO::getLimitCount).sum();
rDimBusStationEventStartisYPO.setLimitFreq(Double.valueOf((float)sum/allBus));
}
poList.add(rDimBusStationEventStartisYPO);
});
}
if (!CollectionUtils.isEmpty(poList) ) {
this.saveOrUpdateBatchByMultiId(poList,500);
}
}
}