算法提交

This commit is contained in:
huangzj
2023-11-10 08:58:27 +08:00
parent b657c31e4b
commit f9d9f45764
32 changed files with 1153 additions and 87 deletions

View File

@@ -0,0 +1,29 @@
package com.njcn.prepare.harmonic.api.specialanalysis;
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.response.HttpResult;
import com.njcn.prepare.harmonic.api.newalgorithm.fallback.RStatHarmonicFeignClientFallbackFactory;
import com.njcn.prepare.harmonic.api.specialanalysis.fallback.SpecialAnalysisFeignClientFallbackFactory;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author qijian
* @version 1.0.0
* @date 2022年10月24日 20:13
*/
@FeignClient(
value = ServerInfo.PREPARE_BOOT,//对应模块名
path = "/specialAnalysisIndexOverview",//对应controller请求类
fallbackFactory = SpecialAnalysisFeignClientFallbackFactory.class//服务降级处理类
)
public interface SpecialAnalysisFeignClient {
@PostMapping("hanlder")
HttpResult<Boolean> hanlder(@RequestBody LineParam jobParam);
}

View File

@@ -0,0 +1,44 @@
package com.njcn.prepare.harmonic.api.specialanalysis.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.prepare.harmonic.api.newalgorithm.PmsStatisticsSpecialMonitorFeignClient;
import com.njcn.prepare.harmonic.api.newalgorithm.RStatHarmonicOrgFeignClient;
import com.njcn.prepare.harmonic.api.specialanalysis.SpecialAnalysisFeignClient;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.pojo.param.OrgParam;
import com.njcn.prepare.harmonic.utils.PrepareEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* Description:
* Date: 2023/11/7 9:29【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Component
public class SpecialAnalysisFeignClientFallbackFactory implements FallbackFactory<SpecialAnalysisFeignClient> {
@Override
public SpecialAnalysisFeignClient create(Throwable throwable) {
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (throwable.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException)throwable.getCause();
exceptionEnum = PrepareEnumUtil.getExceptionEnum(businessException.getResult());
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new SpecialAnalysisFeignClient() {
@Override
public HttpResult<Boolean> hanlder(LineParam jobParam) {
log.error("{}异常,降级处理,异常为:{}", "专项分析指标总览: ", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -6,6 +6,7 @@ import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
/**
@@ -31,7 +32,7 @@ public class RMpMonitorEvaluateDPO {
private String measurementPointId;
@MppMultiId(value = "data_date")
private Date dataDate;
private LocalDate dataDate;
@TableField(value = "device_id")
private String deviceId;

View File

@@ -6,6 +6,7 @@ import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
/**
@@ -24,7 +25,7 @@ import java.util.Date;
@TableName(value = "r_operating_monitor_d")
public class ROperatingMonitorDPO {
@MppMultiId(value = "data_date")
private Date dataDate;
private LocalDate dataDate;
/**
* 监测点Id

View File

@@ -6,6 +6,7 @@ import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
/**
@@ -24,7 +25,7 @@ import java.util.Date;
@TableName(value = "r_operating_monitor_m")
public class ROperatingMonitorMPO {
@MppMultiId(value = "data_date")
private Date dataDate;
private LocalDate dataDate;
/**
* 监测点Id

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
/**
@@ -23,7 +24,7 @@ public class RStatAbnormalDPO {
* 时间
*/
@MppMultiId(value = "data_date")
private Date dataDate;
private LocalDate dataDate;
/**
* 监测点ID

View File

@@ -0,0 +1,88 @@
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 java.util.Date;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
/**
*
* Description:
* Date: 2023/11/1 15:08【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "special_analysis_index_overview_detailed")
public class SpecialAnalysisIndexOverviewDetailedPO {
/**
* 单位id
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 数据统计日期
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 监测点标签(字典,区分风电场、光伏电站等)
*/
@MppMultiId(value = "monitor_tag")
private String monitorTag;
/**
* 谐波电流超标点占比
*/
@TableField(value = "monitor_harmonic_electric_exceeds_proportion")
private Double monitorHarmonicElectricExceedsProportion;
/**
* 谐波电流平均超标天数
*/
@TableField(value = "monitor_harmonic_electric_exceeds_avg_days")
private Double monitorHarmonicElectricExceedsAvgDays;
/**
* 谐波电压含有率超标点占比
*/
@TableField(value = "monitor_harmonic_voltage_content_exceeds_proportion")
private Double monitorHarmonicVoltageContentExceedsProportion;
/**
* 谐波电压含有率平均超标天数
*/
@TableField(value = "monitor_harmonic_voltage_content_exceeds_avg_days")
private Double monitorHarmonicVoltageContentExceedsAvgDays;
/**
* 各地市电压指标超标点数占比
*/
@TableField(value = "voltage_index_exceeds_proportion")
private Double voltageIndexExceedsProportion;
/**
* 各地市电压指标平均超标天数
*/
@TableField(value = "voltage_index_exceeds_avg_days")
private Double voltageIndexExceedsAvgDays;
/**
* 各地市电流指标超标点数占比
*/
@TableField(value = "electric_index_exceeds_proportion")
private Double electricIndexExceedsProportion;
/**
* 各地市电流指标平均超标天数
*/
@TableField(value = "electric_index_exceeds_avg_days")
private Double electricIndexExceedsAvgDays;
}

View File

@@ -0,0 +1,63 @@
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 java.util.Date;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
/**
* Description:
* Date: 2023/11/1 15:07【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "special_analysis_index_overview")
public class SpecialAnalysisIndexOverviewPO {
/**
* 单位id
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 数据统计日期
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 监测点标签(字典,区分风电场、光伏电站等)
*/
@MppMultiId(value = "monitor_tag")
private String monitorTag;
/**
* 谐波电流超标监测点数
*/
@TableField(value = "monitor_harmonic_electric_exceeds_num")
private Integer monitorHarmonicElectricExceedsNum;
/**
* 谐波电压含有率超标监测点数
*/
@TableField(value = "monitor_harmonic_voltage_content_exceeds_num")
private Integer monitorHarmonicVoltageContentExceedsNum;
/**
* 各地市电压指标超标点数
*/
@TableField(value = "voltage_index_exceeds_num")
private Integer voltageIndexExceedsNum;
/**
* 各地市电流指标超标点数
*/
@TableField(value = "electric_index_exceeds_num")
private Integer electricIndexExceedsNum;
}

View File

@@ -1,9 +1,7 @@
package com.njcn.prepare.executor;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService;
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService;
import com.njcn.prepare.harmonic.service.mysql.line.RMpMonitorEvaluateDService;
import com.njcn.prepare.harmonic.service.mysql.line.*;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
import com.yomahub.liteflow.core.NodeComponent;
@@ -27,7 +25,10 @@ public class MeasurementExecutor extends BaseExecutor {
private final RMpEventDetailDService rMpEventDetailDService;
private final RStatAbnormalDService rStatAbnormalDService;
private final ROperatingMonitorService rOperatingMonitorService;
private final ROperatingMonitorMService rOperatingMonitorMService;
/**
* 算法名: 3.3.1.1-----监测点评价
*
@@ -70,5 +71,42 @@ public class MeasurementExecutor extends BaseExecutor {
}
}
/**
* 3.3.1.2. 监测点数据异常_日表
* @param bindCmp
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rStatAbnormalD", nodeType = NodeTypeEnum.COMMON)
public boolean processRStatAbnormalDAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rStatAbnormalD", nodeType = NodeTypeEnum.COMMON)
public void processRStatAbnormalDProcess(NodeComponent bindCmp) {
CalculatedParam calculatedParam = bindCmp.getRequestData();
rStatAbnormalDService.handlerMonitorAbnormal(calculatedParam);
}
/**
*3.3.1.3. 监测点指标数据质量_日表 3.3.1.4. 监测点指标数据质量_月表
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rOperatingMonitor", nodeType = NodeTypeEnum.COMMON)
public boolean processOperatingMonitorAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rOperatingMonitor", nodeType = NodeTypeEnum.COMMON)
public void processOperatingMonitorProcess(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam calculatedParam = bindCmp.getRequestData();
if (tag.equalsIgnoreCase("r_operating_monitor_d")) {
//日表
rOperatingMonitorService.handleDay(calculatedParam);
} else if (tag.equalsIgnoreCase("r_operating_monitor_m")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//月表
rOperatingMonitorMService.handleMonth(calculatedParam);
}
}
}
}

View File

@@ -46,6 +46,7 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("primaryGridData")
@RequiredArgsConstructor
@Deprecated
public class PrimaryGridDataController extends BaseController {
private @Autowired

View File

@@ -0,0 +1,54 @@
package com.njcn.prepare.harmonic.controller.specialloadanalysis;
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.SpecialAnalysisIndexOverviewService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionMService;
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.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;
/**
* <p>
* 风电场发射特性-月表 前端控制器
* </p>
*
* @author wr
* @since 2023-10-16
*/
@Slf4j
@Api(tags = "专项分析指标总览(按月来算)")
@RestController
@RequestMapping("/specialAnalysisIndexOverview")
@RequiredArgsConstructor
public class SpecialAnalysisIndexOverviewController extends BaseController {
private final SpecialAnalysisIndexOverviewService specialAnalysisIndexOverviewService;
@ApiOperation("指标总览")
@ApiImplicitParam(value = "jobParam", name = "jobParam", required = true)
@PostMapping("hanlder")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> hanlder(@RequestBody LineParam jobParam) {
log.info(LocalDateTime.now() + "专项分析-指标总览开始执行");
String methodDescribe = getMethodDescribe("hanlder");
specialAnalysisIndexOverviewService.hanlder(jobParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
}
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.area;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
/**
*
* Description:
* Date: 2023/11/1 15:08【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SpecialAnalysisIndexOverviewDetailedPOMapper extends MppBaseMapper<SpecialAnalysisIndexOverviewDetailedPO> {
}

View File

@@ -0,0 +1,19 @@
package com.njcn.prepare.harmonic.mapper.mysql.area;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewPO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
* Description:
* Date: 2023/11/1 15:07【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SpecialAnalysisIndexOverviewPOMapper extends MppBaseMapper<SpecialAnalysisIndexOverviewPO> {
}

View File

@@ -0,0 +1,26 @@
<?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.area.SpecialAnalysisIndexOverviewDetailedPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO">
<!--@mbg.generated-->
<!--@Table special_analysis_index_overview_detailed-->
<id column="org_no" jdbcType="VARCHAR" property="orgNo" />
<id column="data_date" jdbcType="DATE" property="dataDate" />
<id column="monitor_tag" jdbcType="VARCHAR" property="monitorTag" />
<result column="monitor_harmonic_electric_exceeds_proportion" jdbcType="REAL" property="monitorHarmonicElectricExceedsProportion" />
<result column="monitor_harmonic_electric_exceeds_avg_days" jdbcType="INTEGER" property="monitorHarmonicElectricExceedsAvgDays" />
<result column="monitor_harmonic_voltage_content_exceeds_proportion" jdbcType="REAL" property="monitorHarmonicVoltageContentExceedsProportion" />
<result column="monitor_harmonic_voltage_content_exceeds_avg_days" jdbcType="INTEGER" property="monitorHarmonicVoltageContentExceedsAvgDays" />
<result column="voltage_index_exceeds_proportion" jdbcType="REAL" property="voltageIndexExceedsProportion" />
<result column="voltage_index_exceeds_avg_days" jdbcType="INTEGER" property="voltageIndexExceedsAvgDays" />
<result column="electric_index_exceeds_proportion" jdbcType="REAL" property="electricIndexExceedsProportion" />
<result column="electric_index_exceeds_avg_days" jdbcType="INTEGER" property="electricIndexExceedsAvgDays" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
org_no, data_date, monitor_tag, monitor_harmonic_electric_exceeds_proportion, monitor_harmonic_electric_exceeds_avg_days,
monitor_harmonic_voltage_content_exceeds_proportion, monitor_harmonic_voltage_content_exceeds_avg_days,
voltage_index_exceeds_proportion, voltage_index_exceeds_avg_days, electric_index_exceeds_proportion,
electric_index_exceeds_avg_days
</sql>
</mapper>

View File

@@ -0,0 +1,20 @@
<?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.area.SpecialAnalysisIndexOverviewPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewPO">
<!--@mbg.generated-->
<!--@Table special_analysis_index_overview-->
<id column="org_no" jdbcType="VARCHAR" property="orgNo" />
<id column="data_date" jdbcType="DATE" property="dataDate" />
<id column="monitor_tag" jdbcType="VARCHAR" property="monitorTag" />
<result column="monitor_harmonic_electric_exceeds_num" jdbcType="INTEGER" property="monitorHarmonicElectricExceedsNum" />
<result column="monitor_harmonic_voltage_content_exceeds_num" jdbcType="INTEGER" property="monitorHarmonicVoltageContentExceedsNum" />
<result column="voltage_index_exceeds_num" jdbcType="INTEGER" property="voltageIndexExceedsNum" />
<result column="electric_index_exceeds_num" jdbcType="INTEGER" property="electricIndexExceedsNum" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
org_no, data_date, monitor_tag, monitor_harmonic_electric_exceeds_num, monitor_harmonic_voltage_content_exceeds_num,
voltage_index_exceeds_num, electric_index_exceeds_num
</sql>
</mapper>

View File

@@ -2,6 +2,9 @@ package com.njcn.prepare.harmonic.mapper.mysql.line;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Description:
@@ -12,4 +15,5 @@ import com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO;
* @version V1.0.0
*/
public interface RStatAbnormalDMapper extends MppBaseMapper<RStatAbnormalDPO> {
List<RStatAbnormalDPO> handlerMonitorAbnormal(@Param("pendingId") List<String> pendingId, @Param("format") String format, @Param("beginDay") String beginDay, @Param("endDay") String endDay);
}

View File

@@ -12,4 +12,25 @@
<!--@mbg.generated-->
data_date, measurement_point_id, value_alarm
</sql>
<select id="handlerMonitorAbnormal" resultType="com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO">
SELECT
#{format} dataDate,
measurement_point_id,
CASE
WHEN a.effective_minute_count&lt;a.all_minute_count then
0
ELSE
1
END value_alarm
FROM
r_mp_monitor_evaluate_d a where
a.data_date between #{beginDay} and #{endDay}
AND a.measurement_point_id
IN
<foreach collection="pendingId" item="lineId" separator="," open="(" close=")">
#{lineId}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,21 @@
package com.njcn.prepare.harmonic.service.mysql.Impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.mapper.mysql.area.SpecialAnalysisIndexOverviewDetailedPOMapper;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
import com.njcn.prepare.harmonic.service.mysql.SpecialAnalysisIndexOverviewDetailedPOService;
/**
*
* Description:
* Date: 2023/11/1 15:08【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class SpecialAnalysisIndexOverviewDetailedPOServiceImpl extends MppServiceImpl<SpecialAnalysisIndexOverviewDetailedPOMapper, SpecialAnalysisIndexOverviewDetailedPO> implements SpecialAnalysisIndexOverviewDetailedPOService{
}

View File

@@ -0,0 +1,25 @@
package com.njcn.prepare.harmonic.service.mysql.Impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.prepare.harmonic.mapper.mysql.area.SpecialAnalysisIndexOverviewDetailedPOMapper;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
import org.springframework.stereotype.Service;
import com.njcn.prepare.harmonic.mapper.mysql.area.SpecialAnalysisIndexOverviewPOMapper;
import java.util.Date;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewPO;
import com.njcn.prepare.harmonic.service.mysql.SpecialAnalysisIndexOverviewPOService;
/**
*
* Description:
* Date: 2023/11/1 15:06【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class SpecialAnalysisIndexOverviewPOServiceImpl extends MppServiceImpl<SpecialAnalysisIndexOverviewPOMapper, SpecialAnalysisIndexOverviewPO> implements SpecialAnalysisIndexOverviewPOService{
}

View File

@@ -0,0 +1,392 @@
package com.njcn.prepare.harmonic.service.mysql.Impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.day.RStatLimitRateDPO;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewPO;
import com.njcn.prepare.harmonic.service.mysql.SpecialAnalysisIndexOverviewDetailedPOService;
import com.njcn.prepare.harmonic.service.mysql.SpecialAnalysisIndexOverviewPOService;
import com.njcn.prepare.harmonic.service.mysql.SpecialAnalysisIndexOverviewService;
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 org.springframework.util.CollectionUtils;
import java.text.DecimalFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* Description:
* Date: 2023/11/1 15:14【需求编号】
*
* @author clam
* @version V1.0.0
*/
@RequiredArgsConstructor
@Service
public class SpecialAnalysisIndexOverviewServiceImpl implements SpecialAnalysisIndexOverviewService {
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DeptFeignClient deptFeignClient;
private final RStatLimitRateDMapper rStatLimitRateDMapper;
private final SpecialAnalysisIndexOverviewPOService specialAnalysisIndexOverviewPOService;
private final SpecialAnalysisIndexOverviewDetailedPOService specialAnalysisIndexOverviewDetailedPOService;
@Override
@Async("asyncExecutor")
@Transactional(rollbackFor = {Exception.class})
public void hanlder(LineParam jobParam) {
List<SpecialAnalysisIndexOverviewPO> specialAnalysisIndexOverviewPOList = new ArrayList<>();
List<SpecialAnalysisIndexOverviewDetailedPO> specialAnalysisIndexOverviewDetailedPOList = new ArrayList<>();
Dept data = deptFeignClient.getRootDept().getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(data.getId());
List<DeptGetChildrenMoreDTO> data1 = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
Date date = DateUtil.parse(jobParam.getDataDate());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : data1) {
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)) {
Map<String, List<LineDevGetDTO>> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineTag));
collect.forEach((k, v) -> {
SpecialAnalysisIndexOverviewPO specialAnalysisIndexOverviewPO = new SpecialAnalysisIndexOverviewPO();
SpecialAnalysisIndexOverviewDetailedPO specialAnalysisIndexOverviewDetailedPO = new SpecialAnalysisIndexOverviewDetailedPO();
specialAnalysisIndexOverviewPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
specialAnalysisIndexOverviewPO.setDataDate(date);
specialAnalysisIndexOverviewPO.setMonitorTag(k);
specialAnalysisIndexOverviewDetailedPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
specialAnalysisIndexOverviewDetailedPO.setDataDate(date);
specialAnalysisIndexOverviewDetailedPO.setMonitorTag(k);
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateMS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper<RStatLimitRateDPO>().
in(RStatLimitRateDPO::getLineId, collect1).
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()))));
if (CollectionUtils.isEmpty(rStatLimitRateMS)){
//单位下没数据不补0,0,0的数据
return;
}
Map<String, List<RStatLimitRateDPO>> collect2 = rStatLimitRateMS.stream().collect(Collectors.groupingBy(RStatLimitRateDPO::getLineId));
//谐波电流超标监测点数
AtomicInteger iCount = new AtomicInteger();
//谐波电压含有率超标监测点数
AtomicInteger vCount = new AtomicInteger();
//电流指标超标点数
AtomicInteger iIndexCount = new AtomicInteger();
//电压指标超标点数
AtomicInteger vIndexCount = new AtomicInteger();
//谐波电流超标监测点天数
AtomicInteger iDayCount = new AtomicInteger();
//谐波电压含有率超标监测点天数
AtomicInteger vDayCount = new AtomicInteger();
//电流指标超标点天数
AtomicInteger iDayIndexCount = new AtomicInteger();
//电压指标超标点天数
AtomicInteger vDayIndexCount = new AtomicInteger();
collect2.forEach((lineId,rStatLimitRateDPOList)->{
Map<Date, List<RStatLimitRateDPO>> collect3 = rStatLimitRateDPOList.stream().collect(Collectors.groupingBy(RStatLimitRateDPO::getTime));
if(isOverLimit(rStatLimitRateDPOList,1)){
iCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,2)){
vCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,3)){
iIndexCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,4)){
vIndexCount.getAndIncrement();
}
collect3.forEach((day, temp) -> {
if(isOverLimit(rStatLimitRateDPOList,1)){
iDayCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,2)){
iDayCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,3)){
iDayCount.getAndIncrement();
}
if(isOverLimit(rStatLimitRateDPOList,4)){
iDayCount.getAndIncrement();
}
});
});
specialAnalysisIndexOverviewPO.setMonitorHarmonicElectricExceedsNum(iCount.get());
specialAnalysisIndexOverviewPO.setMonitorHarmonicVoltageContentExceedsNum(vCount.get());
specialAnalysisIndexOverviewPO.setElectricIndexExceedsNum(iIndexCount.get());
specialAnalysisIndexOverviewPO.setVoltageIndexExceedsNum(vIndexCount.get());
specialAnalysisIndexOverviewDetailedPO.setMonitorHarmonicElectricExceedsProportion(
this.divideAndKeepTwoDecimalPlaces(iCount.get(),collect2.size())
);
specialAnalysisIndexOverviewDetailedPO.setMonitorHarmonicElectricExceedsAvgDays(
this.divideAndKeepTwoDecimalPlaces(iDayCount.get(),iCount.get())
);
specialAnalysisIndexOverviewDetailedPO.setMonitorHarmonicVoltageContentExceedsProportion(
this.divideAndKeepTwoDecimalPlaces(vCount.get(),collect2.size())
);
specialAnalysisIndexOverviewDetailedPO.setMonitorHarmonicVoltageContentExceedsAvgDays(
this.divideAndKeepTwoDecimalPlaces(vDayCount.get(),vCount.get())
);
specialAnalysisIndexOverviewDetailedPO.setElectricIndexExceedsProportion(
this.divideAndKeepTwoDecimalPlaces(iIndexCount.get(),collect2.size())
);
specialAnalysisIndexOverviewDetailedPO.setElectricIndexExceedsAvgDays(
this.divideAndKeepTwoDecimalPlaces(iCount.get(),iIndexCount.get())
);
specialAnalysisIndexOverviewDetailedPO.setVoltageIndexExceedsProportion(
this.divideAndKeepTwoDecimalPlaces(iDayIndexCount.get(),collect2.size())
);
specialAnalysisIndexOverviewDetailedPO.setVoltageIndexExceedsAvgDays(
this.divideAndKeepTwoDecimalPlaces(vDayIndexCount.get(),vIndexCount.get())
);
specialAnalysisIndexOverviewPOList.add(specialAnalysisIndexOverviewPO);
specialAnalysisIndexOverviewDetailedPOList.add(specialAnalysisIndexOverviewDetailedPO);
});
}
}
if (CollUtil.isNotEmpty(specialAnalysisIndexOverviewPOList)) {
specialAnalysisIndexOverviewPOService.saveOrUpdateBatchByMultiId(specialAnalysisIndexOverviewPOList, 500);
}
if (CollUtil.isNotEmpty(specialAnalysisIndexOverviewDetailedPOList)) {
specialAnalysisIndexOverviewDetailedPOService.saveOrUpdateBatchByMultiId(specialAnalysisIndexOverviewDetailedPOList, 500);
}
}
/**
* @Description: isOverLimit
* @Param: i代表指标1,:谐波电流超标 2,:谐波电压含有率超标 3,电流指标4,:电压指标
* @return: void
* @Author: clam
* @Date: 2023/11/2
*/
private boolean isOverLimit(List<RStatLimitRateDPO> temp, int i) {
boolean flag = false;
switch (i) {
case 1:
int sum = temp.stream().mapToInt(rStatLimitRateDPO -> {
return rStatLimitRateDPO.getIharm2Overtime() +
rStatLimitRateDPO.getIharm3Overtime() +
rStatLimitRateDPO.getIharm4Overtime() +
rStatLimitRateDPO.getIharm5Overtime() +
rStatLimitRateDPO.getIharm6Overtime() +
rStatLimitRateDPO.getIharm7Overtime() +
rStatLimitRateDPO.getIharm8Overtime() +
rStatLimitRateDPO.getIharm9Overtime() +
rStatLimitRateDPO.getIharm10Overtime() +
rStatLimitRateDPO.getIharm11Overtime() +
rStatLimitRateDPO.getIharm12Overtime() +
rStatLimitRateDPO.getIharm13Overtime() +
rStatLimitRateDPO.getIharm14Overtime() +
rStatLimitRateDPO.getIharm15Overtime() +
rStatLimitRateDPO.getIharm16Overtime() +
rStatLimitRateDPO.getIharm17Overtime() +
rStatLimitRateDPO.getIharm18Overtime() +
rStatLimitRateDPO.getIharm19Overtime() +
rStatLimitRateDPO.getIharm20Overtime() +
rStatLimitRateDPO.getIharm21Overtime() +
rStatLimitRateDPO.getIharm22Overtime() +
rStatLimitRateDPO.getIharm23Overtime() +
rStatLimitRateDPO.getIharm24Overtime() +
rStatLimitRateDPO.getIharm25Overtime()
;
}).sum();
if (sum>0){
flag =true;
}
break;
case 2:
int sum2 = temp.stream().mapToInt(rStatLimitRateDPO -> {
return rStatLimitRateDPO.getUharm2Overtime()+
rStatLimitRateDPO.getUharm3Overtime()+
rStatLimitRateDPO.getUharm4Overtime()+
rStatLimitRateDPO.getUharm5Overtime()+
rStatLimitRateDPO.getUharm6Overtime()+
rStatLimitRateDPO.getUharm7Overtime()+
rStatLimitRateDPO.getUharm8Overtime()+
rStatLimitRateDPO.getUharm9Overtime()+
rStatLimitRateDPO.getUharm10Overtime() +
rStatLimitRateDPO.getUharm11Overtime() +
rStatLimitRateDPO.getUharm12Overtime() +
rStatLimitRateDPO.getUharm13Overtime() +
rStatLimitRateDPO.getUharm14Overtime() +
rStatLimitRateDPO.getUharm15Overtime() +
rStatLimitRateDPO.getUharm16Overtime() +
rStatLimitRateDPO.getUharm17Overtime() +
rStatLimitRateDPO.getUharm18Overtime() +
rStatLimitRateDPO.getUharm19Overtime() +
rStatLimitRateDPO.getUharm20Overtime() +
rStatLimitRateDPO.getUharm21Overtime() +
rStatLimitRateDPO.getUharm22Overtime() +
rStatLimitRateDPO.getUharm23Overtime() +
rStatLimitRateDPO.getUharm24Overtime() +
rStatLimitRateDPO.getUharm25Overtime()
;
}).sum();
if (sum2>0){
flag =true;
}
break;
case 3:
int sum3 = temp.stream().mapToInt(rStatLimitRateDPO -> {
return rStatLimitRateDPO.getIharm2Overtime() +
rStatLimitRateDPO.getIharm3Overtime() +
rStatLimitRateDPO.getIharm4Overtime() +
rStatLimitRateDPO.getIharm5Overtime() +
rStatLimitRateDPO.getIharm6Overtime() +
rStatLimitRateDPO.getIharm7Overtime() +
rStatLimitRateDPO.getIharm8Overtime() +
rStatLimitRateDPO.getIharm9Overtime() +
rStatLimitRateDPO.getIharm10Overtime() +
rStatLimitRateDPO.getIharm11Overtime() +
rStatLimitRateDPO.getIharm12Overtime() +
rStatLimitRateDPO.getIharm13Overtime() +
rStatLimitRateDPO.getIharm14Overtime() +
rStatLimitRateDPO.getIharm15Overtime() +
rStatLimitRateDPO.getIharm16Overtime() +
rStatLimitRateDPO.getIharm17Overtime() +
rStatLimitRateDPO.getIharm18Overtime() +
rStatLimitRateDPO.getIharm19Overtime() +
rStatLimitRateDPO.getIharm20Overtime() +
rStatLimitRateDPO.getIharm21Overtime() +
rStatLimitRateDPO.getIharm22Overtime() +
rStatLimitRateDPO.getIharm23Overtime() +
rStatLimitRateDPO.getIharm24Overtime() +
rStatLimitRateDPO.getIharm25Overtime() +
rStatLimitRateDPO.getINegOvertime()
;
}).sum();
if (sum3>0){
flag =true;
}
break;
case 4:
int sum4 = temp.stream().mapToInt(rStatLimitRateDPO -> {
return rStatLimitRateDPO.getUharm2Overtime()+
rStatLimitRateDPO.getUharm3Overtime()+
rStatLimitRateDPO.getUharm4Overtime()+
rStatLimitRateDPO.getUharm5Overtime()+
rStatLimitRateDPO.getUharm6Overtime()+
rStatLimitRateDPO.getUharm7Overtime()+
rStatLimitRateDPO.getUharm8Overtime()+
rStatLimitRateDPO.getUharm9Overtime()+
rStatLimitRateDPO.getUharm10Overtime() +
rStatLimitRateDPO.getUharm11Overtime() +
rStatLimitRateDPO.getUharm12Overtime() +
rStatLimitRateDPO.getUharm13Overtime() +
rStatLimitRateDPO.getUharm14Overtime() +
rStatLimitRateDPO.getUharm15Overtime() +
rStatLimitRateDPO.getUharm16Overtime() +
rStatLimitRateDPO.getUharm17Overtime() +
rStatLimitRateDPO.getUharm18Overtime() +
rStatLimitRateDPO.getUharm19Overtime() +
rStatLimitRateDPO.getUharm20Overtime() +
rStatLimitRateDPO.getUharm21Overtime() +
rStatLimitRateDPO.getUharm22Overtime() +
rStatLimitRateDPO.getUharm23Overtime() +
rStatLimitRateDPO.getUharm24Overtime() +
rStatLimitRateDPO.getUharm2Overtime()+
rStatLimitRateDPO.getInuharm1Overtime()+
rStatLimitRateDPO.getInuharm2Overtime()+
rStatLimitRateDPO.getInuharm3Overtime()+
rStatLimitRateDPO.getInuharm4Overtime()+
rStatLimitRateDPO.getInuharm5Overtime()+
rStatLimitRateDPO.getInuharm6Overtime()+
rStatLimitRateDPO.getInuharm7Overtime()+
rStatLimitRateDPO.getInuharm8Overtime() +
rStatLimitRateDPO.getInuharm9Overtime() +
rStatLimitRateDPO.getInuharm10Overtime() +
rStatLimitRateDPO.getInuharm11Overtime() +
rStatLimitRateDPO.getInuharm12Overtime() +
rStatLimitRateDPO.getInuharm13Overtime() +
rStatLimitRateDPO.getInuharm14Overtime() +
rStatLimitRateDPO.getInuharm15Overtime() +
rStatLimitRateDPO.getInuharm16Overtime() +
rStatLimitRateDPO.getUbalanceOvertime() +
rStatLimitRateDPO.getUaberranceOvertime()+
rStatLimitRateDPO.getVoltageDevOvertime();
}).sum();
if (sum4>0){
flag =true;
}
break;
default:
break;
}
return flag;
}
/**
* @Description: divideAndKeepTwoDecimalPlaces
* @Param:
* @return: double
* @Author: clam
* @Date: 2023/11/2
*/
public double divideAndKeepTwoDecimalPlaces(int a, int b) {
if (b == 0) {
return 0.00;
}
double result = (double) a / b;
DecimalFormat df = new DecimalFormat("#.00");
return Double.parseDouble(df.format(result));
}
}

View File

@@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -372,7 +373,7 @@ public class DataExceptionServiceImpl implements DataExceptionService {
RStatAbnormalDPO rStatAbnormalDOne = rStatAbnormalDMapper.selectOne(lambdaQueryWrapper);
if (Objects.isNull(rStatAbnormalDOne)){
RStatAbnormalDPO rStatAbnormalD = new RStatAbnormalDPO();
rStatAbnormalD.setDataDate(date);
rStatAbnormalD.setDataDate( date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
rStatAbnormalD.setMeasurementPointId(lineId);
rStatAbnormalD.setValueAlarm(0);
rStatAbnormalDMapper.insert(rStatAbnormalD);

View File

@@ -28,6 +28,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
@@ -75,6 +76,8 @@ public class RMpMonitorEvaluateDServiceImpl extends MppServiceImpl<RMpMonitorEva
rMpMonitorEvaluateDPO = calculateRMpMonitorEvaluateDPO(rMpMonitorEvaluateDPO, fiveItems, pmsAbnormalRules, voltage, data);
Date date = DateUtil.parse(beginTime);
LocalDate localDate = LocalDateTimeUtil.parseDate(beginTime, DatePattern.NORM_DATE_PATTERN);
DataFlicker twoFlickerData = dataIntegrityRateInfluxService.getTwoFlickerData(temp, date, 5);
@@ -87,7 +90,7 @@ public class RMpMonitorEvaluateDServiceImpl extends MppServiceImpl<RMpMonitorEva
}
rMpMonitorEvaluateDPO.setAllMinuteCount(fiveItems.size());
rMpMonitorEvaluateDPO.setDeviceId(data.getDevId());
rMpMonitorEvaluateDPO.setDataDate(date);
rMpMonitorEvaluateDPO.setDataDate(localDate);
rMpMonitorEvaluateDPO.setMeasurementPointId(temp);
rMpMonitorEvaluateDPOS.add(rMpMonitorEvaluateDPO);
@@ -127,6 +130,7 @@ public class RMpMonitorEvaluateDServiceImpl extends MppServiceImpl<RMpMonitorEva
rMpMonitorEvaluateDPO = calculateRMpMonitorEvaluateDPO(rMpMonitorEvaluateDPO, fiveItems, pmsAbnormalRules, voltage, lineDTO);
Date date = DateUtil.parse(beginDay);
DataFlicker twoFlickerData = dataIntegrityRateInfluxService.getTwoFlickerData(lineDTO.getLineId(), date, 5);
LocalDate localDate = LocalDateTimeUtil.parseDate(beginDay, DatePattern.NORM_DATE_PATTERN);
if (Objects.isNull(twoFlickerData)) {
rMpMonitorEvaluateDPO.setPltCount(0);
@@ -137,7 +141,7 @@ public class RMpMonitorEvaluateDServiceImpl extends MppServiceImpl<RMpMonitorEva
}
rMpMonitorEvaluateDPO.setAllMinuteCount(fiveItems.size());
rMpMonitorEvaluateDPO.setDeviceId(lineDTO.getDevId());
rMpMonitorEvaluateDPO.setDataDate(date);
rMpMonitorEvaluateDPO.setDataDate(localDate);
rMpMonitorEvaluateDPO.setMeasurementPointId(lineDTO.getLineId());
rMpMonitorEvaluateDPOS.add(rMpMonitorEvaluateDPO);
}

View File

@@ -1,10 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.line;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.commApi.CommLineClient;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.pq.pojo.po.RStatAbnormalD;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RStatAbnormalDMapper;
import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO;
@@ -12,11 +18,13 @@ import com.njcn.prepare.harmonic.service.mysql.line.RMpMonitorEvaluateDService;
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
import com.njcn.prepare.harmonic.service.mysql.line.RStatAbnormalDService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -35,8 +43,8 @@ import java.util.Objects;
@RequiredArgsConstructor
public class ROperatingMonitorDServiceImpl extends MppServiceImpl<ROperatingMonitorDMapper, ROperatingMonitorDPO> implements ROperatingMonitorService {
private final RMpMonitorEvaluateDService rMpMonitorEvaluateDService;
private final RStatAbnormalDService rStatAbnormalDService;
private final RMpMonitorEvaluateDMapper rMpMonitorEvaluateDMapper;
private final RStatAbnormalDMapper rStatAbnormalDMapper;
private final CommLineClient commLineClient;
/**
@@ -60,33 +68,89 @@ public class ROperatingMonitorDServiceImpl extends MppServiceImpl<ROperatingMoni
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
public void handlerMonitorOperatingD(List<String> indexLists, String dataDate) {
Date date = DateUtil.parse(dataDate);
// Date date = DateUtil.parse(dataDate);
// List<ROperatingMonitorDPO> rOperatingMonitorDPOList = new ArrayList<> ();
// indexLists.forEach (temp -> {
// ROperatingMonitorDPO rOperatingMonitorDPO = new ROperatingMonitorDPO();
//
// LineDTO data = commLineClient.getLineDetail(temp).getData();
//
// /*todo 统计间隔,电压等级取值方式,devid后期提供融合版本接口获取不然pmspqs系统取值方式不一样*/
// /*统计间隔*/
// Integer statisticalInterval = data.getTimeInterval ();
//
// RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = new RMpMonitorEvaluateDPO();
// rMpMonitorEvaluateDPO.setMeasurementPointId (temp);
// rMpMonitorEvaluateDPO.setDataDate (date);
// rMpMonitorEvaluateDPO = rMpMonitorEvaluateDMapper.selectByMultiId (rMpMonitorEvaluateDPO);
// if (Objects.isNull(rMpMonitorEvaluateDPO)) {
// return;
// }
// RStatAbnormalDPO rStatAbnormalDPO = new RStatAbnormalDPO();
// rStatAbnormalDPO.setDataDate (date);
// rStatAbnormalDPO.setMeasurementPointId (temp);
// rStatAbnormalDPO = rStatAbnormalDMapper.selectByMultiId (rStatAbnormalDPO);
// if (Objects.isNull(rStatAbnormalDPO)) {
// return;
// }
// rOperatingMonitorDPO.setMeasurementPointId (temp);
// rOperatingMonitorDPO.setDataDate (date);
// rOperatingMonitorDPO.setIsUnusual (rStatAbnormalDPO.getValueAlarm ());
// rOperatingMonitorDPO.setEffectiveMinuteCount (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ());
// rOperatingMonitorDPO.setDataIntegrityRate (BigDecimal.valueOf (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ()*statisticalInterval/1440));
// if(rMpMonitorEvaluateDPO.getEffectiveMinuteCount ()==0){
// rOperatingMonitorDPO.setDataRightRate(BigDecimal.valueOf(0.00));
// }else{
// rOperatingMonitorDPO.setDataRightRate (BigDecimal.valueOf(
// (rMpMonitorEvaluateDPO.getFreqCount ()+ rMpMonitorEvaluateDPO.getLineVoltageCount ()+
// rMpMonitorEvaluateDPO.getPhaseVoltageCount ()+rMpMonitorEvaluateDPO.getUnbalanceCount ()+
// rMpMonitorEvaluateDPO.getVThdCount ())/(5*rMpMonitorEvaluateDPO.getEffectiveMinuteCount ())
// ));
// }
//
// rOperatingMonitorDPO.setIndexIntegrityRate (
// BigDecimal.valueOf(
// (rMpMonitorEvaluateDPO.getFreqCount ()+ rMpMonitorEvaluateDPO.getLineVoltageCount ()+
// rMpMonitorEvaluateDPO.getPhaseVoltageCount ()+rMpMonitorEvaluateDPO.getUnbalanceCount ()+
// rMpMonitorEvaluateDPO.getVThdCount ())*statisticalInterval/(5*1440)
// )
// );
// rOperatingMonitorDPO.setDevId (data.getDevId());
// rOperatingMonitorDPO.setMonitorState("0");
// rOperatingMonitorDPOList.add (rOperatingMonitorDPO);
// });
// this.saveOrUpdateBatchByMultiId (rOperatingMonitorDPOList,500);
}
@Override
public void handleDay(CalculatedParam calculatedParam) {
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
List<ROperatingMonitorDPO> rOperatingMonitorDPOList = new ArrayList<> ();
indexLists.forEach (temp -> {
List<List<String>> pendingIds = ListUtils.partition(calculatedParam.getIdList(), 1000);
for (List<String> pendingId : pendingIds) {
List<LineDTO> lineDTOList = commLineClient.getLineDetailBatch(pendingId).getData();
List<RMpMonitorEvaluateDPO> rMpMonitorEvaluateDPOS = new ArrayList<>();
for (LineDTO lineDTO : lineDTOList) {
ROperatingMonitorDPO rOperatingMonitorDPO = new ROperatingMonitorDPO();
LineDTO data = commLineClient.getLineDetail(temp).getData();
/*todo 统计间隔,电压等级取值方式,devid后期提供融合版本接口获取不然pmspqs系统取值方式不一样*/
/*统计间隔*/
Integer statisticalInterval = data.getTimeInterval ();
Integer statisticalInterval = lineDTO.getTimeInterval ();
RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = new RMpMonitorEvaluateDPO();
rMpMonitorEvaluateDPO.setMeasurementPointId (temp);
rMpMonitorEvaluateDPO.setDataDate (date);
rMpMonitorEvaluateDPO = rMpMonitorEvaluateDService.selectByMultiId (rMpMonitorEvaluateDPO);
rMpMonitorEvaluateDPO.setMeasurementPointId (lineDTO.getLineId());
rMpMonitorEvaluateDPO.setDataDate (localDate);
rMpMonitorEvaluateDPO = rMpMonitorEvaluateDMapper.selectByMultiId (rMpMonitorEvaluateDPO);
if (Objects.isNull(rMpMonitorEvaluateDPO)) {
return;
}
RStatAbnormalDPO rStatAbnormalDPO = new RStatAbnormalDPO();
rStatAbnormalDPO.setDataDate (date);
rStatAbnormalDPO.setMeasurementPointId (temp);
rStatAbnormalDPO = rStatAbnormalDService.selectByMultiId (rStatAbnormalDPO);
rStatAbnormalDPO.setDataDate (localDate);
rStatAbnormalDPO.setMeasurementPointId (lineDTO.getLineId());
rStatAbnormalDPO = rStatAbnormalDMapper.selectByMultiId (rStatAbnormalDPO);
if (Objects.isNull(rStatAbnormalDPO)) {
return;
}
rOperatingMonitorDPO.setMeasurementPointId (temp);
rOperatingMonitorDPO.setDataDate (date);
rOperatingMonitorDPO.setMeasurementPointId (lineDTO.getLineId());
rOperatingMonitorDPO.setDataDate (localDate);
rOperatingMonitorDPO.setIsUnusual (rStatAbnormalDPO.getValueAlarm ());
rOperatingMonitorDPO.setEffectiveMinuteCount (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ());
rOperatingMonitorDPO.setDataIntegrityRate (BigDecimal.valueOf (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ()*statisticalInterval/1440));
@@ -107,10 +171,13 @@ public class ROperatingMonitorDServiceImpl extends MppServiceImpl<ROperatingMoni
rMpMonitorEvaluateDPO.getVThdCount ())*statisticalInterval/(5*1440)
)
);
rOperatingMonitorDPO.setDevId (data.getDevId());
rOperatingMonitorDPO.setDevId (lineDTO.getDevId());
rOperatingMonitorDPO.setMonitorState("0");
rOperatingMonitorDPOList.add (rOperatingMonitorDPO);
});
}
}
this.saveOrUpdateBatchByMultiId (rOperatingMonitorDPOList,500);
}
}

View File

@@ -1,9 +1,14 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.line;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorMMapper;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorMPO;
@@ -16,6 +21,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -32,21 +39,56 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class ROperatingMonitorMServiceImpl extends MppServiceImpl<ROperatingMonitorMMapper, ROperatingMonitorMPO> implements ROperatingMonitorMService {
private final ROperatingMonitorService rOperatingMonitorService;
private final ROperatingMonitorDMapper rOperatingMonitorDMapper;
@Override
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
public void handlerMonitorOperatingM(List<String> indexLists,LineParam jobParam) {
// List<ROperatingMonitorMPO> rOperatingMonitorMPOList = new ArrayList<>();
// QueryWrapper<ROperatingMonitorDPO> queryWrapper = new QueryWrapper<>();
// indexLists.forEach(temp -> {
// queryWrapper.clear();
// queryWrapper.eq("measurement_point_id", temp)
// .ge("data_date", jobParam.getBeginTime())
// .le("data_date", jobParam.getEndTime());
// List<ROperatingMonitorDPO> list = rOperatingMonitorService.list(queryWrapper);
//
// if (CollectionUtils.isEmpty(list)) {
// return;
// }
// ROperatingMonitorMPO rOperatingMonitorMPO = new ROperatingMonitorMPO();
// BigDecimal dataIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble());
// BigDecimal dataRightRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble());
// BigDecimal indexIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble());
// rOperatingMonitorMPO.setMeasurementPointId(temp);
// rOperatingMonitorMPO.setDataDate(DateUtil.parse(jobParam.getDataDate()));
// rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate);
// rOperatingMonitorMPO.setDataRightRate(dataRightRate);
// rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate);
// rOperatingMonitorMPO.setDevId(list.get(0).getDevId());
// List<Integer> collect = list.stream().map(ROperatingMonitorDPO::getIsUnusual).collect(Collectors.toList());
// rOperatingMonitorMPO.setIsUnusual(collect.contains(Integer.valueOf(0)) ? 0 : 1);
// rOperatingMonitorMPOList.add(rOperatingMonitorMPO);
// });
// this.saveOrUpdateBatchByMultiId(rOperatingMonitorMPOList, 500);
}
@Override
public void handleMonth(CalculatedParam calculatedParam) {
DateTime beginMonth = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
DateTime endMonth = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
LocalDate localDate = LocalDateTimeUtil.parseDate( DateUtil.format(beginMonth, DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATE_PATTERN);
List<ROperatingMonitorMPO> rOperatingMonitorMPOList = new ArrayList<>();
QueryWrapper<ROperatingMonitorDPO> queryWrapper = new QueryWrapper<>();
indexLists.forEach(temp -> {
calculatedParam.getIdList().forEach(temp -> {
queryWrapper.clear();
queryWrapper.eq("measurement_point_id", temp)
.ge("data_date", jobParam.getBeginTime())
.le("data_date", jobParam.getEndTime());
List<ROperatingMonitorDPO> list = rOperatingMonitorService.list(queryWrapper);
.between("data_date",beginMonth,endMonth);
List<ROperatingMonitorDPO> list = rOperatingMonitorDMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(list)) {
return;
@@ -56,7 +98,7 @@ public class ROperatingMonitorMServiceImpl extends MppServiceImpl<ROperatingMoni
BigDecimal dataRightRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble());
BigDecimal indexIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble());
rOperatingMonitorMPO.setMeasurementPointId(temp);
rOperatingMonitorMPO.setDataDate(DateUtil.parse(jobParam.getDataDate()));
rOperatingMonitorMPO.setDataDate(localDate);
rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate);
rOperatingMonitorMPO.setDataRightRate(dataRightRate);
rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate);

View File

@@ -1,17 +1,24 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.line;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.mapper.mysql.line.RStatAbnormalDMapper;
import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO;
import com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO;
import com.njcn.prepare.harmonic.service.mysql.line.RMpMonitorEvaluateDService;
import com.njcn.prepare.harmonic.service.mysql.line.RStatAbnormalDService;
import com.njcn.system.enums.DicDataEnum;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -31,31 +38,49 @@ import java.util.Objects;
public class RStatAbnormalDServiceImpl extends MppServiceImpl<RStatAbnormalDMapper, RStatAbnormalDPO> implements RStatAbnormalDService{
private final RMpMonitorEvaluateDService rMpMonitorEvaluateDService;
// private final RMpMonitorEvaluateDService rMpMonitorEvaluateDService;
@Override
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
public void handlerMonitorAbnormal(List<String> indexLists, String dataDate) {
Date date = DateUtil.parse(dataDate);
List<RStatAbnormalDPO> rStatAbnormalDPOS = new ArrayList<> ();
indexLists.forEach (temp -> {
RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = new RMpMonitorEvaluateDPO();
rMpMonitorEvaluateDPO.setMeasurementPointId (temp);
rMpMonitorEvaluateDPO.setDataDate (date);
rMpMonitorEvaluateDPO = rMpMonitorEvaluateDService.selectByMultiId (rMpMonitorEvaluateDPO);
RStatAbnormalDPO rStatAbnormalDPO = new RStatAbnormalDPO();
if(Objects.isNull (rMpMonitorEvaluateDPO)){
rStatAbnormalDPO.setValueAlarm(0);
}else {
rStatAbnormalDPO.setValueAlarm (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ()
<rMpMonitorEvaluateDPO.getAllMinuteCount ()?0:1);
// Date date = DateUtil.parse(dataDate);
// List<RStatAbnormalDPO> rStatAbnormalDPOS = new ArrayList<> ();
// indexLists.forEach (temp -> {
// RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = new RMpMonitorEvaluateDPO();
// rMpMonitorEvaluateDPO.setMeasurementPointId (temp);
// rMpMonitorEvaluateDPO.setDataDate (date);
// rMpMonitorEvaluateDPO = rMpMonitorEvaluateDService.selectByMultiId (rMpMonitorEvaluateDPO);
// RStatAbnormalDPO rStatAbnormalDPO = new RStatAbnormalDPO();
//
// if(Objects.isNull (rMpMonitorEvaluateDPO)){
// rStatAbnormalDPO.setValueAlarm(0);
// }else {
// rStatAbnormalDPO.setValueAlarm (rMpMonitorEvaluateDPO.getEffectiveMinuteCount ()
// <rMpMonitorEvaluateDPO.getAllMinuteCount ()?0:1);
// }
// rStatAbnormalDPO.setDataDate (date);
// rStatAbnormalDPO.setMeasurementPointId (temp);
//
// rStatAbnormalDPOS.add (rStatAbnormalDPO);
// });
// this.saveOrUpdateBatchByMultiId (rStatAbnormalDPOS,500);
}
rStatAbnormalDPO.setDataDate (date);
rStatAbnormalDPO.setMeasurementPointId (temp);
rStatAbnormalDPOS.add (rStatAbnormalDPO);
});
this.saveOrUpdateBatchByMultiId (rStatAbnormalDPOS,500);
@Override
public void handlerMonitorAbnormal(CalculatedParam calculatedParam) {
String beginDay = LocalDateTimeUtil.format(LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
String endDay = LocalDateTimeUtil.format(LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
//以尺寸1000分片
List<List<String>> pendingIds = ListUtils.partition(calculatedParam.getIdList(), 1000);
for (List<String> pendingId : pendingIds) {
//查询
List<RStatAbnormalDPO> rMpEventDetailDPOList = this.baseMapper.handlerMonitorAbnormal(
pendingId
,calculatedParam.getDataDate()
,beginDay
,endDay);
//入库
this.saveOrUpdateBatchByMultiId(rMpEventDetailDPOList);
}
}
}

View File

@@ -0,0 +1,17 @@
package com.njcn.prepare.harmonic.service.mysql;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
*
* Description:
* Date: 2023/11/1 15:08【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SpecialAnalysisIndexOverviewDetailedPOService extends IMppService<SpecialAnalysisIndexOverviewDetailedPO> {
}

View File

@@ -0,0 +1,22 @@
package com.njcn.prepare.harmonic.service.mysql;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewDetailedPO;
import com.njcn.prepare.harmonic.pojo.po.SpecialAnalysisIndexOverviewPO;
/**
*
* Description:
* Date: 2023/11/1 15:06【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SpecialAnalysisIndexOverviewPOService extends IMppService<SpecialAnalysisIndexOverviewPO> {
}

View File

@@ -0,0 +1,14 @@
package com.njcn.prepare.harmonic.service.mysql;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/**
* Description:
* Date: 2023/11/1 15:14【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SpecialAnalysisIndexOverviewService {
void hanlder(LineParam jobParam);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.mysql.line;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorMPO;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
@@ -24,4 +25,6 @@ public interface ROperatingMonitorMService extends IMppService<ROperatingMonitor
* @Date: 2023/4/21
*/
void handlerMonitorOperatingM(List<String> indexLists, LineParam jobParam);
void handleMonth(CalculatedParam calculatedParam);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.mysql.line;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import java.util.List;
@@ -23,4 +24,6 @@ public interface ROperatingMonitorService extends IMppService<ROperatingMonitorD
* @Date: 2023/4/21
*/
void handlerMonitorOperatingD(List<String> indexLists, String dataDate);
void handleDay(CalculatedParam calculatedParam);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.mysql.line;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.RStatAbnormalDPO;
import java.util.List;
@@ -17,4 +18,6 @@ public interface RStatAbnormalDService extends IMppService<RStatAbnormalDPO> {
void handlerMonitorAbnormal(List<String> indexLists, String dataDate);
void handlerMonitorAbnormal(CalculatedParam calculatedParam);
}