3.3.8. 单位稳态指标数据统计(xy)

This commit is contained in:
huangzj
2023-07-24 15:18:48 +08:00
parent 32aae811e8
commit f7161f297b
26 changed files with 1691 additions and 17 deletions

View File

@@ -54,7 +54,7 @@ public class RStatHarmonicQPO {
* 日均超标监测点数(根据 日表的超标监测点数 取平均值)
*/
@TableField(value = "over_limit_measurement_average")
private Integer overLimitMeasurementAverage;
private Double overLimitMeasurementAverage;
/**
* 累计超标监测点数(监测点指标统计明细日表 统计)

View File

@@ -54,7 +54,7 @@ public class RStatHarmonicYPO {
* 日均超标监测点数(根据 日表的超标监测点数 取平均值)
*/
@TableField(value = "over_limit_measurement_average")
private Integer overLimitMeasurementAverage;
private Double overLimitMeasurementAverage;
/**
* 累计超标监测点数(监测点指标统计明细日表 统计)

View File

@@ -0,0 +1,58 @@
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/7/21 10:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_stat_harmonic_org_d")
public class RStatHarmonicOrgDPO {
/**
* 单位ID
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 生成数据的时间,每日统计一次
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 稳态指标类型Id字典表ID
*/
@MppMultiId(value = "harmonic_type")
private String harmonicType;
/**
* 数据类型,字典表01主网测点 02配网测点
*/
@MppMultiId(value = "data_type")
private String dataType;
/**
* 超标监测点数(监测点指标统计明细日表 统计)
*/
@TableField(value = "over_limit_measurement_average")
private Integer overLimitMeasurementAverage;
/**
* 超标监测点数(监测点指标统计明细日表 统计)
*/
@TableField(value = "over_limit_measurement_ratio_average")
private Double overLimitMeasurementRatioAverage;
}

View File

@@ -0,0 +1,76 @@
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/7/21 10:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_stat_harmonic_org_m")
public class RStatHarmonicOrgMPO {
/**
* 单位ID
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 生成数据的时间,每月统计一次
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 稳态指标类型Id字典表ID
*/
@MppMultiId(value = "harmonic_type")
private String harmonicType;
/**
* 数据类型,字典表01主网测点 02配网测点
*/
@MppMultiId(value = "data_type")
private String dataType;
/**
* 日均超标监测点数(根据 日表的超标监测点数 取平均值)
*/
@TableField(value = "over_limit_measurement_average")
private Double overLimitMeasurementAverage;
/**
* 累计超标监测点数(监测点指标统计明细日表 统计)
*/
@TableField(value = "over_limit_measurement_accrued")
private Integer overLimitMeasurementAccrued;
/**
* 累计超标天数(根据 日表的超标监测点数 求和)
*/
@TableField(value = "over_day")
private Integer overDay;
/**
* 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
*/
@TableField(value = "over_limit_measurement_ratio_average")
private Double overLimitMeasurementRatioAverage;
/**
* 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计月表中的累计有效接入监测点数)
*/
@TableField(value = "over_limit_measurement_ratio_accrued")
private Double overLimitMeasurementRatioAccrued;
}

View File

@@ -0,0 +1,76 @@
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/7/21 10:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_stat_harmonic_org_q")
public class RStatHarmonicOrgQPO {
/**
* 单位ID
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 生成数据的时间,每季度统计一次
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 稳态指标类型Id字典表ID
*/
@MppMultiId(value = "harmonic_type")
private String harmonicType;
/**
* 数据类型,字典表01主网测点 02配网测点
*/
@MppMultiId(value = "data_type")
private String dataType;
/**
* 日均超标监测点数(根据 日表的超标监测点数 取平均值)
*/
@TableField(value = "over_limit_measurement_average")
private Double overLimitMeasurementAverage;
/**
* 累计超标监测点数(监测点指标统计明细日表 统计)
*/
@TableField(value = "over_limit_measurement_accrued")
private Integer overLimitMeasurementAccrued;
/**
* 平均超标天数(月表的累计超标天数之和/月表的累计超标监测点数之和)
*/
@TableField(value = "average_over_day")
private Double averageOverDay;
/**
* 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
*/
@TableField(value = "over_limit_measurement_ratio_average")
private Double overLimitMeasurementRatioAverage;
/**
* 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计季表中的累计有效接入监测点数)
*/
@TableField(value = "over_limit_measurement_ratio_accrued")
private Double overLimitMeasurementRatioAccrued;
}

View File

@@ -0,0 +1,76 @@
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/7/21 10:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_stat_harmonic_org_y")
public class RStatHarmonicOrgYPO {
/**
* 单位ID
*/
@MppMultiId(value = "org_no")
private String orgNo;
/**
* 生成数据的时间,每年统计一次
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 稳态指标类型Id字典表ID
*/
@MppMultiId(value = "harmonic_type")
private String harmonicType;
/**
* 数据类型,字典表01主网测点 02配网测点
*/
@MppMultiId(value = "data_type")
private String dataType;
/**
* 日均超标监测点数(根据 日表的超标监测点数 取平均值)
*/
@TableField(value = "over_limit_measurement_average")
private Double overLimitMeasurementAverage;
/**
* 累计超标监测点数(监测点指标统计明细日表 统计)
*/
@TableField(value = "over_limit_measurement_accrued")
private Integer overLimitMeasurementAccrued;
/**
* 平均超标天数(月表的累计超标天数之和/月表的累计超标监测点数之和)
*/
@TableField(value = "average_over_day")
private Double averageOverDay;
/**
* 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
*/
@TableField(value = "over_limit_measurement_ratio_average")
private Double overLimitMeasurementRatioAverage;
/**
* 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计季表中的累计有效接入监测点数)
*/
@TableField(value = "over_limit_measurement_ratio_accrued")
private Double overLimitMeasurementRatioAccrued;
}

View File

@@ -0,0 +1,72 @@
package com.njcn.prepare.harmonic.controller.newalgorithm;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.prepare.harmonic.pojo.param.OrgParam;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicOrgService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.user.pojo.vo.PvTerminalTreeVO;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2022/12/28 13:47【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "单位稳态指标数据统计(xy)")
@RestController
@RequestMapping("/rstatharmonicorg")
@RequiredArgsConstructor
public class RStatHarmonicOrgController extends BaseController {
private final RStatHarmonicOrgService service;
private final DeptFeignClient deptFeignClient;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/Handler")
@ApiOperation("单位监测点稳态指标统计")
@ApiImplicitParam(name = "orgParam", value = "参数", required = true)
public HttpResult<String> handler(@RequestBody @Validated OrgParam orgParam ){
log.info(LocalDateTime.now()+"dayHandler始执行");
String methodDescribe = getMethodDescribe("dayHandler");
/**
* 支持补录
*/
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
if(StringUtils.isEmpty(orgParam.getOrgId())){
Dept data = deptFeignClient.getRootDept().getData();
orgParam.setOrgId(data.getId());
}
service.handler(orgParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

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

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgMPO;
/**
*
* Description:
* Date: 2023/7/21 10:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatHarmonicOrgMPOMapper extends MppBaseMapper<RStatHarmonicOrgMPO> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgQPO;
/**
*
* Description:
* Date: 2023/7/21 10:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatHarmonicOrgQPOMapper extends MppBaseMapper<RStatHarmonicOrgQPO> {
}

View File

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

View File

@@ -0,0 +1,22 @@
<?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.RStatHarmonicOrgMPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgMPO">
<!--@mbg.generated-->
<!--@Table r_stat_harmonic_org_m-->
<id column="org_no" jdbcType="VARCHAR" property="orgNo" />
<id column="data_date" jdbcType="DATE" property="dataDate" />
<id column="harmonic_type" jdbcType="VARCHAR" property="harmonicType" />
<id column="data_type" jdbcType="VARCHAR" property="dataType" />
<result column="over_limit_measurement_average" jdbcType="INTEGER" property="overLimitMeasurementAverage" />
<result column="over_limit_measurement_accrued" jdbcType="INTEGER" property="overLimitMeasurementAccrued" />
<result column="over_day" jdbcType="INTEGER" property="overDay" />
<result column="over_limit_measurement_ratio_average" jdbcType="REAL" property="overLimitMeasurementRatioAverage" />
<result column="over_limit_measurement_ratio_accrued" jdbcType="REAL" property="overLimitMeasurementRatioAccrued" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
org_no, data_date, harmonic_type, data_type, over_limit_measurement_average, over_limit_measurement_accrued,
over_day, over_limit_measurement_ratio_average, over_limit_measurement_ratio_accrued
</sql>
</mapper>

View File

@@ -0,0 +1,22 @@
<?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.RStatHarmonicOrgQPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgQPO">
<!--@mbg.generated-->
<!--@Table r_stat_harmonic_org_q-->
<id column="org_no" jdbcType="VARCHAR" property="orgNo" />
<id column="data_date" jdbcType="DATE" property="dataDate" />
<id column="harmonic_type" jdbcType="VARCHAR" property="harmonicType" />
<id column="data_type" jdbcType="VARCHAR" property="dataType" />
<result column="over_limit_measurement_average" jdbcType="INTEGER" property="overLimitMeasurementAverage" />
<result column="over_limit_measurement_accrued" jdbcType="INTEGER" property="overLimitMeasurementAccrued" />
<result column="average_over_day" jdbcType="REAL" property="averageOverDay" />
<result column="over_limit_measurement_ratio_average" jdbcType="REAL" property="overLimitMeasurementRatioAverage" />
<result column="over_limit_measurement_ratio_accrued" jdbcType="REAL" property="overLimitMeasurementRatioAccrued" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
org_no, data_date, harmonic_type, data_type, over_limit_measurement_average, over_limit_measurement_accrued,
average_over_day, over_limit_measurement_ratio_average, over_limit_measurement_ratio_accrued
</sql>
</mapper>

View File

@@ -0,0 +1,22 @@
<?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.RStatHarmonicOrgYPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgYPO">
<!--@mbg.generated-->
<!--@Table r_stat_harmonic_org_y-->
<id column="org_no" jdbcType="VARCHAR" property="orgNo" />
<id column="data_date" jdbcType="DATE" property="dataDate" />
<id column="harmonic_type" jdbcType="VARCHAR" property="harmonicType" />
<id column="data_type" jdbcType="VARCHAR" property="dataType" />
<result column="over_limit_measurement_average" jdbcType="INTEGER" property="overLimitMeasurementAverage" />
<result column="over_limit_measurement_accrued" jdbcType="INTEGER" property="overLimitMeasurementAccrued" />
<result column="average_over_day" jdbcType="REAL" property="averageOverDay" />
<result column="over_limit_measurement_ratio_average" jdbcType="REAL" property="overLimitMeasurementRatioAverage" />
<result column="over_limit_measurement_ratio_accrued" jdbcType="REAL" property="overLimitMeasurementRatioAccrued" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
org_no, data_date, harmonic_type, data_type, over_limit_measurement_average, over_limit_measurement_accrued,
average_over_day, over_limit_measurement_ratio_average, over_limit_measurement_ratio_accrued
</sql>
</mapper>

View File

@@ -0,0 +1,447 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.pms.pojo.po.RStatOrgPO;
import com.njcn.harmonic.pojo.po.RStatOrgDPO;
import com.njcn.harmonic.pojo.po.RStatOrgMPO;
import com.njcn.prepare.harmonic.mapper.mysql.area.*;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicQPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
import com.njcn.prepare.harmonic.pojo.param.OrgParam;
import com.njcn.prepare.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicOrgService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgDPOService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgMPOService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgQPOService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgYPOService;
import com.njcn.prepare.harmonic.utils.PublicUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* Description:
* Date: 2023/7/19 9:07【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RStatHarmonicOrgServiceImpl implements RStatHarmonicOrgService {
private final
DicDataFeignClient dicDataFeignClient;
private final DeptFeignClient deptFeignClient;
private final RStatOrgDMapper rStatOrgDMapper;
private final RStatHarmonicDPOMapper rStatHarmonicDPOMapper;
private final RStatHarmonicOrgDPOService rStatHarmonicDPOService;
private final RStatOrgMMapper rStatOrgMMapper;
private final RStatHarmonicMPOMapper rStatHarmonicMPOMapper;
private final RStatHarmonicOrgMPOService rStatHarmonicMPOService;
private final RStatHarmonicOrgQPOService rStatHarmonicQPOService;
private final RStatHarmonicOrgYPOService rStatHarmonicYPOService;
DecimalFormat df = new DecimalFormat("0.00");
@Override
public void handler(OrgParam orgParam) {
switch (orgParam.getType()) {
case 1:
this.hanlderYear (orgParam);
break;
case 2:
this.hanlderQtr (orgParam);
break;
case 3:
this.hanlderM (orgParam);
break;
case 5:
this.hanlderDay ( orgParam);
break;
default:
break;
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderYear(OrgParam orgParam) {
List<RStatHarmonicOrgYPO> rStatHarmonicOrgYPOList = new ArrayList<>();
List<String> data = deptFeignClient.getDepSonIdtByDeptId(orgParam.getOrgId()).getData();
Date date = DateUtil.parse(orgParam.getDataDate());
QueryWrapper<RStatHarmonicMPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgMPO> rStatOrgMPOQueryWrapper = new QueryWrapper<>();
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.stream().forEach(temp->{
int sumEffectiveMeasurement =0;
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no",temp).
eq("YEAR( data_date)", orgParam.getDataDate().substring(0,4));
List<RStatOrgMPO> rStatOrgMPOS = rStatOrgMMapper.selectList(rStatOrgMPOQueryWrapper);
if(CollectionUtils.isEmpty(rStatOrgMPOS)){
sumEffectiveMeasurement=0;
}else {
sumEffectiveMeasurement = rStatOrgMPOS.stream().mapToInt(RStatOrgMPO::getEffectiveMeasurementAccrued).sum();
}
int finalSumEffectiveMeasurement = sumEffectiveMeasurement;
dataTypeMap.forEach((k, v)->{
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
queryWrapper.clear();
queryWrapper.eq("org_no",temp).
eq("harmonic_type",dictData.getCode()).
eq("data_type",v.getId()).
eq("YEAR( data_date)", orgParam.getDataDate().substring(0,4));
List<RStatHarmonicMPO> rStatHarmonicMPOS = rStatHarmonicMPOMapper.selectList(queryWrapper);
Double overLimitMeasurementAverage =0.00;
int overDay =0;
int overLimitMeasurementAccrued=0;
Double averageOverDay =0.00;
Double overLimitMeasurementRatioAverage=0.00;
Double overLimitMeasurementRatioAccrued=0.00;
if(!CollectionUtils.isEmpty(rStatHarmonicMPOS)){
overDay = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
overLimitMeasurementAccrued = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverLimitMeasurementAccrued).sum();
double asDouble = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
overLimitMeasurementAverage = Double.parseDouble(df.format(asDouble));
double asDouble1 = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
overLimitMeasurementRatioAverage = Double.parseDouble(df.format(asDouble1));
if(finalSumEffectiveMeasurement ==0){
overLimitMeasurementRatioAccrued=0.00;
}else {
overLimitMeasurementRatioAccrued=Double.parseDouble(df.format((float)overLimitMeasurementAccrued / finalSumEffectiveMeasurement));
}
if(!(overLimitMeasurementAccrued==0)){
averageOverDay = Double.parseDouble(df.format((float)overDay / overLimitMeasurementAccrued));
}
}
RStatHarmonicOrgYPO rStatHarmonicOrgYPO = new RStatHarmonicOrgYPO();
rStatHarmonicOrgYPO.setOrgNo(temp);
rStatHarmonicOrgYPO.setDataDate(date);
rStatHarmonicOrgYPO.setHarmonicType(dictData.getId());
rStatHarmonicOrgYPO.setDataType(v.getId());
rStatHarmonicOrgYPO.setAverageOverDay(averageOverDay);
rStatHarmonicOrgYPO.setOverLimitMeasurementAccrued(overLimitMeasurementAccrued);
rStatHarmonicOrgYPO.setOverLimitMeasurementAverage(overLimitMeasurementAverage);
rStatHarmonicOrgYPO.setOverLimitMeasurementRatioAccrued(overLimitMeasurementRatioAccrued);
rStatHarmonicOrgYPO.setOverLimitMeasurementRatioAverage(overLimitMeasurementRatioAverage);
rStatHarmonicOrgYPOList.add(rStatHarmonicOrgYPO);
});
});
});
if(!CollectionUtils.isEmpty(rStatHarmonicOrgYPOList)){
rStatHarmonicYPOService.saveOrUpdateBatchByMultiId(rStatHarmonicOrgYPOList,500);
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderQtr(OrgParam orgParam) {
List<RStatHarmonicOrgQPO> rStatHarmonicOrgQPOList = new ArrayList<>();
List<String> data = deptFeignClient.getDepSonIdtByDeptId(orgParam.getOrgId()).getData();
Date date = DateUtil.parse(orgParam.getDataDate());
QueryWrapper<RStatHarmonicMPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgMPO> rStatOrgMPOQueryWrapper = new QueryWrapper<>();
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.stream().forEach(temp->{
int sumEffectiveMeasurement =0;
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no",temp).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (orgParam.getDataDate()));
List<RStatOrgMPO> rStatOrgMPOS = rStatOrgMMapper.selectList(rStatOrgMPOQueryWrapper);
if(CollectionUtils.isEmpty(rStatOrgMPOS)){
sumEffectiveMeasurement=0;
}else {
sumEffectiveMeasurement = rStatOrgMPOS.stream().mapToInt(RStatOrgMPO::getEffectiveMeasurementAccrued).sum();
}
int finalSumEffectiveMeasurement = sumEffectiveMeasurement;
dataTypeMap.forEach((k, v)->{
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
queryWrapper.clear();
queryWrapper.eq("org_no",temp).
eq("harmonic_type",dictData.getCode()).
eq("data_type",v.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (orgParam.getDataDate()));
List<RStatHarmonicMPO> rStatHarmonicMPOS = rStatHarmonicMPOMapper.selectList(queryWrapper);
Double overLimitMeasurementAverage =0.00;
int overDay =0;
int overLimitMeasurementAccrued=0;
Double averageOverDay =0.00;
Double overLimitMeasurementRatioAverage=0.00;
Double overLimitMeasurementRatioAccrued=0.00;
if(!CollectionUtils.isEmpty(rStatHarmonicMPOS)){
overDay = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
overLimitMeasurementAccrued = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverLimitMeasurementAccrued).sum();
double asDouble = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
overLimitMeasurementAverage = Double.parseDouble(df.format(asDouble));
double asDouble1 = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
overLimitMeasurementRatioAverage = Double.parseDouble(df.format(asDouble1));
if(finalSumEffectiveMeasurement ==0){
overLimitMeasurementRatioAccrued=0.00;
}else {
overLimitMeasurementRatioAccrued=Double.parseDouble(df.format((float)overLimitMeasurementAccrued / finalSumEffectiveMeasurement));
}
if(!(overLimitMeasurementAccrued==0)){
averageOverDay = Double.parseDouble(df.format((float)overDay / overLimitMeasurementAccrued));
}
}
RStatHarmonicOrgQPO rStatHarmonicOrgQPO = new RStatHarmonicOrgQPO();
rStatHarmonicOrgQPO.setOrgNo(temp);
rStatHarmonicOrgQPO.setDataDate(date);
rStatHarmonicOrgQPO.setHarmonicType(dictData.getId());
rStatHarmonicOrgQPO.setDataType(v.getId());
rStatHarmonicOrgQPO.setAverageOverDay(averageOverDay);
rStatHarmonicOrgQPO.setOverLimitMeasurementAccrued(overLimitMeasurementAccrued);
rStatHarmonicOrgQPO.setOverLimitMeasurementAverage(overLimitMeasurementAverage);
rStatHarmonicOrgQPO.setOverLimitMeasurementRatioAccrued(overLimitMeasurementRatioAccrued);
rStatHarmonicOrgQPO.setOverLimitMeasurementRatioAverage(overLimitMeasurementRatioAverage);
rStatHarmonicOrgQPOList.add(rStatHarmonicOrgQPO);
});
});
});
if(!CollectionUtils.isEmpty(rStatHarmonicOrgQPOList)){
rStatHarmonicQPOService.saveOrUpdateBatchByMultiId(rStatHarmonicOrgQPOList,500);
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderM(OrgParam orgParam) {
List<RStatHarmonicOrgMPO> rStatHarmonicOrgMPOList = new ArrayList<>();
List<String> data = deptFeignClient.getDepSonIdtByDeptId(orgParam.getOrgId()).getData();
Date date = DateUtil.parse(orgParam.getDataDate());
QueryWrapper<RStatHarmonicMPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgMPO> rStatOrgMPOQueryWrapper = new QueryWrapper<>();
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.stream().forEach(temp->{
int sumEffectiveMeasurement =0;
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no",temp).
eq("DATE_FORMAT( data_date ,'%Y-%m')",orgParam.getDataDate().substring(0, 7));
List<RStatOrgMPO> rStatOrgMPOS = rStatOrgMMapper.selectList(rStatOrgMPOQueryWrapper);
if(CollectionUtils.isEmpty(rStatOrgMPOS)){
sumEffectiveMeasurement=0;
}else {
sumEffectiveMeasurement = rStatOrgMPOS.stream().mapToInt(RStatOrgMPO::getEffectiveMeasurementAccrued).sum();
}
int finalSumEffectiveMeasurement = sumEffectiveMeasurement;
dataTypeMap.forEach((k, v)->{
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
queryWrapper.clear();
queryWrapper.eq("org_no",temp).
eq("harmonic_type",dictData.getCode()).
eq("data_type",v.getId()).
eq("DATE_FORMAT( data_date ,'%Y-%m')",orgParam.getDataDate().substring(0, 7));
List<RStatHarmonicMPO> rStatHarmonicMPOS = rStatHarmonicMPOMapper.selectList(queryWrapper);
Double overLimitMeasurementAverage =0.00;
int overDay =0;
int overLimitMeasurementAccrued=0;
Double overLimitMeasurementRatioAverage=0.00;
Double overLimitMeasurementRatioAccrued=0.00;
if(!CollectionUtils.isEmpty(rStatHarmonicMPOS)){
overDay = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
overLimitMeasurementAccrued = rStatHarmonicMPOS.stream().mapToInt(RStatHarmonicMPO::getOverLimitMeasurementAccrued).sum();
double asDouble = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
overLimitMeasurementAverage = Double.parseDouble(df.format(asDouble));
double asDouble1 = rStatHarmonicMPOS.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
overLimitMeasurementRatioAverage = Double.parseDouble(df.format(asDouble1));
if(finalSumEffectiveMeasurement ==0){
overLimitMeasurementRatioAccrued=0.00;
}else {
overLimitMeasurementRatioAccrued=Double.parseDouble(df.format((float)overLimitMeasurementAccrued / finalSumEffectiveMeasurement));
}
}
RStatHarmonicOrgMPO rStatHarmonicOrgMPO = new RStatHarmonicOrgMPO();
rStatHarmonicOrgMPO.setOrgNo(temp);
rStatHarmonicOrgMPO.setDataDate(date);
rStatHarmonicOrgMPO.setHarmonicType(dictData.getId());
rStatHarmonicOrgMPO.setDataType(v.getId());
rStatHarmonicOrgMPO.setOverDay(overDay);
rStatHarmonicOrgMPO.setOverLimitMeasurementAccrued(overLimitMeasurementAccrued);
rStatHarmonicOrgMPO.setOverLimitMeasurementAverage(overLimitMeasurementAverage);
rStatHarmonicOrgMPO.setOverLimitMeasurementRatioAccrued(overLimitMeasurementRatioAccrued);
rStatHarmonicOrgMPO.setOverLimitMeasurementRatioAverage(overLimitMeasurementRatioAverage);
rStatHarmonicOrgMPOList.add(rStatHarmonicOrgMPO);
});
});
});
if(!CollectionUtils.isEmpty(rStatHarmonicOrgMPOList)){
rStatHarmonicMPOService.saveOrUpdateBatchByMultiId(rStatHarmonicOrgMPOList,500);
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderDay(OrgParam orgParam) {
List<RStatHarmonicOrgDPO> rStatHarmonicOrgDPOList = new ArrayList<>();
List<String> data = deptFeignClient.getDepSonIdtByDeptId(orgParam.getOrgId()).getData();
Date date = DateUtil.parse(orgParam.getDataDate());
QueryWrapper<RStatHarmonicDPO> queryWrapper = new QueryWrapper<>();
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.stream().forEach(temp->{
int sumEffectiveMeasurement =0;
List<RStatOrgDVO> rStatOrgDVOS = rStatOrgDMapper.listAll(orgParam.getDataDate(), temp);
if(CollectionUtils.isEmpty(rStatOrgDVOS)){
sumEffectiveMeasurement=0;
}else {
sumEffectiveMeasurement = rStatOrgDVOS.stream().mapToInt(RStatOrgDVO::getEffectiveMeasurement).sum();
}
int finalSumEffectiveMeasurement = sumEffectiveMeasurement;
dataTypeMap.forEach((k, v)->{
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
queryWrapper.clear();
queryWrapper.select("over_limit_measurement").
eq("org_no",temp).
eq("data_type",v.getId()).
eq("harmonic_type",dictData.getCode()).
eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",orgParam.getDataDate());
List<RStatHarmonicDPO> rStatHarmonicDPOList = rStatHarmonicDPOMapper.selectList(queryWrapper);
int sumOverLimitMeasurement =0;
if(CollectionUtils.isEmpty(rStatOrgDVOS)){
sumOverLimitMeasurement=0;
}else {
sumOverLimitMeasurement = rStatHarmonicDPOList.stream().mapToInt(RStatHarmonicDPO::getOverLimitMeasurement).sum();
}
RStatHarmonicOrgDPO rStatHarmonicOrgDPO = new RStatHarmonicOrgDPO();
rStatHarmonicOrgDPO.setOrgNo(temp);
rStatHarmonicOrgDPO.setDataDate(date);
rStatHarmonicOrgDPO.setHarmonicType(dictData.getId());
rStatHarmonicOrgDPO.setDataType(v.getId());
rStatHarmonicOrgDPO.setOverLimitMeasurementAverage(sumOverLimitMeasurement);
if(finalSumEffectiveMeasurement ==0){
rStatHarmonicOrgDPO.setOverLimitMeasurementRatioAverage(0.00);
}else {
rStatHarmonicOrgDPO.setOverLimitMeasurementRatioAverage(Double.parseDouble(df.format((float)sumOverLimitMeasurement / finalSumEffectiveMeasurement)));
}
rStatHarmonicOrgDPOList.add(rStatHarmonicOrgDPO);
});
});
});
if(!CollectionUtils.isEmpty(rStatHarmonicOrgDPOList)){
rStatHarmonicDPOService.saveOrUpdateBatchByMultiId(rStatHarmonicOrgDPOList,500);
}
}
public static void main(String[] args) {
List<RStatOrgDVO> rStatOrgDVOS = null;
int sumEffectiveMeasurement = rStatOrgDVOS.stream().mapToInt(RStatOrgDVO::getEffectiveMeasurement).sum();
}
}

View File

@@ -10,16 +10,17 @@ import com.njcn.device.pms.pojo.po.RStatOrgPO;
import com.njcn.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgQMapper;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgYMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.*;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.RMpPartHarmonicDetailDServiceImpl;
import com.njcn.prepare.harmonic.service.mysql.area.*;
import com.njcn.prepare.harmonic.service.mysql.line.IRMpPartHarmonicDetailDService;
import com.njcn.prepare.harmonic.utils.PublicUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
@@ -51,6 +52,9 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
private final RStatHarmonicDPOService rStatHarmonicDPOService;
private final RStatHarmonicMPOService rStatHarmonicMPOService;
private final RStatHarmonicQPOService rStatHarmonicQPOService;
private final RStatHarmonicYPOService rStatHarmonicYPOService;
private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper;
private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper;
@@ -59,6 +63,10 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
private final RMpPartHarmonicDetailMMapper rMpPartHarmonicDetailMMapper;
private final RMpSurplusHarmonicDetailMMapper rMpSurplusHarmonicDetailMMapper;
private final RStatOrgMMapper rStatOrgMMapper;
private final RStatOrgQMapper rStatOrgQMapper;
private final RStatOrgYMapper rStatOrgYMapper;
@@ -68,12 +76,12 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
@Override
public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
switch (type) {
// case 1:
// this.hanlderOracleYear (lineParam);
// break;
// case 2:
// this.hanlderOracleQtr (lineParam);
// break;
case 1:
this.hanlderOracleYear (data, dataDate, type);
break;
case 2:
this.hanlderOracleQtr (data, dataDate, type);
break;
case 3:
this.hanlderM ( data, dataDate, type);
break;
@@ -84,6 +92,408 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
break;
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderOracleYear(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
List<RStatHarmonicYPO> rStatHarmonicYPOList = new ArrayList<>();
Date date = DateUtil.parse(dataDate);
QueryWrapper<RMpPartHarmonicDetailM> queryWrapper = new QueryWrapper<>();
QueryWrapper<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgYPO> rStatOrgYPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatHarmonicMPO> harmonicMPOQueryWrapper = new QueryWrapper<>();
DecimalFormat df = new DecimalFormat("0.00");
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.forEach(deptGetChildrenMoreDTO -> {
/*主网*/
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
Map<Integer, List<LineDevGetDTO>> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgYPOQueryWrapper.clear();
rStatOrgYPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("YEAR( data_date)", dataDate.substring(0,4));
RStatOrgYPO rStatOrgYPO = rStatOrgYMapper.selectOne(rStatOrgYPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicYPO rStatHarmonicYPO = new RStatHarmonicYPO();
rStatHarmonicYPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicYPO.setDataDate(date);
rStatHarmonicYPO.setHarmonicType(dictData.getId());
rStatHarmonicYPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicYPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
/**4、累计超标监测点数*/
rStatHarmonicYPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicMPOQueryWrapper.clear();
harmonicMPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatHarmonicMPO> list = rStatHarmonicMPOService.list(harmonicMPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double asDouble1 = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
int sum1 = list.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
rStatHarmonicYPO.setOverLimitMeasurementAverage(asDouble);
rStatHarmonicYPO.setOverLimitMeasurementRatioAverage(asDouble1);
if (rStatHarmonicYPO.getOverLimitMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicYPO.setAverageOverDay(0.00);
} else {
String value = df.format((float) sum1 / rStatHarmonicYPO.getOverLimitMeasurementAccrued());
rStatHarmonicYPO.setAverageOverDay(Double.parseDouble(value));
}
if (rStatOrgYPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicYPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicYPO.getOverLimitMeasurementAccrued() / rStatOrgYPO.getEffectiveMeasurementAccrued());
rStatHarmonicYPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicYPOList.add(rStatHarmonicYPO);
});
});
}
/*配网*/
if(CollectionUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
List<LineDevGetDTO> pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
Map<Integer, List<LineDevGetDTO>> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgYPOQueryWrapper.clear();
rStatOrgYPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("YEAR( data_date)", dataDate.substring(0,4));
RStatOrgYPO rStatOrgYPO = rStatOrgYMapper.selectOne(rStatOrgYPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicYPO rStatHarmonicYPO = new RStatHarmonicYPO();
rStatHarmonicYPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicYPO.setDataDate(date);
rStatHarmonicYPO.setHarmonicType(dictData.getId());
rStatHarmonicYPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicYPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
/**4、累计超标监测点数*/
rStatHarmonicYPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicMPOQueryWrapper.clear();
harmonicMPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatHarmonicMPO> list = rStatHarmonicMPOService.list(harmonicMPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double asDouble1 = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
int sum1 = list.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
rStatHarmonicYPO.setOverLimitMeasurementAverage(asDouble);
rStatHarmonicYPO.setOverLimitMeasurementRatioAverage(asDouble1);
if (rStatHarmonicYPO.getOverLimitMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicYPO.setAverageOverDay(0.00);
} else {
String value = df.format((float) sum1 / rStatHarmonicYPO.getOverLimitMeasurementAccrued());
rStatHarmonicYPO.setAverageOverDay(Double.parseDouble(value));
}
if (rStatOrgYPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicYPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicYPO.getOverLimitMeasurementAccrued() / rStatOrgYPO.getEffectiveMeasurementAccrued());
rStatHarmonicYPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicYPOList.add(rStatHarmonicYPO);
});
});
}
});
if(CollectionUtil.isNotEmpty(rStatHarmonicYPOList)){
rStatHarmonicYPOService.saveOrUpdateBatchByMultiId(rStatHarmonicYPOList,500);
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows
private void hanlderOracleQtr(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
List<RStatHarmonicQPO> rStatHarmonicQPOList = new ArrayList<>();
Date date = DateUtil.parse(dataDate);
QueryWrapper<RMpPartHarmonicDetailM> queryWrapper = new QueryWrapper<>();
QueryWrapper<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgQPO> rStatOrgQPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatHarmonicMPO> harmonicMPOQueryWrapper = new QueryWrapper<>();
DecimalFormat df = new DecimalFormat("0.00");
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.forEach(deptGetChildrenMoreDTO -> {
/*主网*/
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
Map<Integer, List<LineDevGetDTO>> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgQPOQueryWrapper.clear();
rStatOrgQPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
RStatOrgQPO rStatOrgQPO = rStatOrgQMapper.selectOne(rStatOrgQPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicQPO rStatHarmonicQPO = new RStatHarmonicQPO();
rStatHarmonicQPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicQPO.setDataDate(date);
rStatHarmonicQPO.setHarmonicType(dictData.getId());
rStatHarmonicQPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicQPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
/**4、累计超标监测点数*/
rStatHarmonicQPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicMPOQueryWrapper.clear();
harmonicMPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatHarmonicMPO> list = rStatHarmonicMPOService.list(harmonicMPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double asDouble1 = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
int sum1 = list.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
rStatHarmonicQPO.setOverLimitMeasurementAverage(asDouble);
rStatHarmonicQPO.setOverLimitMeasurementRatioAverage(asDouble1);
if (rStatHarmonicQPO.getOverLimitMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicQPO.setAverageOverDay(0.00);
} else {
String value = df.format((float) sum1 / rStatHarmonicQPO.getOverLimitMeasurementAccrued());
rStatHarmonicQPO.setAverageOverDay(Double.parseDouble(value));
}
if (rStatOrgQPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicQPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicQPO.getOverLimitMeasurementAccrued() / rStatOrgQPO.getEffectiveMeasurementAccrued());
rStatHarmonicQPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicQPOList.add(rStatHarmonicQPO);
});
});
}
/*配网*/
if(CollectionUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
List<LineDevGetDTO> pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
Map<Integer, List<LineDevGetDTO>> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgQPOQueryWrapper.clear();
rStatOrgQPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
RStatOrgQPO rStatOrgQPO = rStatOrgQMapper.selectOne(rStatOrgQPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicQPO rStatHarmonicQPO = new RStatHarmonicQPO();
rStatHarmonicQPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicQPO.setDataDate(date);
rStatHarmonicQPO.setHarmonicType(dictData.getId());
rStatHarmonicQPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicQPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
/**4、累计超标监测点数*/
rStatHarmonicQPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicMPOQueryWrapper.clear();
harmonicMPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatHarmonicMPO> list = rStatHarmonicMPOService.list(harmonicMPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double asDouble1 = list.stream().mapToDouble(RStatHarmonicMPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
int sum1 = list.stream().mapToInt(RStatHarmonicMPO::getOverDay).sum();
rStatHarmonicQPO.setOverLimitMeasurementAverage(asDouble);
rStatHarmonicQPO.setOverLimitMeasurementRatioAverage(asDouble1);
if (rStatHarmonicQPO.getOverLimitMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicQPO.setAverageOverDay(0.00);
} else {
String value = df.format((float) sum1 / rStatHarmonicQPO.getOverLimitMeasurementAccrued());
rStatHarmonicQPO.setAverageOverDay(Double.parseDouble(value));
}
if (rStatOrgQPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicQPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicQPO.getOverLimitMeasurementAccrued() / rStatOrgQPO.getEffectiveMeasurementAccrued());
rStatHarmonicQPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicQPOList.add(rStatHarmonicQPO);
});
});
}
});
if(CollectionUtil.isNotEmpty(rStatHarmonicQPOList)){
rStatHarmonicQPOService.saveOrUpdateBatchByMultiId(rStatHarmonicQPOList,500);
}
}
@Transactional
@Async("asyncExecutor")
@SneakyThrows

View File

@@ -1,19 +1,24 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
import com.njcn.harmonic.pojo.po.RStatOrgDPO;
import com.njcn.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageMPO;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageDPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicVoltageMPOService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
@@ -25,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -45,6 +51,12 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ
private final RStatOrgDMapper rStatOrgDMapper;
private final RStatHarmonicVoltageDPOService rStatHarmonicVoltageDPOService;
private final RStatHarmonicVoltageMPOService rStatHarmonicVoltageMPOService;
private final RMpPartHarmonicDetailMMapper rMpPartHarmonicDetailMMapper;
private final RMpSurplusHarmonicDetailMMapper rMpSurplusHarmonicDetailMMapper;
private final RStatOrgMMapper rStatOrgMMapper;
private final
DicDataFeignClient dicDataFeignClient;
@Override
@@ -56,9 +68,9 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ
// case 2:
// this.hanlderOracleQtr (lineParam);
// break;
// case 3:
// this.hanlderOracleMonth (lineParam);
// break;
case 3:
this.hanlderMByPl (data, dataDate, type);
break;
case 5:
this.hanlderDayByPl ( data, dataDate, type);
break;
@@ -67,6 +79,128 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
private void hanlderMByPl(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
List<RStatHarmonicVoltageMPO> rStatHarmonicVoltageMPOList = new ArrayList<>();
Date date = DateUtil.parse(dataDate);
QueryWrapper<RMpPartHarmonicDetailM> queryWrapper = new QueryWrapper<>();
QueryWrapper<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgMPO> rStatOrgMPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatHarmonicVoltageDPO> harmonicVoltageDPOQueryWrapper = new QueryWrapper<>();
DecimalFormat df = new DecimalFormat("0.00");
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取监测点类型类型*/
List<DictData> lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.forEach(deptGetChildrenMoreDTO -> {
/*主网*/
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
Map<Integer, List<LineDevGetDTO>> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
Map<String, List<LineDevGetDTO>> collect2 = v.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
collect2.forEach((k1, v1) -> {
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicVoltageMPO rStatHarmonicVoltageMPO = new RStatHarmonicVoltageMPO();
rStatHarmonicVoltageMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicVoltageMPO.setDataDate(date);
rStatHarmonicVoltageMPO.setHarmonicType(dictData.getId());
rStatHarmonicVoltageMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicVoltageMPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
rStatHarmonicVoltageMPO.setVoltageType(k1);
/**4、累计超标监测点数*/
rStatHarmonicVoltageMPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicVoltageDPOQueryWrapper.clear();
harmonicVoltageDPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("voltageType",k1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RStatHarmonicVoltageDPO> list = rStatHarmonicVoltageDPOService.list(harmonicVoltageDPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rStatHarmonicVoltageMPO.setOverLimitMeasurementAverage(asDouble);
double asDouble1 = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(asDouble);
int sum = list.stream().mapToInt(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).sum();
rStatHarmonicVoltageMPO.setOverDay(sum);
if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicVoltageMPO.getOverLimitMeasurementAccrued() / rStatOrgMPO.getEffectiveMeasurementAccrued());
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicVoltageMPOList.add(rStatHarmonicVoltageMPO);
});
});
});
}
/*配网*/
if(CollectionUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
List<LineDevGetDTO> pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
Map<Integer, List<LineDevGetDTO>> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
});
}
});
if(CollectionUtil.isNotEmpty(rStatHarmonicVoltageMPOList)){
rStatHarmonicVoltageMPOService.saveOrUpdateBatchByMultiId(rStatHarmonicVoltageMPOList,500);
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@@ -264,4 +398,36 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ
return value;
}
private Integer getOverLimitMeasurementAccruedTime(DictData dictData, List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS, List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS) {
Integer value = 0;
if (Objects.equals(dictData.getCode(),DicDataEnum.VOLTAGE_DEV.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getVDevOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.FLICKER.getCode())) {
value = Integer.valueOf(rMpSurplusHarmonicDetailMS.stream().filter(temp ->temp.getFlickerOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getVOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_CURRENT.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getIOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) {
value = Integer.valueOf(rMpSurplusHarmonicDetailMS.stream().filter(temp ->temp.getInuharmOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.PHASE_VOLTAGE.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getUnbalanceOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.FREQUENCY_DEV.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getFreqOverDay()>0).count()+"");
}
if (Objects.equals(dictData.getCode(),DicDataEnum.NEG_CURRENT.getCode())) {
value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getINegOverDay()>0).count()+"");
}
return value;
}
}

View File

@@ -0,0 +1,18 @@
package com.njcn.prepare.harmonic.service.mysql.area;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.prepare.harmonic.pojo.param.OrgParam;
import java.util.List;
/**
* Description:
* Date: 2023/5/26 15:40【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatHarmonicOrgService {
void handler(OrgParam orgParam);
}

View File

@@ -0,0 +1,17 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgDPO;
/**
*
* Description:
* Date: 2023/7/21 10:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatHarmonicOrgDPOService extends IMppService<RStatHarmonicOrgDPO> {
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,19 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import org.springframework.stereotype.Service;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgDPO;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatHarmonicOrgDPOMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgDPOService;
/**
*
* Description:
* Date: 2023/7/21 10:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class RStatHarmonicOrgDPOServiceImpl extends MppServiceImpl<RStatHarmonicOrgDPOMapper, RStatHarmonicOrgDPO> implements RStatHarmonicOrgDPOService{
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgMPO;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatHarmonicOrgMPOMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgMPOService;
/**
*
* Description:
* Date: 2023/7/21 10:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class RStatHarmonicOrgMPOServiceImpl extends MppServiceImpl<RStatHarmonicOrgMPOMapper, RStatHarmonicOrgMPO> implements RStatHarmonicOrgMPOService{
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgQPO;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatHarmonicOrgQPOMapper;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgQPOService;
/**
*
* Description:
* Date: 2023/7/21 10:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class RStatHarmonicOrgQPOServiceImpl extends MppServiceImpl<RStatHarmonicOrgQPOMapper, RStatHarmonicOrgQPO> implements RStatHarmonicOrgQPOService{
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatHarmonicOrgYPOMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatHarmonicOrgYPO;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatHarmonicOrgYPOService;
/**
*
* Description:
* Date: 2023/7/21 10:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class RStatHarmonicOrgYPOServiceImpl extends MppServiceImpl<RStatHarmonicOrgYPOMapper, RStatHarmonicOrgYPO> implements RStatHarmonicOrgYPOService{
}