1.pom版本控制

2.发射特性和影响特性算法
This commit is contained in:
wr
2023-10-17 16:46:18 +08:00
parent 6cc13da4f7
commit 736ad700a6
38 changed files with 1185 additions and 87 deletions

View File

@@ -21,32 +21,22 @@
<dependencies>
<!--pq-device-boot和pms-device-boot只能选择一个-->
<dependency>
<groupId>com.njcn</groupId>
<artifactId>pq-device-boot</artifactId>
<version>${project.version}</version>
</dependency>
<!-- <dependency>
<!-- <dependency>-->
<!-- <groupId>com.njcn</groupId>-->
<!-- <artifactId>pq-device-boot</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.njcn</groupId>
<artifactId>pms-device-boot</artifactId>
<version>${project.version}</version>
</dependency>-->
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-swagger</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.9.0</version>
</dependency>
</dependencies>
<build>

View File

@@ -1,5 +1,6 @@
package com.njcn.device.pms.pojo.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -20,6 +21,7 @@ public class RMpMonitorAlarmCountM implements Serializable {
/**
* 单位ID
*/
@TableField(exist = false)
private String orgNo;
/**

View File

@@ -168,6 +168,14 @@
pm.Line_Name
FROM
pms_monitor AS pm
<where>
<if test="pwPmsMonitorParam.monitorTag!=null and pwPmsMonitorParam.monitorTag.size()!=0">
AND pm.Monitor_Tag IN
<foreach collection="pwPmsMonitorParam.monitorTag" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
) UNION ALL
(
SELECT

View File

@@ -224,56 +224,21 @@
</select>
<select id="selectListAll" resultType="com.njcn.device.pms.pojo.vo.DistributionMonitorVO">
SELECT
t.org_id as orgNo,
b.org_id as orgNo,
pss.Longitude as longitude,
pss.Latitude as latitude,
b.Status ,
b.*
FROM
(
( SELECT id,org_id, Operation_Id, Power_Station_Id, Line_Id FROM pms_power_client
pms_distribution_monitor b
LEFT JOIN pms_statation_stat pss on b.Power_Station_Id=pss.Power_Id
<where>
org_id IN
b.org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
AND b.STATUS = 1
</where>
) UNION ALL
( SELECT id,org_id, Operation_Id, Power_Station_Id, Line_Id FROM pms_power_generation_user
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
) UNION ALL
( SELECT id,org_id, Operation_Id, Power_Station_Id, Line_Id FROM pms_power_distributionarea
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
) UNION ALL
( SELECT id,org_id, Operation_Id, Powerr_Id, Line_Id FROM pms_monitor
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
)
) t
INNER JOIN pms_distribution_monitor b ON t.id = b.Monitor_Id and b.Status=1
LEFT JOIN pms_statation_stat pss on t.Power_Station_Id=pss.Power_Id
</select>
<select id="selectPhotovoltaicUser" resultType="com.njcn.device.pms.pojo.vo.OverviewVO$PhotoVoltaicVoltage">
(select

View File

@@ -119,6 +119,9 @@ public class IPwMonitorServiceImpl implements IPwMonitorService {
.map(DeptDTO::getCode)
.distinct()
.collect(Collectors.toList());
//获取分布式光伏字典id
DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.DISTRIBUTED_PHOTOVOLTAICS.getCode()).getData();
pwPmsMonitorParam.setMonitorTag(Arrays.asList(data.getId()));
//获取monitor详细数据
return pwMonitorMapper.getPwPhotovoltaicMonitorList(deptIdList, pwPmsMonitorParam);

View File

@@ -142,10 +142,13 @@ public class OverviewServiceImpl implements OverviewService {
//数据 key:监测点类别 value:数量
Map<String, Long> map = distributionMonitors.stream().collect(Collectors.groupingBy(dm -> dm.getMonitorSort(), Collectors.counting()));
//获取监测点id
List<String> ids = distributionMonitors.stream().map(DistributionMonitorVO::getMonitorId).collect(Collectors.toList());
//获取数据库数据
List<RMpMonitorAlarmCountM> list = rMpMonitorAlarmCountMService.list(new LambdaQueryWrapper<RMpMonitorAlarmCountM>()
.in(RMpMonitorAlarmCountM::getOrgNo, deptListCode)
.in(RMpMonitorAlarmCountM::getMeasurementPointId, ids)
.eq(RMpMonitorAlarmCountM::getDataType,data.getId())
.ge(StringUtils.isNotBlank(param.getStartTime()), RMpMonitorAlarmCountM::getDataDate, param.getStartTime())
.le(StringUtils.isNotBlank(param.getEndTime()), RMpMonitorAlarmCountM::getDataDate, param.getEndTime())

View File

@@ -27,9 +27,6 @@ public class RMpEmissionIExcessRateM implements Serializable {
@TableField(value = "org_no")
private String orgNo;
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
@MppMultiId
@TableField(value = "monitor_tag")

View File

@@ -19,9 +19,6 @@ public class RMpEmissionIM implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
@MppMultiId
@TableField(value = "monitor_tag")

View File

@@ -30,9 +30,6 @@ public class RMpEmissionM implements Serializable {
@TableField(value = "monitor_tag")
private String monitorTag;
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
/**
* 生成数据的时间,每月统计一次

View File

@@ -33,13 +33,6 @@ public class RMpInfluenceM implements Serializable {
@TableField(value = "data_date")
private Date dataDate;
/**
* 监测点id
*/
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
/**
* 负序电压不平衡度
*/

View File

@@ -33,12 +33,6 @@ public class RMpInfluenceVExcessRateM implements Serializable {
@TableField(value = "data_date")
private Date dataDate;
/**
* 监测点id
*/
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
/**
* 2次谐波电压超标占比

View File

@@ -33,12 +33,6 @@ public class RMpInfluenceVM implements Serializable {
@TableField(value = "data_date")
private Date dataDate;
/**
* 监测点id
*/
@MppMultiId
@TableField(value = "measurement_point_id")
private String measurementPointId;
/**
* 2次谐波电压含有率

View File

@@ -0,0 +1,54 @@
package com.njcn.prepare.harmonic.controller.newalgorithm;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionMService;
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.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 com.njcn.web.controller.BaseController;
import java.time.LocalDateTime;
/**
* <p>
* 风电场发射特性-月表 前端控制器
* </p>
*
* @author wr
* @since 2023-10-16
*/
@Slf4j
@Api(tags = "专项分析-发射特性算法")
@RestController
@RequestMapping("/rMpEmissionM")
@RequiredArgsConstructor
public class RMpEmissionMController extends BaseController {
private final IRMpEmissionMService irMpEmissionMService;
@ApiOperation("发射特性(r_mp_emission_m表数据)")
@ApiImplicitParam(value = "jobParam", name = "jobParam", required = true)
@PostMapping("rMpEmissionMHandler")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> rMpEmissionMHandler(@RequestBody LineParam jobParam) {
log.info(LocalDateTime.now() + "rMpEmissionMHandler开始执行");
String methodDescribe = getMethodDescribe("rMpEmissionMHandler");
irMpEmissionMService.rMpEmissionMHandler(jobParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
}
}

View File

@@ -0,0 +1,54 @@
package com.njcn.prepare.harmonic.controller.newalgorithm;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionMService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpInfluenceMService;
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.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 com.njcn.web.controller.BaseController;
import java.time.LocalDateTime;
/**
* <p>
* 影响特性-月表 前端控制器
* </p>
*
* @author wr
* @since 2023-10-17
*/
@Slf4j
@Api(tags = "专项分析-影响特性算法")
@RestController
@RequestMapping("/rMpInfluenceM")
@RequiredArgsConstructor
public class RMpInfluenceMController extends BaseController {
private final IRMpInfluenceMService irMpEmissionMService;
@ApiOperation("影响特性(r_mp_emission_m表数据)")
@ApiImplicitParam(value = "jobParam", name = "jobParam", required = true)
@PostMapping("rMpInfluenceMHandler")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> rMpInfluenceMHandler(@RequestBody LineParam jobParam) {
log.info(LocalDateTime.now() + "rMpInfluenceMHandler开始执行");
String methodDescribe = getMethodDescribe("rMpInfluenceMHandler");
irMpEmissionMService.rMpInfluenceMHandler(jobParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
}
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
/**
* <p>
* 风电场发射特性-月表/各次谐波电流超标占比 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface RMpEmissionIExcessRateMMapper extends MppBaseMapper<RMpEmissionIExcessRateM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpEmissionIM;
/**
* <p>
* 风电场发射特性-月表/各次谐波电流含有率 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface RMpEmissionIMMapper extends MppBaseMapper<RMpEmissionIM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpEmissionM;
/**
* <p>
* 发射特性-月表 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface RMpEmissionMMapper extends MppBaseMapper<RMpEmissionM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpInfluenceM;
/**
* <p>
* 风电场影响特性-月表 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface RMpInfluenceMMapper extends MppBaseMapper<RMpInfluenceM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压超标占比 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface RMpInfluenceVExcessRateMMapper extends MppBaseMapper<RMpInfluenceVExcessRateM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压含有率 Mapper 接口
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface RMpInfluenceVMMapper extends MppBaseMapper<RMpInfluenceVM> {
}

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpEmissionIExcessRateMMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpEmissionIMMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpEmissionMMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpInfluenceMMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpInfluenceVExcessRateMMapper">
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.newalgorithm.RMpInfluenceVMMapper">
</mapper>

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
/**
* <p>
* 发射特性-月表/各次谐波电流超标占比 服务类
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface IRMpEmissionIExcessRateMService extends IMppService<RMpEmissionIExcessRateM> {
}

View File

@@ -0,0 +1,17 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpEmissionIM;
/**
* <p>
* 发射特性-月表/各次谐波电流含有率 服务类
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface IRMpEmissionIMService extends IMppService<RMpEmissionIM> {
}

View File

@@ -0,0 +1,25 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpEmissionM;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/**
* <p>
* 发射特性-月表 服务类
* </p>
*
* @author wr
* @since 2023-10-16
*/
public interface IRMpEmissionMService extends IMppService<RMpEmissionM> {
/**
* @Description: 发射特性算法(r_mp_emission_m)
* @param jobParam
* @Author: wr
* @Date: 2023/10/16 13:30
*/
void rMpEmissionMHandler(LineParam jobParam);
}

View File

@@ -0,0 +1,24 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpInfluenceM;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/**
* <p>
* 影响特性-月表 服务类
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface IRMpInfluenceMService extends IMppService<RMpInfluenceM> {
/**
* @Description: 影响特性算法(r_mp_emission_m)
* @param jobParam
* @Author: wr
* @Date: 2023/10/16 13:30
*/
void rMpInfluenceMHandler(LineParam jobParam);
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压超标占比 服务类
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface IRMpInfluenceVExcessRateMService extends IMppService<RMpInfluenceVExcessRateM> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压含有率 服务类
* </p>
*
* @author wr
* @since 2023-10-17
*/
public interface IRMpInfluenceVMService extends IMppService<RMpInfluenceVM> {
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIExcessRateMMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIExcessRateMService;
import org.springframework.stereotype.Service;
/**
* <p>
* 发射特性-月表/各次谐波电流超标占比 服务实现类
* </p>
*
* @author wr
* @since 2023-10-16
*/
@Service
public class RMpEmissionIExcessRateMServiceImpl extends MppServiceImpl<RMpEmissionIExcessRateMMapper, RMpEmissionIExcessRateM> implements IRMpEmissionIExcessRateMService {
}

View File

@@ -0,0 +1,23 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.harmonic.pojo.po.RMpEmissionIM;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIMMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIMService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* <p>
* 发射特性-月表/各次谐波电流含有率 服务实现类
* </p>
*
* @author wr
* @since 2023-10-16
*/
@Service
@RequiredArgsConstructor
public class RMpEmissionIMServiceImpl extends MppServiceImpl<RMpEmissionIMMapper, RMpEmissionIM> implements IRMpEmissionIMService {
}

View File

@@ -0,0 +1,363 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
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.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pq.pojo.po.DeptLine;
import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
import com.njcn.harmonic.pojo.po.RMpEmissionIM;
import com.njcn.harmonic.pojo.po.RMpEmissionM;
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.utils.PubUtils;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionMMapper;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.mysql.day.IRStatDataIDService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIExcessRateMService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIMService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionMService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 发射特性-月表 服务实现类
* </p>
*
* @author wr
* @since 2023-10-16
*/
@Service
@RequiredArgsConstructor
public class RMpEmissionMServiceImpl extends MppServiceImpl<RMpEmissionMMapper, RMpEmissionM> implements IRMpEmissionMService {
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DeptFeignClient deptFeignClient;
private final IRStatDataIDService dataIVService;
private final RStatLimitRateDMapper rStatLimitRateDMapper;
private final IRMpEmissionIMService irMpEmissionIMService;
private final IRMpEmissionIExcessRateMService irMpEmissionIExcessRateMService;
@Override
@Async("asyncExecutor")
@Transactional(rollbackFor = {Exception.class})
public void rMpEmissionMHandler(LineParam jobParam) {
List<RMpEmissionM> rMpEmissionMS = new ArrayList<>();
List<RMpEmissionIM> rMpEmissionIMS = new ArrayList<>();
List<RMpEmissionIExcessRateM> rMpEmissionIExcessRateMS = new ArrayList<>();
Dept data = deptFeignClient.getRootDept().getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(data.getId());
List<DeptGetChildrenMoreDTO> data1 = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
//监测点id
List<String> line;
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : data1) {
line = new ArrayList<>();
Map<String, List<String>>lineBaseMap = new HashMap<>();
List<LineDevGetDTO> lineBaseList = new ArrayList<>();
if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
lineBaseList.addAll(deptGetChildrenMoreDTO.getLineBaseList());
}
if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
lineBaseList.addAll(deptGetChildrenMoreDTO.getPwMonitorIds());
}
if (CollUtil.isNotEmpty(lineBaseList)) {
line.addAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId())).map(LineDevGetDTO::getPointId).collect(Collectors.toList()));
lineBaseMap.putAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId()))
.collect(Collectors.groupingBy(LineDevGetDTO::getLineTag, Collectors.mapping(LineDevGetDTO::getPointId, Collectors.toList()))));
}
if (CollUtil.isNotEmpty(line)) {
//获取data_I数据
List<RStatDataIDPO> dataIDPOList = dataIVService.list(new LambdaQueryWrapper<RStatDataIDPO>().in(RStatDataIDPO::getLineId, line).eq(RStatDataIDPO::getPhaseType, "T").eq(RStatDataIDPO::getValueType, "CP95").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatDataIDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatDataIDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
//获取rStatLimitRate
List<RStatLimitRateDPO> rStatLimitRateMS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper<RStatLimitRateDPO>().in(RStatLimitRateDPO::getLineId, line).eq(RStatLimitRateDPO::getPhasicType, "T").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatLimitRateDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatLimitRateDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
//根据监测点进行分组
for (String key : lineBaseMap.keySet()) {
//rMpEmissionMS
rMpEmissionAdd(jobParam, rMpEmissionMS, deptGetChildrenMoreDTO, lineBaseMap, dataIDPOList, rStatLimitRateMS, key);
//rMpEmissionIMS
rMpEmissionIAdd(jobParam, rMpEmissionIMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
//rMpEmissionIExcessRateMS
rMpEmissionIExcessRateAdd(jobParam, rMpEmissionIExcessRateMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
}
}
}
if (CollUtil.isNotEmpty(rMpEmissionMS)) {
this.saveOrUpdateBatchByMultiId(rMpEmissionMS, 500);
}
if (CollUtil.isNotEmpty(rMpEmissionIMS)) {
irMpEmissionIMService.saveOrUpdateBatchByMultiId(rMpEmissionIMS, 500);
}
if (CollUtil.isNotEmpty(rMpEmissionIExcessRateMS)) {
irMpEmissionIExcessRateMService.saveOrUpdateBatchByMultiId(rMpEmissionIExcessRateMS, 500);
}
}
private void rMpEmissionIExcessRateAdd(LineParam jobParam, List<RMpEmissionIExcessRateM> rMpEmissionIExcessRateMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpEmissionIExcessRateM rMpEmissionIExcessRateM = new RMpEmissionIExcessRateM();
rMpEmissionIExcessRateM.setMonitorTag(key);
rMpEmissionIExcessRateM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpEmissionIExcessRateM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
rMpEmissionIExcessRateM.setIExcessRate2(iExcessRateI(rStatLimitRateDPOS,"iharm2Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate3(iExcessRateI(rStatLimitRateDPOS,"iharm3Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate4(iExcessRateI(rStatLimitRateDPOS,"iharm4Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate5(iExcessRateI(rStatLimitRateDPOS,"iharm5Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate6(iExcessRateI(rStatLimitRateDPOS,"iharm6Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate7(iExcessRateI(rStatLimitRateDPOS,"iharm7Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate8(iExcessRateI(rStatLimitRateDPOS,"iharm8Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate9(iExcessRateI(rStatLimitRateDPOS,"iharm9Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate10(iExcessRateI(rStatLimitRateDPOS,"iharm10Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate11(iExcessRateI(rStatLimitRateDPOS,"iharm11Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate12(iExcessRateI(rStatLimitRateDPOS,"iharm12Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate13(iExcessRateI(rStatLimitRateDPOS,"iharm13Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate14(iExcessRateI(rStatLimitRateDPOS,"iharm14Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate15(iExcessRateI(rStatLimitRateDPOS,"iharm15Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate16(iExcessRateI(rStatLimitRateDPOS,"iharm16Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate17(iExcessRateI(rStatLimitRateDPOS,"iharm17Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate18(iExcessRateI(rStatLimitRateDPOS,"iharm18Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate19(iExcessRateI(rStatLimitRateDPOS,"iharm19Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate20(iExcessRateI(rStatLimitRateDPOS,"iharm20Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate21(iExcessRateI(rStatLimitRateDPOS,"iharm21Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate22(iExcessRateI(rStatLimitRateDPOS,"iharm22Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate23(iExcessRateI(rStatLimitRateDPOS,"iharm23Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate24(iExcessRateI(rStatLimitRateDPOS,"iharm24Overtime","allTime"));
rMpEmissionIExcessRateM.setIExcessRate25(iExcessRateI(rStatLimitRateDPOS,"iharm25Overtime","allTime"));
} else {
rMpEmissionIExcessRateM.setIExcessRate2(0.0);
rMpEmissionIExcessRateM.setIExcessRate3(0.0);
rMpEmissionIExcessRateM.setIExcessRate4(0.0);
rMpEmissionIExcessRateM.setIExcessRate5(0.0);
rMpEmissionIExcessRateM.setIExcessRate6(0.0);
rMpEmissionIExcessRateM.setIExcessRate7(0.0);
rMpEmissionIExcessRateM.setIExcessRate8(0.0);
rMpEmissionIExcessRateM.setIExcessRate9(0.0);
rMpEmissionIExcessRateM.setIExcessRate10(0.0);
rMpEmissionIExcessRateM.setIExcessRate11(0.0);
rMpEmissionIExcessRateM.setIExcessRate12(0.0);
rMpEmissionIExcessRateM.setIExcessRate13(0.0);
rMpEmissionIExcessRateM.setIExcessRate14(0.0);
rMpEmissionIExcessRateM.setIExcessRate15(0.0);
rMpEmissionIExcessRateM.setIExcessRate16(0.0);
rMpEmissionIExcessRateM.setIExcessRate17(0.0);
rMpEmissionIExcessRateM.setIExcessRate18(0.0);
rMpEmissionIExcessRateM.setIExcessRate19(0.0);
rMpEmissionIExcessRateM.setIExcessRate20(0.0);
rMpEmissionIExcessRateM.setIExcessRate21(0.0);
rMpEmissionIExcessRateM.setIExcessRate22(0.0);
rMpEmissionIExcessRateM.setIExcessRate23(0.0);
rMpEmissionIExcessRateM.setIExcessRate24(0.0);
rMpEmissionIExcessRateM.setIExcessRate25(0.0);
}
rMpEmissionIExcessRateMS.add(rMpEmissionIExcessRateM);
}
private void rMpEmissionIAdd(LineParam jobParam, List<RMpEmissionIM> rMpEmissionIMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpEmissionIM rMpEmissionIM = new RMpEmissionIM();
rMpEmissionIM.setMonitorTag(key);
rMpEmissionIM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpEmissionIM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
rMpEmissionIM.setIRate2(iRateI(rStatLimitRateDPOS, "iharm2Overtime"));
rMpEmissionIM.setIRate3(iRateI(rStatLimitRateDPOS, "iharm3Overtime"));
rMpEmissionIM.setIRate4(iRateI(rStatLimitRateDPOS, "iharm4Overtime"));
rMpEmissionIM.setIRate5(iRateI(rStatLimitRateDPOS, "iharm5Overtime"));
rMpEmissionIM.setIRate6(iRateI(rStatLimitRateDPOS, "iharm6Overtime"));
rMpEmissionIM.setIRate7(iRateI(rStatLimitRateDPOS, "iharm7Overtime"));
rMpEmissionIM.setIRate8(iRateI(rStatLimitRateDPOS, "iharm8Overtime"));
rMpEmissionIM.setIRate9(iRateI(rStatLimitRateDPOS, "iharm9Overtime"));
rMpEmissionIM.setIRate10(iRateI(rStatLimitRateDPOS, "iharm10Overtime"));
rMpEmissionIM.setIRate11(iRateI(rStatLimitRateDPOS, "iharm11Overtime"));
rMpEmissionIM.setIRate12(iRateI(rStatLimitRateDPOS, "iharm12Overtime"));
rMpEmissionIM.setIRate13(iRateI(rStatLimitRateDPOS, "iharm13Overtime"));
rMpEmissionIM.setIRate14(iRateI(rStatLimitRateDPOS, "iharm14Overtime"));
rMpEmissionIM.setIRate15(iRateI(rStatLimitRateDPOS, "iharm15Overtime"));
rMpEmissionIM.setIRate16(iRateI(rStatLimitRateDPOS, "iharm16Overtime"));
rMpEmissionIM.setIRate17(iRateI(rStatLimitRateDPOS, "iharm17Overtime"));
rMpEmissionIM.setIRate18(iRateI(rStatLimitRateDPOS, "iharm18Overtime"));
rMpEmissionIM.setIRate19(iRateI(rStatLimitRateDPOS, "iharm19Overtime"));
rMpEmissionIM.setIRate20(iRateI(rStatLimitRateDPOS, "iharm20Overtime"));
rMpEmissionIM.setIRate21(iRateI(rStatLimitRateDPOS, "iharm21Overtime"));
rMpEmissionIM.setIRate22(iRateI(rStatLimitRateDPOS, "iharm22Overtime"));
rMpEmissionIM.setIRate23(iRateI(rStatLimitRateDPOS, "iharm23Overtime"));
rMpEmissionIM.setIRate24(iRateI(rStatLimitRateDPOS, "iharm24Overtime"));
rMpEmissionIM.setIRate25(iRateI(rStatLimitRateDPOS, "iharm25Overtime"));
} else {
rMpEmissionIM.setIRate2(0.0);
rMpEmissionIM.setIRate3(0.0);
rMpEmissionIM.setIRate4(0.0);
rMpEmissionIM.setIRate5(0.0);
rMpEmissionIM.setIRate6(0.0);
rMpEmissionIM.setIRate7(0.0);
rMpEmissionIM.setIRate8(0.0);
rMpEmissionIM.setIRate9(0.0);
rMpEmissionIM.setIRate10(0.0);
rMpEmissionIM.setIRate11(0.0);
rMpEmissionIM.setIRate12(0.0);
rMpEmissionIM.setIRate13(0.0);
rMpEmissionIM.setIRate14(0.0);
rMpEmissionIM.setIRate15(0.0);
rMpEmissionIM.setIRate16(0.0);
rMpEmissionIM.setIRate17(0.0);
rMpEmissionIM.setIRate18(0.0);
rMpEmissionIM.setIRate19(0.0);
rMpEmissionIM.setIRate20(0.0);
rMpEmissionIM.setIRate21(0.0);
rMpEmissionIM.setIRate22(0.0);
rMpEmissionIM.setIRate23(0.0);
rMpEmissionIM.setIRate24(0.0);
rMpEmissionIM.setIRate25(0.0);
}
rMpEmissionIMS.add(rMpEmissionIM);
}
/**
* @param jobParam 查询参数
* @param rMpEmissionMS 对象
* @param deptGetChildrenMoreDTO 部门监测点对象
* @param lineBaseMap 监测点id-监测点标签
* @param dataIDPOList
* @param rStatLimitRateMS
* @param key
* @Description: 发电特性对象赋值
* @Author: wr
* @Date: 2023/10/17 11:18
*/
private void rMpEmissionAdd(LineParam jobParam, List<RMpEmissionM> rMpEmissionMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatDataIDPO> dataIDPOList, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpEmissionM rMpEmissionM = new RMpEmissionM();
rMpEmissionM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpEmissionM.setMonitorTag(key);
rMpEmissionM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatDataIDPO> rStatDataIDPOS = dataIDPOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
//获取负序电流不平衡度
if (CollUtil.isNotEmpty(rStatDataIDPOS)) {
double asDouble = rStatDataIDPOS.stream().filter(x -> x.getINeg() != null).mapToDouble(RStatDataIDPO::getINeg).max().getAsDouble();
rMpEmissionM.setNegativeSequenceCurrentUnbalance(asDouble);
} else {
rMpEmissionM.setNegativeSequenceCurrentUnbalance(0.0);
}
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
//获取负序电流不平衡度平均超标天数、占比,各次谐波电流平均超标天数
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
long iNegOverDay = rStatLimitRateDPOS.stream().filter(x -> x.getINegOvertime() > 0).count();
rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessDayAvg(iNegOverDay != 0 ? NumberUtil.round(iNegOverDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
//获取所有超标次数
double sum = rStatLimitRateDPOS.stream().filter(x -> x.getINegOvertime() > 0).mapToDouble(RStatLimitRateDPO::getINegOvertime).sum();
double allSum = rStatLimitRateDPOS.stream().filter(x -> x.getAllTime() > 0).mapToDouble(RStatLimitRateDPO::getINegOvertime).sum();
rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessRate(sum != 0 ? NumberUtil.round(allSum / allSum * 1.0, 2).doubleValue() : 0.0);
long uHarmDay = rStatLimitRateDPOS.stream().filter(x -> filterNotQualifiedIharmData(x)).count();
rMpEmissionM.setIExcessDayAvg(uHarmDay != 0 ? NumberUtil.round(uHarmDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
} else {
rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessDayAvg(0.0);
rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessRate(0.0);
rMpEmissionM.setIExcessDayAvg(0.0);
}
rMpEmissionMS.add(rMpEmissionM);
}
private boolean filterNotQualifiedIharmData(RStatLimitRateDPO t) {
int i = t.getIharm2Overtime() + t.getIharm3Overtime() + t.getIharm4Overtime() + t.getIharm5Overtime() + t.getIharm6Overtime() + t.getIharm7Overtime() + t.getIharm8Overtime() + t.getIharm9Overtime() + t.getIharm10Overtime() + t.getIharm11Overtime() + t.getIharm12Overtime() + t.getIharm13Overtime() + t.getIharm14Overtime() + t.getIharm15Overtime() + t.getIharm16Overtime() + t.getIharm17Overtime() + t.getIharm18Overtime() + t.getIharm19Overtime() + t.getIharm20Overtime() + t.getIharm21Overtime() + t.getIharm22Overtime() + t.getIharm23Overtime() + t.getIharm24Overtime() + t.getIharm25Overtime();
if (i > 0) {
return true;
}
return false;
}
//获取平均超标天数
private Double iRateI(List<RStatLimitRateDPO> value, String attribute) {
int size = value.size();
Field field;
try {
field = RStatLimitRateDPO.class.getDeclaredField(attribute);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
field.setAccessible(true);
List<Integer> nums = value.stream().map(temp -> {
Integer o;
try {
o = (Integer) field.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.intValue();
}).collect(Collectors.toList());
long num = nums.stream().filter(x -> x > 0).count();
return num != 0 ? NumberUtil.round(num / size * 1.0, 2).doubleValue() : 0.0;
}
private Double iExcessRateI(List<RStatLimitRateDPO> value, String attribute,String allTime) {
Field excessRateField;
Field allTimeField;
try {
excessRateField = RStatLimitRateDPO.class.getDeclaredField(attribute);
allTimeField = RStatLimitRateDPO.class.getDeclaredField(allTime);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
excessRateField.setAccessible(true);
allTimeField.setAccessible(true);
List<Double> nums = value.stream().map(x->{
Double o;
try {
Integer rate = (Integer) excessRateField.get(x);
Integer num = (Integer) allTimeField.get(x);
o= rate != 0 ? NumberUtil.round(rate / num * 1.0, 2).doubleValue() : 0.0;
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.doubleValue();
}).collect(Collectors.toList());
return PubUtils.dataLimits(nums.stream().collect(Collectors.averagingDouble(Double::doubleValue))*100);
}
}

View File

@@ -0,0 +1,361 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
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.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.harmonic.pojo.po.*;
import com.njcn.harmonic.pojo.po.day.RStatDataVDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.utils.PubUtils;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceMMapper;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.mysql.day.IRStatDataVDService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 影响特性-月表 服务实现类
* </p>
*
* @author wr
* @since 2023-10-17
*/
@Service
@RequiredArgsConstructor
public class RMpInfluenceMServiceImpl extends MppServiceImpl<RMpInfluenceMMapper, RMpInfluenceM> implements IRMpInfluenceMService {
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DeptFeignClient deptFeignClient;
private final IRStatDataVDService dataVDService;
private final RStatLimitRateDMapper rStatLimitRateDMapper;
private final IRMpInfluenceVMService irMpInfluenceVMService;
private final IRMpInfluenceVExcessRateMService irMpInfluenceVExcessRateMService;
@Override
@Async("asyncExecutor")
@Transactional(rollbackFor = {Exception.class})
public void rMpInfluenceMHandler(LineParam jobParam) {
List<RMpInfluenceM> rMpInfluenceMS = new ArrayList<>();
List<RMpInfluenceVM> rMpInfluenceVMS = new ArrayList<>();
List<RMpInfluenceVExcessRateM> rMpInfluenceVExcessRateMS = new ArrayList<>();
Dept data = deptFeignClient.getRootDept().getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(data.getId());
List<DeptGetChildrenMoreDTO> data1 = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
//监测点id
List<String> line;
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : data1) {
line = new ArrayList<>();
Map<String, List<String>> lineBaseMap = new HashMap<>();
List<LineDevGetDTO> lineBaseList = new ArrayList<>();
if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
lineBaseList.addAll(deptGetChildrenMoreDTO.getLineBaseList());
}
if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
lineBaseList.addAll(deptGetChildrenMoreDTO.getPwMonitorIds());
}
if (CollUtil.isNotEmpty(lineBaseList)) {
line.addAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId())).map(LineDevGetDTO::getPointId).collect(Collectors.toList()));
lineBaseMap.putAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId()))
.collect(Collectors.groupingBy(LineDevGetDTO::getLineTag, Collectors.mapping(LineDevGetDTO::getPointId, Collectors.toList()))));
}
if (CollUtil.isNotEmpty(line)) {
//获取data_v数据
List<RStatDataVDPO> dataVDPOList = dataVDService.list(new LambdaQueryWrapper<RStatDataVDPO>()
.in(RStatDataVDPO::getLineId, line)
.eq(RStatDataVDPO::getPhasicType, "T")
.eq(RStatDataVDPO::getValueType, "CP95")
.ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatDataVDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime())))
.le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatDataVDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime())))
);
//获取rStatLimitRate
List<RStatLimitRateDPO> rStatLimitRateMS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper<RStatLimitRateDPO>().in(RStatLimitRateDPO::getLineId, line).eq(RStatLimitRateDPO::getPhasicType, "T").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatLimitRateDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatLimitRateDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
//根据监测点进行分组
for (String key : lineBaseMap.keySet()) {
//rMpEmissionMS
rMpInfluenceAdd(jobParam, rMpInfluenceMS, deptGetChildrenMoreDTO, lineBaseMap, dataVDPOList, rStatLimitRateMS, key);
//rMpEmissionIMS
rMpInfluenceVAdd(jobParam, rMpInfluenceVMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
//rMpInfluenceVExcessRateMS
rMpInfluenceRateAdd(jobParam, rMpInfluenceVExcessRateMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
}
}
}
if (CollUtil.isNotEmpty(rMpInfluenceMS)) {
this.saveOrUpdateBatchByMultiId(rMpInfluenceMS, 500);
}
if (CollUtil.isNotEmpty(rMpInfluenceVMS)) {
irMpInfluenceVMService.saveOrUpdateBatchByMultiId(rMpInfluenceVMS, 500);
}
if (CollUtil.isNotEmpty(rMpInfluenceVExcessRateMS)) {
irMpInfluenceVExcessRateMService.saveOrUpdateBatchByMultiId(rMpInfluenceVExcessRateMS, 500);
}
}
private void rMpInfluenceRateAdd(LineParam jobParam, List<RMpInfluenceVExcessRateM> rMpInfluenceVExcessRateMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpInfluenceVExcessRateM rMpInfluenceVExcessRateM = new RMpInfluenceVExcessRateM();
rMpInfluenceVExcessRateM.setMonitorTag(key);
rMpInfluenceVExcessRateM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpInfluenceVExcessRateM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
rMpInfluenceVExcessRateM.setVExcessRate2(iExcessRateI(rStatLimitRateDPOS,"uharm2Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate3(iExcessRateI(rStatLimitRateDPOS,"uharm3Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate4(iExcessRateI(rStatLimitRateDPOS,"uharm4Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate5(iExcessRateI(rStatLimitRateDPOS,"uharm5Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate6(iExcessRateI(rStatLimitRateDPOS,"uharm6Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate7(iExcessRateI(rStatLimitRateDPOS,"uharm7Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate8(iExcessRateI(rStatLimitRateDPOS,"uharm8Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate9(iExcessRateI(rStatLimitRateDPOS,"uharm9Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate10(iExcessRateI(rStatLimitRateDPOS,"uharm10Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate11(iExcessRateI(rStatLimitRateDPOS,"uharm11Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate12(iExcessRateI(rStatLimitRateDPOS,"uharm12Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate13(iExcessRateI(rStatLimitRateDPOS,"uharm13Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate14(iExcessRateI(rStatLimitRateDPOS,"uharm14Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate15(iExcessRateI(rStatLimitRateDPOS,"uharm15Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate16(iExcessRateI(rStatLimitRateDPOS,"uharm16Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate17(iExcessRateI(rStatLimitRateDPOS,"uharm17Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate18(iExcessRateI(rStatLimitRateDPOS,"uharm18Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate19(iExcessRateI(rStatLimitRateDPOS,"uharm19Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate20(iExcessRateI(rStatLimitRateDPOS,"uharm20Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate21(iExcessRateI(rStatLimitRateDPOS,"uharm21Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate22(iExcessRateI(rStatLimitRateDPOS,"uharm22Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate23(iExcessRateI(rStatLimitRateDPOS,"uharm23Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate24(iExcessRateI(rStatLimitRateDPOS,"uharm24Overtime","allTime"));
rMpInfluenceVExcessRateM.setVExcessRate25(iExcessRateI(rStatLimitRateDPOS,"uharm25Overtime","allTime"));
} else {
rMpInfluenceVExcessRateM.setVExcessRate2(0.0);
rMpInfluenceVExcessRateM.setVExcessRate3(0.0);
rMpInfluenceVExcessRateM.setVExcessRate4(0.0);
rMpInfluenceVExcessRateM.setVExcessRate5(0.0);
rMpInfluenceVExcessRateM.setVExcessRate6(0.0);
rMpInfluenceVExcessRateM.setVExcessRate7(0.0);
rMpInfluenceVExcessRateM.setVExcessRate8(0.0);
rMpInfluenceVExcessRateM.setVExcessRate9(0.0);
rMpInfluenceVExcessRateM.setVExcessRate10(0.0);
rMpInfluenceVExcessRateM.setVExcessRate11(0.0);
rMpInfluenceVExcessRateM.setVExcessRate12(0.0);
rMpInfluenceVExcessRateM.setVExcessRate13(0.0);
rMpInfluenceVExcessRateM.setVExcessRate14(0.0);
rMpInfluenceVExcessRateM.setVExcessRate15(0.0);
rMpInfluenceVExcessRateM.setVExcessRate16(0.0);
rMpInfluenceVExcessRateM.setVExcessRate17(0.0);
rMpInfluenceVExcessRateM.setVExcessRate18(0.0);
rMpInfluenceVExcessRateM.setVExcessRate19(0.0);
rMpInfluenceVExcessRateM.setVExcessRate20(0.0);
rMpInfluenceVExcessRateM.setVExcessRate21(0.0);
rMpInfluenceVExcessRateM.setVExcessRate22(0.0);
rMpInfluenceVExcessRateM.setVExcessRate23(0.0);
rMpInfluenceVExcessRateM.setVExcessRate24(0.0);
rMpInfluenceVExcessRateM.setVExcessRate25(0.0);
}
rMpInfluenceVExcessRateMS.add(rMpInfluenceVExcessRateM);
}
private void rMpInfluenceVAdd(LineParam jobParam, List<RMpInfluenceVM> rMpInfluenceVMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpInfluenceVM rMpInfluenceVM = new RMpInfluenceVM();
rMpInfluenceVM.setMonitorTag(key);
rMpInfluenceVM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpInfluenceVM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
rMpInfluenceVM.setVRate2(iRateV(rStatLimitRateDPOS, "uharm2Overtime"));
rMpInfluenceVM.setVRate3(iRateV(rStatLimitRateDPOS, "uharm3Overtime"));
rMpInfluenceVM.setVRate4(iRateV(rStatLimitRateDPOS, "uharm4Overtime"));
rMpInfluenceVM.setVRate5(iRateV(rStatLimitRateDPOS, "uharm5Overtime"));
rMpInfluenceVM.setVRate6(iRateV(rStatLimitRateDPOS, "uharm6Overtime"));
rMpInfluenceVM.setVRate7(iRateV(rStatLimitRateDPOS, "uharm7Overtime"));
rMpInfluenceVM.setVRate8(iRateV(rStatLimitRateDPOS, "uharm8Overtime"));
rMpInfluenceVM.setVRate9(iRateV(rStatLimitRateDPOS, "uharm9Overtime"));
rMpInfluenceVM.setVRate10(iRateV(rStatLimitRateDPOS, "uharm10Overtime"));
rMpInfluenceVM.setVRate11(iRateV(rStatLimitRateDPOS, "uharm11Overtime"));
rMpInfluenceVM.setVRate12(iRateV(rStatLimitRateDPOS, "uharm12Overtime"));
rMpInfluenceVM.setVRate13(iRateV(rStatLimitRateDPOS, "uharm13Overtime"));
rMpInfluenceVM.setVRate14(iRateV(rStatLimitRateDPOS, "uharm14Overtime"));
rMpInfluenceVM.setVRate15(iRateV(rStatLimitRateDPOS, "uharm15Overtime"));
rMpInfluenceVM.setVRate16(iRateV(rStatLimitRateDPOS, "uharm16Overtime"));
rMpInfluenceVM.setVRate17(iRateV(rStatLimitRateDPOS, "uharm17Overtime"));
rMpInfluenceVM.setVRate18(iRateV(rStatLimitRateDPOS, "uharm18Overtime"));
rMpInfluenceVM.setVRate19(iRateV(rStatLimitRateDPOS, "uharm19Overtime"));
rMpInfluenceVM.setVRate20(iRateV(rStatLimitRateDPOS, "uharm20Overtime"));
rMpInfluenceVM.setVRate21(iRateV(rStatLimitRateDPOS, "uharm21Overtime"));
rMpInfluenceVM.setVRate22(iRateV(rStatLimitRateDPOS, "uharm22Overtime"));
rMpInfluenceVM.setVRate23(iRateV(rStatLimitRateDPOS, "uharm23Overtime"));
rMpInfluenceVM.setVRate24(iRateV(rStatLimitRateDPOS, "uharm24Overtime"));
rMpInfluenceVM.setVRate25(iRateV(rStatLimitRateDPOS, "uharm25Overtime"));
} else {
rMpInfluenceVM.setVRate2(0.0);
rMpInfluenceVM.setVRate3(0.0);
rMpInfluenceVM.setVRate4(0.0);
rMpInfluenceVM.setVRate5(0.0);
rMpInfluenceVM.setVRate6(0.0);
rMpInfluenceVM.setVRate7(0.0);
rMpInfluenceVM.setVRate8(0.0);
rMpInfluenceVM.setVRate9(0.0);
rMpInfluenceVM.setVRate10(0.0);
rMpInfluenceVM.setVRate11(0.0);
rMpInfluenceVM.setVRate12(0.0);
rMpInfluenceVM.setVRate13(0.0);
rMpInfluenceVM.setVRate14(0.0);
rMpInfluenceVM.setVRate15(0.0);
rMpInfluenceVM.setVRate16(0.0);
rMpInfluenceVM.setVRate17(0.0);
rMpInfluenceVM.setVRate18(0.0);
rMpInfluenceVM.setVRate19(0.0);
rMpInfluenceVM.setVRate20(0.0);
rMpInfluenceVM.setVRate21(0.0);
rMpInfluenceVM.setVRate22(0.0);
rMpInfluenceVM.setVRate23(0.0);
rMpInfluenceVM.setVRate24(0.0);
rMpInfluenceVM.setVRate25(0.0);
}
rMpInfluenceVMS.add(rMpInfluenceVM);
}
/**
* @param jobParam 查询参数
* @param rMpEmissionMS 对象
* @param deptGetChildrenMoreDTO 部门监测点对象
* @param lineBaseMap 监测点id-监测点标签
* @param dataVDPOList
* @param rStatLimitRateMS
* @param key
* @Description: 发电特性对象赋值
* @Author: wr
* @Date: 2023/10/17 11:18
*/
private void rMpInfluenceAdd(LineParam jobParam, List<RMpInfluenceM> rMpEmissionMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map<String, List<String>> lineBaseMap, List<RStatDataVDPO> dataVDPOList, List<RStatLimitRateDPO> rStatLimitRateMS, String key) {
RMpInfluenceM rMpInfluenceM = new RMpInfluenceM();
rMpInfluenceM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rMpInfluenceM.setMonitorTag(key);
rMpInfluenceM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
//获取监测点
List<String> lineIds = lineBaseMap.get(key);
List<RStatDataVDPO> rStatDataVDPOS = dataVDPOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
//获取负序电流不平衡度
if (CollUtil.isNotEmpty(rStatDataVDPOS)) {
double asDouble = rStatDataVDPOS.stream().filter(x -> x.getVNeg() != null).mapToDouble(RStatDataVDPO::getVNeg).max().getAsDouble();
rMpInfluenceM.setNegativeSequenceVoltageUnbalance(asDouble);
} else {
rMpInfluenceM.setNegativeSequenceVoltageUnbalance(0.0);
}
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
//获取负序电流不平衡度平均超标天数、占比,各次谐波电流平均超标天数
if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
long iNegOverDay = rStatLimitRateDPOS.stream().filter(x -> x.getVoltageDevOvertime() > 0).count();
rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessDayAvg(iNegOverDay != 0 ? NumberUtil.round(iNegOverDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
//获取所有超标次数
double sum = rStatLimitRateDPOS.stream().filter(x -> x.getVoltageDevOvertime() > 0).mapToDouble(RStatLimitRateDPO::getVoltageDevOvertime).sum();
double allSum = rStatLimitRateDPOS.stream().filter(x -> x.getAllTime() > 0).mapToDouble(RStatLimitRateDPO::getVoltageDevOvertime).sum();
rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessRate(sum != 0 ? NumberUtil.round(allSum / allSum * 1.0, 2).doubleValue() : 0.0);
long uHarmDay = rStatLimitRateDPOS.stream().filter(x -> filterNotQualifiedUharmData(x)).count();
rMpInfluenceM.setVExcessDayAvg(uHarmDay != 0 ? NumberUtil.round(uHarmDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
} else {
rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessDayAvg(0.0);
rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessRate(0.0);
rMpInfluenceM.setVExcessDayAvg(0.0);
}
rMpEmissionMS.add(rMpInfluenceM);
}
private boolean filterNotQualifiedUharmData(RStatLimitRateDPO t) {
if (t.getUharm2Overtime() != 0 || t.getUharm3Overtime() != 0 || t.getUharm4Overtime() != 0 || t.getUharm5Overtime() != 0 || t.getUharm6Overtime() != 0 || t.getUharm7Overtime() != 0 || t.getUharm8Overtime() != 0 || t.getUharm9Overtime() != 0 || t.getUharm10Overtime() != 0 || t.getUharm11Overtime() != 0 || t.getUharm12Overtime() != 0 || t.getUharm13Overtime() != 0 || t.getUharm14Overtime() != 0 || t.getUharm15Overtime() != 0 || t.getUharm16Overtime() != 0 || t.getUharm17Overtime() != 0 || t.getUharm18Overtime() != 0 || t.getUharm19Overtime() != 0 || t.getUharm20Overtime() != 0 || t.getUharm21Overtime() != 0 || t.getUharm22Overtime() != 0 || t.getUharm23Overtime() != 0 || t.getUharm24Overtime() != 0 || t.getUharm25Overtime() != 0) {
return true;
}
return false;
}
//获取平均超标天数
private Double iRateV(List<RStatLimitRateDPO> value, String attribute) {
int size = value.size();
Field field;
try {
field = RStatLimitRateDPO.class.getDeclaredField(attribute);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
field.setAccessible(true);
List<Integer> nums = value.stream().map(temp -> {
Integer o;
try {
o = (Integer) field.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.intValue();
}).collect(Collectors.toList());
long num = nums.stream().filter(x -> x > 0).count();
return num != 0 ? NumberUtil.round(num / size * 1.0, 2).doubleValue() : 0.0;
}
private Double iExcessRateI(List<RStatLimitRateDPO> value, String attribute,String allTime) {
Field excessRateField;
Field allTimeField;
try {
excessRateField = RStatLimitRateDPO.class.getDeclaredField(attribute);
allTimeField = RStatLimitRateDPO.class.getDeclaredField(allTime);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
excessRateField.setAccessible(true);
allTimeField.setAccessible(true);
List<Double> nums = value.stream().map(x->{
Double o;
try {
Integer rate = (Integer) excessRateField.get(x);
Integer num = (Integer) allTimeField.get(x);
o= rate != 0 ? NumberUtil.round(rate / num * 1.0, 2).doubleValue() : 0.0;
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.doubleValue();
}).collect(Collectors.toList());
return PubUtils.dataLimits(nums.stream().collect(Collectors.averagingDouble(Double::doubleValue))*100);
}
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceVExcessRateMMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpInfluenceVExcessRateMService;
import org.springframework.stereotype.Service;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压超标占比 服务实现类
* </p>
*
* @author wr
* @since 2023-10-17
*/
@Service
public class RMpInfluenceVExcessRateMServiceImpl extends MppServiceImpl<RMpInfluenceVExcessRateMMapper, RMpInfluenceVExcessRateM> implements IRMpInfluenceVExcessRateMService {
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceVMMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpInfluenceVMService;
import org.springframework.stereotype.Service;
/**
* <p>
* 风电场影响特性-月表/各次谐波电压含有率 服务实现类
* </p>
*
* @author wr
* @since 2023-10-17
*/
@Service
public class RMpInfluenceVMServiceImpl extends MppServiceImpl<RMpInfluenceVMMapper, RMpInfluenceVM> implements IRMpInfluenceVMService {
}