From 8b166031ec3f3c424f15050217b3ba32bc0771fa Mon Sep 17 00:00:00 2001 From: cdf <857448963@qq.com> Date: Wed, 17 Jun 2026 09:23:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BE=BD=E5=AE=81=E4=BA=8C=E4=B8=89=E5=8C=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + relational_migration/pom.xml | 40 + relational_migration/relational_comm/pom.xml | 127 +++ .../GlobalBusinessExceptionHandler.java | 29 + .../relational/mapper/DynamicSyncMapper.java | 59 ++ .../mapper/SyncTableConfigMapper.java | 23 + .../mapper/mapping/DynamicSyncMapper.xml | 19 + .../njcn/relational/pojo/bo/BaseEntity.java | 55 ++ .../relational/pojo/bo/DownloadResult.java | 23 + .../njcn/relational/pojo/bo/UploadResult.java | 25 + .../relational/pojo/commEnum/TableEnum.java | 86 ++ .../pojo/dto/DynamicRelationTable.java | 22 + .../relational/pojo/po/RMpEventDetailD.java | 47 ++ .../relational/pojo/po/RMpEventDetailM.java | 47 ++ .../relational/pojo/po/RMpEventDetailQ.java | 47 ++ .../relational/pojo/po/RMpEventDetailY.java | 47 ++ .../relational/pojo/po/RMpPollutionD.java | 56 ++ .../relational/pojo/po/RStatComassesDPO.java | 119 +++ .../relational/pojo/po/RStatDataFlickerD.java | 50 ++ .../relational/pojo/po/RStatDataFlucD.java | 47 ++ .../pojo/po/RStatDataHarmPhasicID.java | 191 +++++ .../pojo/po/RStatDataHarmPhasicVD.java | 191 +++++ .../pojo/po/RStatDataHarmPowerPD.java | 200 +++++ .../pojo/po/RStatDataHarmPowerQD.java | 194 +++++ .../pojo/po/RStatDataHarmPowerSD.java | 191 +++++ .../pojo/po/RStatDataHarmRateID.java | 191 +++++ .../pojo/po/RStatDataHarmRateVD.java | 191 +++++ .../njcn/relational/pojo/po/RStatDataID.java | 209 +++++ .../relational/pojo/po/RStatDataInHarmID.java | 191 +++++ .../relational/pojo/po/RStatDataInHarmVD.java | 191 +++++ .../relational/pojo/po/RStatDataPltD.java | 44 + .../njcn/relational/pojo/po/RStatDataVD.java | 224 +++++ .../relational/pojo/po/RStatIntegrityD.java | 43 + .../pojo/po/RStatLimitQualifiedD.java | 450 ++++++++++ .../relational/pojo/po/RStatLimitRateD.java | 468 ++++++++++ .../pojo/po/RStatLimitRateDetailD.java | 450 ++++++++++ .../relational/pojo/po/RStatLimitTargetD.java | 469 +++++++++++ .../relational/pojo/po/RStatOnlineRateD.java | 45 + .../pojo/po/RStatOrgIntegrityD.java | 42 + .../pojo/po/RStatPollutionOrgD.java | 54 ++ .../pojo/po/RStatPollutionOrgM.java | 53 ++ .../pojo/po/RStatPollutionOrgQ.java | 53 ++ .../pojo/po/RStatPollutionOrgY.java | 53 ++ .../pojo/po/RStatPollutionSubstationD.java | 53 ++ .../pojo/po/RStatPollutionSubstationM.java | 53 ++ .../pojo/po/RStatPollutionSubstationQ.java | 53 ++ .../pojo/po/RStatPollutionSubstationY.java | 53 ++ .../relational/pojo/po/SyncTableConfig.java | 45 + .../com/njcn/relational/pojo/po/User.java | 148 ++++ .../relational_target/pom.xml | 72 ++ .../com/njcn/relational/ann/SyncTable.java | 20 + .../com/njcn/relational/config/Security.java | 19 + .../controller/DataTransportController.java | 162 ++++ .../com/njcn/relational/job/importJob.java | 58 ++ .../com/njcn/relational/job/reportJob.java | 56 ++ .../relational/serializer/BlobSerializer.java | 37 + .../relational/serializer/ClobSerializer.java | 34 + .../service/SyncTableConfigService.java | 490 +++++++++++ .../service/SyncTableParseService.java | 796 ++++++++++++++++++ .../njcn/relational/utils/BlobConverter.java | 60 ++ .../njcn/relational/utils/SftpUploadUtil.java | 533 ++++++++++++ .../src/main/resources/application-insert.yml | 35 + .../main/resources/application-insert_up.yml | 36 + .../src/main/resources/application-query.yml | 35 + .../main/resources/application-query_up.yml | 36 + .../src/main/resources/logback-spring.xml | 81 ++ .../src/main/resources/static/js/axios.min.js | 3 + .../resources/static/js/element-ui-index.js | 1 + .../main/resources/static/js/element-ui.css | 1 + .../src/main/resources/static/js/vue.min.js | 6 + .../src/main/resources/static/login.html | 28 + 71 files changed, 8361 insertions(+) create mode 100644 relational_migration/pom.xml create mode 100644 relational_migration/relational_comm/pom.xml create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/exception/GlobalBusinessExceptionHandler.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/DynamicSyncMapper.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/SyncTableConfigMapper.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/mapping/DynamicSyncMapper.xml create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/BaseEntity.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/DownloadResult.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/UploadResult.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/commEnum/TableEnum.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/dto/DynamicRelationTable.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailM.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailQ.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailY.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpPollutionD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatComassesDPO.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlickerD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlucD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicID.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicVD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerPD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerQD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerSD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateID.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateVD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataID.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmID.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmVD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataPltD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataVD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatIntegrityD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitQualifiedD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateDetailD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitTargetD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOnlineRateD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOrgIntegrityD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgM.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgQ.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgY.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationD.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationM.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationQ.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationY.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/SyncTableConfig.java create mode 100644 relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/User.java create mode 100644 relational_migration/relational_target/pom.xml create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/ann/SyncTable.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/config/Security.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/controller/DataTransportController.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/job/importJob.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/job/reportJob.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/BlobSerializer.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/ClobSerializer.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableConfigService.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableParseService.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/utils/BlobConverter.java create mode 100644 relational_migration/relational_target/src/main/java/com/njcn/relational/utils/SftpUploadUtil.java create mode 100644 relational_migration/relational_target/src/main/resources/application-insert.yml create mode 100644 relational_migration/relational_target/src/main/resources/application-insert_up.yml create mode 100644 relational_migration/relational_target/src/main/resources/application-query.yml create mode 100644 relational_migration/relational_target/src/main/resources/application-query_up.yml create mode 100644 relational_migration/relational_target/src/main/resources/logback-spring.xml create mode 100644 relational_migration/relational_target/src/main/resources/static/js/axios.min.js create mode 100644 relational_migration/relational_target/src/main/resources/static/js/element-ui-index.js create mode 100644 relational_migration/relational_target/src/main/resources/static/js/element-ui.css create mode 100644 relational_migration/relational_target/src/main/resources/static/js/vue.min.js create mode 100644 relational_migration/relational_target/src/main/resources/static/login.html diff --git a/pom.xml b/pom.xml index cb5ed70..449ce43 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ influx-data manufact_influx_data filesync + relational_migration pom diff --git a/relational_migration/pom.xml b/relational_migration/pom.xml new file mode 100644 index 0000000..b552b38 --- /dev/null +++ b/relational_migration/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + + com.njcn + data-migration + 1.0.0 + + + relational_migration + pom + + + + 8 + 8 + UTF-8 + + + + relational_comm + relational_target + + + + + + + net.bytebuddy + byte-buddy + 1.12.10 + + + + + + + diff --git a/relational_migration/relational_comm/pom.xml b/relational_migration/relational_comm/pom.xml new file mode 100644 index 0000000..2064aa7 --- /dev/null +++ b/relational_migration/relational_comm/pom.xml @@ -0,0 +1,127 @@ + + + 4.0.0 + + + com.njcn + relational_migration + 1.0.0 + + + relational_comm + + + 1.8 + UTF-8 + UTF-8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + cn.hutool + hutool-all + + + + commons-io + commons-io + + + + org.bouncycastle + bcprov-jdk15on + + + + org.apache.commons + commons-compress + 1.21 + + + + org.projectlombok + lombok + ${lombok.version} + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.version} + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + mysql + mysql-connector-java + ${mysql.version} + + + + + com.dameng + DmJdbcDriver18 + 8.1.1.193 + + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.github.jeffreyning + mybatisplus-plus + ${mybatis-plus.jeffreyning.version} + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j.version} + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/exception/GlobalBusinessExceptionHandler.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/exception/GlobalBusinessExceptionHandler.java new file mode 100644 index 0000000..6d50b30 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/exception/GlobalBusinessExceptionHandler.java @@ -0,0 +1,29 @@ +package com.njcn.relational.exception; + + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 全局通用业务异常处理器 + * + * @author hongawen + * @version 1.0.0 + * @date 2021年04月20日 18:04 + */ +@Slf4j +@AllArgsConstructor +@RestControllerAdvice +public class GlobalBusinessExceptionHandler { + + + + @ExceptionHandler(Exception.class) + public void handleException(Exception e) { + log.error("系统异常--------------------", e); + e.printStackTrace(); + } + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/DynamicSyncMapper.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/DynamicSyncMapper.java new file mode 100644 index 0000000..97d16fd --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/DynamicSyncMapper.java @@ -0,0 +1,59 @@ +package com.njcn.relational.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DynamicSyncMapper { + + /** + * 获取表所有列名(指定Schema) + */ + @Select("SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS " + + "WHERE TABLE_NAME = #{tableName} " + + "AND OWNER = #{schema} " + + "ORDER BY COLUMN_ID") + List getTableColumns(@Param("tableName") String tableName, + @Param("schema") String schema); + + /** + * 获取当前用户/Schema + */ + @Select("SELECT USER FROM DUAL") + String getCurrentUser(); + + /** + * 分页查询 + */ + @Select("SELECT * FROM ${tableName} LIMIT #{limit} OFFSET #{offset}") + List> selectPage(@Param("tableName") String tableName, + @Param("limit") int limit, + @Param("offset") int offset); + + /** + * 增量查询(当天数据) + */ + @Select("SELECT * FROM ${tableName} WHERE ${timeColumn} >= #{startTime} AND ${timeColumn} <= #{endTime}") + List> selectTodayData(@Param("tableName") String tableName, + @Param("timeColumn") String timeColumn, + @Param("startTime") String startTime, + @Param("endTime") String endTime); + + /** + * 清空表 + */ + @Update("TRUNCATE TABLE ${tableName}") + void truncateTable(@Param("tableName") String tableName); + + /** + * 批量插入 + */ + int batchInsert(@Param("tableName") String tableName, + @Param("columns") List columns, + @Param("list") List> list); +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/SyncTableConfigMapper.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/SyncTableConfigMapper.java new file mode 100644 index 0000000..574711c --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/SyncTableConfigMapper.java @@ -0,0 +1,23 @@ +package com.njcn.relational.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.relational.pojo.po.SyncTableConfig; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; +import java.util.Map; + +/** + * relational_migration + * + * @author cdf + * @date 2026/5/26 + */ +@Mapper +public interface SyncTableConfigMapper extends BaseMapper { + +} + diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/mapping/DynamicSyncMapper.xml b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/mapping/DynamicSyncMapper.xml new file mode 100644 index 0000000..e5bc945 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/mapper/mapping/DynamicSyncMapper.xml @@ -0,0 +1,19 @@ + + + + + + + INSERT INTO ${tableName} + + ${col} + + VALUES + + + #{record[col]} + + + + + diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/BaseEntity.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/BaseEntity.java new file mode 100644 index 0000000..a87a549 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/BaseEntity.java @@ -0,0 +1,55 @@ +package com.njcn.relational.pojo.bo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月13日 10:18 + */ +@Data +public class BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 创建用户 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime createTime; + + /** + * 更新用户 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime updateTime; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/DownloadResult.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/DownloadResult.java new file mode 100644 index 0000000..a8b8ad1 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/DownloadResult.java @@ -0,0 +1,23 @@ +package com.njcn.relational.pojo.bo; + +/** + * data-migration + * + * @author cdf + * @date 2026/5/27 + */ + +import lombok.Data; + +/** + * 下载结果类 + */ +@Data +public class DownloadResult { + private String remoteFilePath; + private String localFilePath; + private boolean success; + private String errorMessage; + private long fileSize; + private long downloadTime; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/UploadResult.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/UploadResult.java new file mode 100644 index 0000000..5219014 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/bo/UploadResult.java @@ -0,0 +1,25 @@ +package com.njcn.relational.pojo.bo; + +/** + * data-migration + * + * @author cdf + * @date 2026/5/27 + */ + +import lombok.Data; + +/** + * 上传结果类 + */ +@Data +public class UploadResult { + private String localFilePath; + private String remotePath; + private boolean success; + private String errorMessage; + private long fileSize; + private long uploadTime; + + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/commEnum/TableEnum.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/commEnum/TableEnum.java new file mode 100644 index 0000000..c7eec65 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/commEnum/TableEnum.java @@ -0,0 +1,86 @@ +package com.njcn.relational.pojo.commEnum; + +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +public enum TableEnum { + DATAFLICKER("r_stat_data_flicker_d","电压闪变数据表", "time"), + DATAFLUC("r_stat_data_fluc_d","电压波动数据表", "time"), + DATAHARMPHASICI("r_stat_data_harmphasic_i_d","谐波电流角度数据表", "time"), + DATAHARMPHASICV("r_stat_data_harmphasic_v_d","谐波电压角度数据表", "time"), + DATAHARMPOWERP("r_stat_data_harmpower_p_d","有功功率数据表", "time"), + DATAHARMPOWERQ("r_stat_data_harmpower_q_d","无功功率数据表", "time"), + DATAHARMPOWERS("r_stat_data_harmpower_s_d","视在功率数据表", "time"), + DATAHARMRATEI("r_stat_data_harmrate_i_d","谐波电流含有率数据表", "time"), + DATAHARMRATEV("r_stat_data_harmrate_v_d","谐波电压含有率数据表", "time"), + DATAINHARMI("r_stat_data_inharm_i_d","电流简谐波幅值数据表", "time"), + DATAINHARMV("r_stat_data_inharm_v_d","电压间谐波幅值数据表", "time"), + DATAI("r_stat_data_i_d","谐波电流幅值数据表", "time"), + DATAPLT("r_stat_data_plt_d","长时闪变数据表", "time"), + DATAV("r_stat_data_v_d","电压幅值数据表", "time"), + r_stat_integrity_d("r_stat_integrity_d","数据性完整表","time_id"), + r_stat_limit_qualified_d("r_stat_limit_qualified_d","数据性完整表","time_id"), + r_stat_limit_rate_d("r_stat_limit_rate_d","稳态越限日表","time_id"), + r_stat_limit_rate_detail_d("r_stat_limit_rate_detail_d","稳态越限详细日表","time_id"), + r_stat_limit_target_d("r_stat_limit_target_d","稳态越限日表","time_id"), + r_stat_onlinerate_d("r_stat_onlinerate_d","终端在线时长日表","time_id"), + + r_mp_event_detail("r_mp_event_detail","暂态事件详细表","start_time"), + r_mp_event_detail_d("r_mp_event_detail_d","暂态事件日表","data_date"), + r_mp_event_detail_m("r_mp_event_detail_m","暂态事件月表","data_date"), + r_mp_event_detail_q("r_mp_event_detail_q","暂态事件季表","data_date"), + r_mp_event_detail_y("r_mp_event_detail_y","暂态事件年表","data_date") + ; + + + private final String code; + private final String value; + + private final String tableField; + + TableEnum(String code, String value, String tableField) { + this.code = code; + this.value = value; + this.tableField = tableField; + } + + /** + * 获取所有可执行的组件类型, + * 除了"目录"类型,其他都可以执行 + * @return + */ + public static List getExecutableTypes() { + return Arrays.stream(TableEnum.values()).map(tmep->{ + return tmep.code; + }).collect(Collectors.toList()); + } + + + /** + * 通过code获取枚举值 + * @param code + * @return + */ + public static String getValueByCode(String code) { + for (TableEnum item : TableEnum.values()) { + if (item.code.equals(code)) { + return item.value; + } + } + return null; + } + + public static String getFieldByCode(String code) { + for (TableEnum item : TableEnum.values()) { + if (item.code.equals(code)) { + return item.tableField; + } + } + return null; + } + + } \ No newline at end of file diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/dto/DynamicRelationTable.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/dto/DynamicRelationTable.java new file mode 100644 index 0000000..70417a2 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/dto/DynamicRelationTable.java @@ -0,0 +1,22 @@ +package com.njcn.relational.pojo.dto; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: cdf + * @CreateTime: 2025-05-19 + * @Description: + */ +@Data +public class DynamicRelationTable { + + @TableId + private Long id; + + // 其他字段将在运行时动态确定 + private Map dynamicFields = new HashMap<>(); +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailD.java new file mode 100644 index 0000000..7c5bf7d --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailD.java @@ -0,0 +1,47 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Description: 监测点暂态指标超标明细日表 + * @Author: wr + * @Date: 2025/3/14 13:47 + */ +@Data +@TableName(value = "r_mp_event_detail_d") +public class RMpEventDetailD { + /** + * 监测点ID + */ + @MppMultiId(value = "measurement_point_id") + private String measurementPointId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + private LocalDate dataDate; + + /** + * 电压暂升发生次数 + */ + @TableField(value = "swell_times") + private Integer swellTimes; + + /** + * 电压暂降发生次数 + */ + @TableField(value = "sag_times") + private Integer sagTimes; + + /** + * 短时中断发生次数 + */ + @TableField(value = "interrupt_times") + private Integer interruptTimes; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailM.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailM.java new file mode 100644 index 0000000..76197dd --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailM.java @@ -0,0 +1,47 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Description: 监测点暂态指标超标明细月表 + * @Author: wr + * @Date: 2025/3/14 13:47 + */ +@Data +@TableName(value = "r_mp_event_detail_m") +public class RMpEventDetailM { + /** + * 监测点ID + */ + @MppMultiId(value = "measurement_point_id") + private String measurementPointId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + private LocalDate dataDate; + + /** + * 电压暂升发生次数 + */ + @TableField(value = "swell_times") + private Integer swellTimes; + + /** + * 电压暂降发生次数 + */ + @TableField(value = "sag_times") + private Integer sagTimes; + + /** + * 短时中断发生次数 + */ + @TableField(value = "interrupt_times") + private Integer interruptTimes; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailQ.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailQ.java new file mode 100644 index 0000000..69f20a1 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailQ.java @@ -0,0 +1,47 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Description: 监测点暂态指标超标明细季表 + * @Author: wr + * @Date: 2025/3/14 13:47 + */ +@Data +@TableName(value = "r_mp_event_detail_q") +public class RMpEventDetailQ { + /** + * 监测点ID + */ + @MppMultiId(value = "measurement_point_id") + private String measurementPointId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + private LocalDate dataDate; + + /** + * 电压暂升发生次数 + */ + @TableField(value = "swell_times") + private Integer swellTimes; + + /** + * 电压暂降发生次数 + */ + @TableField(value = "sag_times") + private Integer sagTimes; + + /** + * 短时中断发生次数 + */ + @TableField(value = "interrupt_times") + private Integer interruptTimes; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailY.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailY.java new file mode 100644 index 0000000..eca83e3 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpEventDetailY.java @@ -0,0 +1,47 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Description: 监测点暂态指标超标明细年表 + * @Author: wr + * @Date: 2025/3/14 13:47 + */ +@Data +@TableName(value = "r_mp_event_detail_y") +public class RMpEventDetailY { + /** + * 监测点ID + */ + @MppMultiId(value = "measurement_point_id") + private String measurementPointId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + private LocalDate dataDate; + + /** + * 电压暂升发生次数 + */ + @TableField(value = "swell_times") + private Integer swellTimes; + + /** + * 电压暂降发生次数 + */ + @TableField(value = "sag_times") + private Integer sagTimes; + + /** + * 短时中断发生次数 + */ + @TableField(value = "interrupt_times") + private Integer interruptTimes; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpPollutionD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpPollutionD.java new file mode 100644 index 0000000..2472d4a --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RMpPollutionD.java @@ -0,0 +1,56 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 单位污区图统计日表 + * @Author: wr + * @Date: 2025/3/19 14:13 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_mp_pollution_d") +public class RMpPollutionD implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 单位id + */ + @MppMultiId(value = "line_id") + @ApiModelProperty(value = "监测点") + private String lineId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value = "时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value = "污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value = "统计值") + private Double value; + + +} \ No newline at end of file diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatComassesDPO.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatComassesDPO.java new file mode 100644 index 0000000..bb2fa05 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatComassesDPO.java @@ -0,0 +1,119 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/3/27 15:20 + */ +@Data +@TableName(value = "r_stat_comasses_d") +public class RStatComassesDPO implements Serializable { + + @MppMultiId + @TableField(value = "time_id") + private String time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @TableField(value = "freq_dev1") + private Double freqDev1; + + @TableField(value = "freq_dev2") + private Double freqDev2; + + @TableField(value = "freq_dev3") + private Double freqDev3; + + @TableField(value = "freq_dev4") + private Double freqDev4; + + @TableField(value = "freq_dev5") + private Double freqDev5; + + @TableField(value = "vu_dev1") + private Double vuDev1; + + @TableField(value = "vu_dev2") + private Double vuDev2; + + @TableField(value = "vu_dev3") + private Double vuDev3; + + @TableField(value = "vu_dev4") + private Double vuDev4; + + @TableField(value = "vu_dev5") + private Double vuDev5; + + @TableField(value = "data_plt1") + private Double dataPst1; + + @TableField(value = "data_plt2") + private Double dataPst2; + + @TableField(value = "data_plt3") + private Double dataPst3; + + @TableField(value = "data_plt4") + private Double dataPst4; + + @TableField(value = "data_plt5") + private Double dataPst5; + + @TableField(value = "v_unbalance1") + private Double vUnbalance1; + + @TableField(value = "v_unbalance2") + private Double vUnbalance2; + + @TableField(value = "v_unbalance3") + private Double vUnbalance3; + + @TableField(value = "v_unbalance4") + private Double vUnbalance4; + + @TableField(value = "v_unbalance5") + private Double vUnbalance5; + + @TableField(value = "v_thd1") + private Double vThd1; + + @TableField(value = "v_thd2") + private Double vThd2; + + @TableField(value = "v_thd3") + private Double vThd3; + + @TableField(value = "v_thd4") + private Double vThd4; + + @TableField(value = "v_thd5") + private Double vThd5; + + @TableField(value = "event1") + private Double event1; + + @TableField(value = "event2") + private Double event2; + + @TableField(value = "event3") + private Double event3; + + @TableField(value = "event4") + private Double event4; + + @TableField(value = "event5") + private Double event5; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlickerD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlickerD.java new file mode 100644 index 0000000..9e32837 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlickerD.java @@ -0,0 +1,50 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "r_stat_data_flicker_d") +public class RStatDataFlickerD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "fluc",updateStrategy = FieldStrategy.IGNORED) + private Double fluc; + + @TableField(value = "plt",updateStrategy = FieldStrategy.IGNORED) + private Double plt; + + @TableField(value = "pst",updateStrategy = FieldStrategy.IGNORED) + private Double pst; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlucD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlucD.java new file mode 100644 index 0000000..be40f39 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataFlucD.java @@ -0,0 +1,47 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "r_stat_data_fluc_d") +public class RStatDataFlucD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "fluc",updateStrategy = FieldStrategy.IGNORED) + private Double fluc; + + @TableField(value = "fluccf",updateStrategy = FieldStrategy.IGNORED) + private Double fluccf; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicID.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicID.java new file mode 100644 index 0000000..d7e7cf4 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicID.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMPHASIC_I_D") +public class RStatDataHarmPhasicID implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "i_1",updateStrategy = FieldStrategy.IGNORED) + private Double i1; + + @TableField(value = "i_2",updateStrategy = FieldStrategy.IGNORED) + private Double i2; + + @TableField(value = "i_3",updateStrategy = FieldStrategy.IGNORED) + private Double i3; + + @TableField(value = "i_4",updateStrategy = FieldStrategy.IGNORED) + private Double i4; + + @TableField(value = "i_5",updateStrategy = FieldStrategy.IGNORED) + private Double i5; + + @TableField(value = "i_6",updateStrategy = FieldStrategy.IGNORED) + private Double i6; + + @TableField(value = "i_7",updateStrategy = FieldStrategy.IGNORED) + private Double i7; + + @TableField(value = "i_8",updateStrategy = FieldStrategy.IGNORED) + private Double i8; + + @TableField(value = "i_9",updateStrategy = FieldStrategy.IGNORED) + private Double i9; + + @TableField(value = "i_10",updateStrategy = FieldStrategy.IGNORED) + private Double i10; + + @TableField(value = "i_11",updateStrategy = FieldStrategy.IGNORED) + private Double i11; + + @TableField(value = "i_12",updateStrategy = FieldStrategy.IGNORED) + private Double i12; + + @TableField(value = "i_13",updateStrategy = FieldStrategy.IGNORED) + private Double i13; + + @TableField(value = "i_14",updateStrategy = FieldStrategy.IGNORED) + private Double i14; + + @TableField(value = "i_15",updateStrategy = FieldStrategy.IGNORED) + private Double i15; + + @TableField(value = "i_16",updateStrategy = FieldStrategy.IGNORED) + private Double i16; + + @TableField(value = "i_17",updateStrategy = FieldStrategy.IGNORED) + private Double i17; + + @TableField(value = "i_18",updateStrategy = FieldStrategy.IGNORED) + private Double i18; + + @TableField(value = "i_19",updateStrategy = FieldStrategy.IGNORED) + private Double i19; + + @TableField(value = "i_20",updateStrategy = FieldStrategy.IGNORED) + private Double i20; + + @TableField(value = "i_21",updateStrategy = FieldStrategy.IGNORED) + private Double i21; + + @TableField(value = "i_22",updateStrategy = FieldStrategy.IGNORED) + private Double i22; + + @TableField(value = "i_23",updateStrategy = FieldStrategy.IGNORED) + private Double i23; + + @TableField(value = "i_24",updateStrategy = FieldStrategy.IGNORED) + private Double i24; + + @TableField(value = "i_25",updateStrategy = FieldStrategy.IGNORED) + private Double i25; + + @TableField(value = "i_26",updateStrategy = FieldStrategy.IGNORED) + private Double i26; + + @TableField(value = "i_27",updateStrategy = FieldStrategy.IGNORED) + private Double i27; + + @TableField(value = "i_28",updateStrategy = FieldStrategy.IGNORED) + private Double i28; + + @TableField(value = "i_29",updateStrategy = FieldStrategy.IGNORED) + private Double i29; + + @TableField(value = "i_30",updateStrategy = FieldStrategy.IGNORED) + private Double i30; + + @TableField(value = "i_31",updateStrategy = FieldStrategy.IGNORED) + private Double i31; + + @TableField(value = "i_32",updateStrategy = FieldStrategy.IGNORED) + private Double i32; + + @TableField(value = "i_33",updateStrategy = FieldStrategy.IGNORED) + private Double i33; + + @TableField(value = "i_34",updateStrategy = FieldStrategy.IGNORED) + private Double i34; + + @TableField(value = "i_35",updateStrategy = FieldStrategy.IGNORED) + private Double i35; + + @TableField(value = "i_36",updateStrategy = FieldStrategy.IGNORED) + private Double i36; + + @TableField(value = "i_37",updateStrategy = FieldStrategy.IGNORED) + private Double i37; + + @TableField(value = "i_38",updateStrategy = FieldStrategy.IGNORED) + private Double i38; + + @TableField(value = "i_39",updateStrategy = FieldStrategy.IGNORED) + private Double i39; + + @TableField(value = "i_40",updateStrategy = FieldStrategy.IGNORED) + private Double i40; + + @TableField(value = "i_41",updateStrategy = FieldStrategy.IGNORED) + private Double i41; + + @TableField(value = "i_42",updateStrategy = FieldStrategy.IGNORED) + private Double i42; + + @TableField(value = "i_43",updateStrategy = FieldStrategy.IGNORED) + private Double i43; + + @TableField(value = "i_44",updateStrategy = FieldStrategy.IGNORED) + private Double i44; + + @TableField(value = "i_45",updateStrategy = FieldStrategy.IGNORED) + private Double i45; + + @TableField(value = "i_46",updateStrategy = FieldStrategy.IGNORED) + private Double i46; + + @TableField(value = "i_47",updateStrategy = FieldStrategy.IGNORED) + private Double i47; + + @TableField(value = "i_48",updateStrategy = FieldStrategy.IGNORED) + private Double i48; + + @TableField(value = "i_49",updateStrategy = FieldStrategy.IGNORED) + private Double i49; + + @TableField(value = "i_50",updateStrategy = FieldStrategy.IGNORED) + private Double i50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicVD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicVD.java new file mode 100644 index 0000000..0f3b1e0 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPhasicVD.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMPHASIC_V_D") +public class RStatDataHarmPhasicVD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "v_1",updateStrategy = FieldStrategy.IGNORED) + private Double v1; + + @TableField(value = "v_2",updateStrategy = FieldStrategy.IGNORED) + private Double v2; + + @TableField(value = "v_3",updateStrategy = FieldStrategy.IGNORED) + private Double v3; + + @TableField(value = "v_4",updateStrategy = FieldStrategy.IGNORED) + private Double v4; + + @TableField(value = "v_5",updateStrategy = FieldStrategy.IGNORED) + private Double v5; + + @TableField(value = "v_6",updateStrategy = FieldStrategy.IGNORED) + private Double v6; + + @TableField(value = "v_7",updateStrategy = FieldStrategy.IGNORED) + private Double v7; + + @TableField(value = "v_8",updateStrategy = FieldStrategy.IGNORED) + private Double v8; + + @TableField(value = "v_9",updateStrategy = FieldStrategy.IGNORED) + private Double v9; + + @TableField(value = "v_10",updateStrategy = FieldStrategy.IGNORED) + private Double v10; + + @TableField(value = "v_11",updateStrategy = FieldStrategy.IGNORED) + private Double v11; + + @TableField(value = "v_12",updateStrategy = FieldStrategy.IGNORED) + private Double v12; + + @TableField(value = "v_13",updateStrategy = FieldStrategy.IGNORED) + private Double v13; + + @TableField(value = "v_14",updateStrategy = FieldStrategy.IGNORED) + private Double v14; + + @TableField(value = "v_15",updateStrategy = FieldStrategy.IGNORED) + private Double v15; + + @TableField(value = "v_16",updateStrategy = FieldStrategy.IGNORED) + private Double v16; + + @TableField(value = "v_17",updateStrategy = FieldStrategy.IGNORED) + private Double v17; + + @TableField(value = "v_18",updateStrategy = FieldStrategy.IGNORED) + private Double v18; + + @TableField(value = "v_19",updateStrategy = FieldStrategy.IGNORED) + private Double v19; + + @TableField(value = "v_20",updateStrategy = FieldStrategy.IGNORED) + private Double v20; + + @TableField(value = "v_21",updateStrategy = FieldStrategy.IGNORED) + private Double v21; + + @TableField(value = "v_22",updateStrategy = FieldStrategy.IGNORED) + private Double v22; + + @TableField(value = "v_23",updateStrategy = FieldStrategy.IGNORED) + private Double v23; + + @TableField(value = "v_24",updateStrategy = FieldStrategy.IGNORED) + private Double v24; + + @TableField(value = "v_25",updateStrategy = FieldStrategy.IGNORED) + private Double v25; + + @TableField(value = "v_26",updateStrategy = FieldStrategy.IGNORED) + private Double v26; + + @TableField(value = "v_27",updateStrategy = FieldStrategy.IGNORED) + private Double v27; + + @TableField(value = "v_28",updateStrategy = FieldStrategy.IGNORED) + private Double v28; + + @TableField(value = "v_29",updateStrategy = FieldStrategy.IGNORED) + private Double v29; + + @TableField(value = "v_30",updateStrategy = FieldStrategy.IGNORED) + private Double v30; + + @TableField(value = "v_31",updateStrategy = FieldStrategy.IGNORED) + private Double v31; + + @TableField(value = "v_32",updateStrategy = FieldStrategy.IGNORED) + private Double v32; + + @TableField(value = "v_33",updateStrategy = FieldStrategy.IGNORED) + private Double v33; + + @TableField(value = "v_34",updateStrategy = FieldStrategy.IGNORED) + private Double v34; + + @TableField(value = "v_35",updateStrategy = FieldStrategy.IGNORED) + private Double v35; + + @TableField(value = "v_36",updateStrategy = FieldStrategy.IGNORED) + private Double v36; + + @TableField(value = "v_37",updateStrategy = FieldStrategy.IGNORED) + private Double v37; + + @TableField(value = "v_38",updateStrategy = FieldStrategy.IGNORED) + private Double v38; + + @TableField(value = "v_39",updateStrategy = FieldStrategy.IGNORED) + private Double v39; + + @TableField(value = "v_40",updateStrategy = FieldStrategy.IGNORED) + private Double v40; + + @TableField(value = "v_41",updateStrategy = FieldStrategy.IGNORED) + private Double v41; + + @TableField(value = "v_42",updateStrategy = FieldStrategy.IGNORED) + private Double v42; + + @TableField(value = "v_43",updateStrategy = FieldStrategy.IGNORED) + private Double v43; + + @TableField(value = "v_44",updateStrategy = FieldStrategy.IGNORED) + private Double v44; + + @TableField(value = "v_45",updateStrategy = FieldStrategy.IGNORED) + private Double v45; + + @TableField(value = "v_46",updateStrategy = FieldStrategy.IGNORED) + private Double v46; + + @TableField(value = "v_47",updateStrategy = FieldStrategy.IGNORED) + private Double v47; + + @TableField(value = "v_48",updateStrategy = FieldStrategy.IGNORED) + private Double v48; + + @TableField(value = "v_49",updateStrategy = FieldStrategy.IGNORED) + private Double v49; + + @TableField(value = "v_50",updateStrategy = FieldStrategy.IGNORED) + private Double v50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerPD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerPD.java new file mode 100644 index 0000000..e487864 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerPD.java @@ -0,0 +1,200 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMPOWER_P_D") +public class RStatDataHarmPowerPD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "p",updateStrategy = FieldStrategy.IGNORED) + private Double p; + + @TableField(value = "pf",updateStrategy = FieldStrategy.IGNORED) + private Double pf; + + @TableField(value = "df",updateStrategy = FieldStrategy.IGNORED) + private Double df; + + @TableField(value = "p_1",updateStrategy = FieldStrategy.IGNORED) + private Double p1; + + @TableField(value = "p_2",updateStrategy = FieldStrategy.IGNORED) + private Double p2; + + @TableField(value = "p_3",updateStrategy = FieldStrategy.IGNORED) + private Double p3; + + @TableField(value = "p_4",updateStrategy = FieldStrategy.IGNORED) + private Double p4; + + @TableField(value = "p_5",updateStrategy = FieldStrategy.IGNORED) + private Double p5; + + @TableField(value = "p_6",updateStrategy = FieldStrategy.IGNORED) + private Double p6; + + @TableField(value = "p_7",updateStrategy = FieldStrategy.IGNORED) + private Double p7; + + @TableField(value = "p_8",updateStrategy = FieldStrategy.IGNORED) + private Double p8; + + @TableField(value = "p_9",updateStrategy = FieldStrategy.IGNORED) + private Double p9; + + @TableField(value = "p_10",updateStrategy = FieldStrategy.IGNORED) + private Double p10; + + @TableField(value = "p_11",updateStrategy = FieldStrategy.IGNORED) + private Double p11; + + @TableField(value = "p_12",updateStrategy = FieldStrategy.IGNORED) + private Double p12; + + @TableField(value = "p_13",updateStrategy = FieldStrategy.IGNORED) + private Double p13; + + @TableField(value = "p_14",updateStrategy = FieldStrategy.IGNORED) + private Double p14; + + @TableField(value = "p_15",updateStrategy = FieldStrategy.IGNORED) + private Double p15; + + @TableField(value = "p_16",updateStrategy = FieldStrategy.IGNORED) + private Double p16; + + @TableField(value = "p_17",updateStrategy = FieldStrategy.IGNORED) + private Double p17; + + @TableField(value = "p_18",updateStrategy = FieldStrategy.IGNORED) + private Double p18; + + @TableField(value = "p_19",updateStrategy = FieldStrategy.IGNORED) + private Double p19; + + @TableField(value = "p_20",updateStrategy = FieldStrategy.IGNORED) + private Double p20; + + @TableField(value = "p_21",updateStrategy = FieldStrategy.IGNORED) + private Double p21; + + @TableField(value = "p_22",updateStrategy = FieldStrategy.IGNORED) + private Double p22; + + @TableField(value = "p_23",updateStrategy = FieldStrategy.IGNORED) + private Double p23; + + @TableField(value = "p_24",updateStrategy = FieldStrategy.IGNORED) + private Double p24; + + @TableField(value = "p_25",updateStrategy = FieldStrategy.IGNORED) + private Double p25; + + @TableField(value = "p_26",updateStrategy = FieldStrategy.IGNORED) + private Double p26; + + @TableField(value = "p_27",updateStrategy = FieldStrategy.IGNORED) + private Double p27; + + @TableField(value = "p_28",updateStrategy = FieldStrategy.IGNORED) + private Double p28; + + @TableField(value = "p_29",updateStrategy = FieldStrategy.IGNORED) + private Double p29; + + @TableField(value = "p_30",updateStrategy = FieldStrategy.IGNORED) + private Double p30; + + @TableField(value = "p_31",updateStrategy = FieldStrategy.IGNORED) + private Double p31; + + @TableField(value = "p_32",updateStrategy = FieldStrategy.IGNORED) + private Double p32; + + @TableField(value = "p_33",updateStrategy = FieldStrategy.IGNORED) + private Double p33; + + @TableField(value = "p_34",updateStrategy = FieldStrategy.IGNORED) + private Double p34; + + @TableField(value = "p_35",updateStrategy = FieldStrategy.IGNORED) + private Double p35; + + @TableField(value = "p_36",updateStrategy = FieldStrategy.IGNORED) + private Double p36; + + @TableField(value = "p_37",updateStrategy = FieldStrategy.IGNORED) + private Double p37; + + @TableField(value = "p_38",updateStrategy = FieldStrategy.IGNORED) + private Double p38; + + @TableField(value = "p_39",updateStrategy = FieldStrategy.IGNORED) + private Double p39; + + @TableField(value = "p_40",updateStrategy = FieldStrategy.IGNORED) + private Double p40; + + @TableField(value = "p_41",updateStrategy = FieldStrategy.IGNORED) + private Double p41; + + @TableField(value = "p_42",updateStrategy = FieldStrategy.IGNORED) + private Double p42; + + @TableField(value = "p_43",updateStrategy = FieldStrategy.IGNORED) + private Double p43; + + @TableField(value = "p_44",updateStrategy = FieldStrategy.IGNORED) + private Double p44; + + @TableField(value = "p_45",updateStrategy = FieldStrategy.IGNORED) + private Double p45; + + @TableField(value = "p_46",updateStrategy = FieldStrategy.IGNORED) + private Double p46; + + @TableField(value = "p_47",updateStrategy = FieldStrategy.IGNORED) + private Double p47; + + @TableField(value = "p_48",updateStrategy = FieldStrategy.IGNORED) + private Double p48; + + @TableField(value = "p_49",updateStrategy = FieldStrategy.IGNORED) + private Double p49; + + @TableField(value = "p_50",updateStrategy = FieldStrategy.IGNORED) + private Double p50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerQD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerQD.java new file mode 100644 index 0000000..fe0aaf3 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerQD.java @@ -0,0 +1,194 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMPOWER_Q_D") +public class RStatDataHarmPowerQD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "q",updateStrategy = FieldStrategy.IGNORED) + private Double q; + + @TableField(value = "q_1",updateStrategy = FieldStrategy.IGNORED) + private Double q1; + + @TableField(value = "q_2",updateStrategy = FieldStrategy.IGNORED) + private Double q2; + + @TableField(value = "q_3",updateStrategy = FieldStrategy.IGNORED) + private Double q3; + + @TableField(value = "q_4",updateStrategy = FieldStrategy.IGNORED) + private Double q4; + + @TableField(value = "q_5",updateStrategy = FieldStrategy.IGNORED) + private Double q5; + + @TableField(value = "q_6",updateStrategy = FieldStrategy.IGNORED) + private Double q6; + + @TableField(value = "q_7",updateStrategy = FieldStrategy.IGNORED) + private Double q7; + + @TableField(value = "q_8",updateStrategy = FieldStrategy.IGNORED) + private Double q8; + + @TableField(value = "q_9",updateStrategy = FieldStrategy.IGNORED) + private Double q9; + + @TableField(value = "q_10",updateStrategy = FieldStrategy.IGNORED) + private Double q10; + + @TableField(value = "q_11",updateStrategy = FieldStrategy.IGNORED) + private Double q11; + + @TableField(value = "q_12",updateStrategy = FieldStrategy.IGNORED) + private Double q12; + + @TableField(value = "q_13",updateStrategy = FieldStrategy.IGNORED) + private Double q13; + + @TableField(value = "q_14",updateStrategy = FieldStrategy.IGNORED) + private Double q14; + + @TableField(value = "q_15",updateStrategy = FieldStrategy.IGNORED) + private Double q15; + + @TableField(value = "q_16",updateStrategy = FieldStrategy.IGNORED) + private Double q16; + + @TableField(value = "q_17",updateStrategy = FieldStrategy.IGNORED) + private Double q17; + + @TableField(value = "q_18",updateStrategy = FieldStrategy.IGNORED) + private Double q18; + + @TableField(value = "q_19",updateStrategy = FieldStrategy.IGNORED) + private Double q19; + + @TableField(value = "q_20",updateStrategy = FieldStrategy.IGNORED) + private Double q20; + + @TableField(value = "q_21",updateStrategy = FieldStrategy.IGNORED) + private Double q21; + + @TableField(value = "q_22",updateStrategy = FieldStrategy.IGNORED) + private Double q22; + + @TableField(value = "q_23",updateStrategy = FieldStrategy.IGNORED) + private Double q23; + + @TableField(value = "q_24",updateStrategy = FieldStrategy.IGNORED) + private Double q24; + + @TableField(value = "q_25",updateStrategy = FieldStrategy.IGNORED) + private Double q25; + + @TableField(value = "q_26",updateStrategy = FieldStrategy.IGNORED) + private Double q26; + + @TableField(value = "q_27",updateStrategy = FieldStrategy.IGNORED) + private Double q27; + + @TableField(value = "q_28",updateStrategy = FieldStrategy.IGNORED) + private Double q28; + + @TableField(value = "q_29",updateStrategy = FieldStrategy.IGNORED) + private Double q29; + + @TableField(value = "q_30",updateStrategy = FieldStrategy.IGNORED) + private Double q30; + + @TableField(value = "q_31",updateStrategy = FieldStrategy.IGNORED) + private Double q31; + + @TableField(value = "q_32",updateStrategy = FieldStrategy.IGNORED) + private Double q32; + + @TableField(value = "q_33",updateStrategy = FieldStrategy.IGNORED) + private Double q33; + + @TableField(value = "q_34",updateStrategy = FieldStrategy.IGNORED) + private Double q34; + + @TableField(value = "q_35",updateStrategy = FieldStrategy.IGNORED) + private Double q35; + + @TableField(value = "q_36",updateStrategy = FieldStrategy.IGNORED) + private Double q36; + + @TableField(value = "q_37",updateStrategy = FieldStrategy.IGNORED) + private Double q37; + + @TableField(value = "q_38",updateStrategy = FieldStrategy.IGNORED) + private Double q38; + + @TableField(value = "q_39",updateStrategy = FieldStrategy.IGNORED) + private Double q39; + + @TableField(value = "q_40",updateStrategy = FieldStrategy.IGNORED) + private Double q40; + + @TableField(value = "q_41",updateStrategy = FieldStrategy.IGNORED) + private Double q41; + + @TableField(value = "q_42",updateStrategy = FieldStrategy.IGNORED) + private Double q42; + + @TableField(value = "q_43",updateStrategy = FieldStrategy.IGNORED) + private Double q43; + + @TableField(value = "q_44",updateStrategy = FieldStrategy.IGNORED) + private Double q44; + + @TableField(value = "q_45",updateStrategy = FieldStrategy.IGNORED) + private Double q45; + + @TableField(value = "q_46",updateStrategy = FieldStrategy.IGNORED) + private Double q46; + + @TableField(value = "q_47",updateStrategy = FieldStrategy.IGNORED) + private Double q47; + + @TableField(value = "q_48",updateStrategy = FieldStrategy.IGNORED) + private Double q48; + + @TableField(value = "q_49",updateStrategy = FieldStrategy.IGNORED) + private Double q49; + + @TableField(value = "q_50",updateStrategy = FieldStrategy.IGNORED) + private Double q50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerSD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerSD.java new file mode 100644 index 0000000..98b5e4f --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmPowerSD.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMPOWER_S_D") +public class RStatDataHarmPowerSD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "s_1",updateStrategy = FieldStrategy.IGNORED) + private Double s1; + + @TableField(value = "s_2",updateStrategy = FieldStrategy.IGNORED) + private Double s2; + + @TableField(value = "s_3",updateStrategy = FieldStrategy.IGNORED) + private Double s3; + + @TableField(value = "s_4",updateStrategy = FieldStrategy.IGNORED) + private Double s4; + + @TableField(value = "s_5",updateStrategy = FieldStrategy.IGNORED) + private Double s5; + + @TableField(value = "s_6",updateStrategy = FieldStrategy.IGNORED) + private Double s6; + + @TableField(value = "s_7",updateStrategy = FieldStrategy.IGNORED) + private Double s7; + + @TableField(value = "s_8",updateStrategy = FieldStrategy.IGNORED) + private Double s8; + + @TableField(value = "s_9",updateStrategy = FieldStrategy.IGNORED) + private Double s9; + + @TableField(value = "s_10",updateStrategy = FieldStrategy.IGNORED) + private Double s10; + + @TableField(value = "s_11",updateStrategy = FieldStrategy.IGNORED) + private Double s11; + + @TableField(value = "s_12",updateStrategy = FieldStrategy.IGNORED) + private Double s12; + + @TableField(value = "s_13",updateStrategy = FieldStrategy.IGNORED) + private Double s13; + + @TableField(value = "s_14",updateStrategy = FieldStrategy.IGNORED) + private Double s14; + + @TableField(value = "s_15",updateStrategy = FieldStrategy.IGNORED) + private Double s15; + + @TableField(value = "s_16",updateStrategy = FieldStrategy.IGNORED) + private Double s16; + + @TableField(value = "s_17",updateStrategy = FieldStrategy.IGNORED) + private Double s17; + + @TableField(value = "s_18",updateStrategy = FieldStrategy.IGNORED) + private Double s18; + + @TableField(value = "s_19",updateStrategy = FieldStrategy.IGNORED) + private Double s19; + + @TableField(value = "s_20",updateStrategy = FieldStrategy.IGNORED) + private Double s20; + + @TableField(value = "s_21",updateStrategy = FieldStrategy.IGNORED) + private Double s21; + + @TableField(value = "s_22",updateStrategy = FieldStrategy.IGNORED) + private Double s22; + + @TableField(value = "s_23",updateStrategy = FieldStrategy.IGNORED) + private Double s23; + + @TableField(value = "s_24",updateStrategy = FieldStrategy.IGNORED) + private Double s24; + + @TableField(value = "s_25",updateStrategy = FieldStrategy.IGNORED) + private Double s25; + + @TableField(value = "s_26",updateStrategy = FieldStrategy.IGNORED) + private Double s26; + + @TableField(value = "s_27",updateStrategy = FieldStrategy.IGNORED) + private Double s27; + + @TableField(value = "s_28",updateStrategy = FieldStrategy.IGNORED) + private Double s28; + + @TableField(value = "s_29",updateStrategy = FieldStrategy.IGNORED) + private Double s29; + + @TableField(value = "s_30",updateStrategy = FieldStrategy.IGNORED) + private Double s30; + + @TableField(value = "s_31",updateStrategy = FieldStrategy.IGNORED) + private Double s31; + + @TableField(value = "s_32",updateStrategy = FieldStrategy.IGNORED) + private Double s32; + + @TableField(value = "s_33",updateStrategy = FieldStrategy.IGNORED) + private Double s33; + + @TableField(value = "s_34",updateStrategy = FieldStrategy.IGNORED) + private Double s34; + + @TableField(value = "s_35",updateStrategy = FieldStrategy.IGNORED) + private Double s35; + + @TableField(value = "s_36",updateStrategy = FieldStrategy.IGNORED) + private Double s36; + + @TableField(value = "s_37",updateStrategy = FieldStrategy.IGNORED) + private Double s37; + + @TableField(value = "s_38",updateStrategy = FieldStrategy.IGNORED) + private Double s38; + + @TableField(value = "s_39",updateStrategy = FieldStrategy.IGNORED) + private Double s39; + + @TableField(value = "s_40",updateStrategy = FieldStrategy.IGNORED) + private Double s40; + + @TableField(value = "s_41",updateStrategy = FieldStrategy.IGNORED) + private Double s41; + + @TableField(value = "s_42",updateStrategy = FieldStrategy.IGNORED) + private Double s42; + + @TableField(value = "s_43",updateStrategy = FieldStrategy.IGNORED) + private Double s43; + + @TableField(value = "s_44",updateStrategy = FieldStrategy.IGNORED) + private Double s44; + + @TableField(value = "s_45",updateStrategy = FieldStrategy.IGNORED) + private Double s45; + + @TableField(value = "s_46",updateStrategy = FieldStrategy.IGNORED) + private Double s46; + + @TableField(value = "s_47",updateStrategy = FieldStrategy.IGNORED) + private Double s47; + + @TableField(value = "s_48",updateStrategy = FieldStrategy.IGNORED) + private Double s48; + + @TableField(value = "s_49",updateStrategy = FieldStrategy.IGNORED) + private Double s49; + + @TableField(value = "s_50",updateStrategy = FieldStrategy.IGNORED) + private Double s50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateID.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateID.java new file mode 100644 index 0000000..18b19f8 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateID.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMRATE_I_D") +public class RStatDataHarmRateID implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "i_1",updateStrategy = FieldStrategy.IGNORED) + private Double i1; + + @TableField(value = "i_2",updateStrategy = FieldStrategy.IGNORED) + private Double i2; + + @TableField(value = "i_3",updateStrategy = FieldStrategy.IGNORED) + private Double i3; + + @TableField(value = "i_4",updateStrategy = FieldStrategy.IGNORED) + private Double i4; + + @TableField(value = "i_5",updateStrategy = FieldStrategy.IGNORED) + private Double i5; + + @TableField(value = "i_6",updateStrategy = FieldStrategy.IGNORED) + private Double i6; + + @TableField(value = "i_7",updateStrategy = FieldStrategy.IGNORED) + private Double i7; + + @TableField(value = "i_8",updateStrategy = FieldStrategy.IGNORED) + private Double i8; + + @TableField(value = "i_9",updateStrategy = FieldStrategy.IGNORED) + private Double i9; + + @TableField(value = "i_10",updateStrategy = FieldStrategy.IGNORED) + private Double i10; + + @TableField(value = "i_11",updateStrategy = FieldStrategy.IGNORED) + private Double i11; + + @TableField(value = "i_12",updateStrategy = FieldStrategy.IGNORED) + private Double i12; + + @TableField(value = "i_13",updateStrategy = FieldStrategy.IGNORED) + private Double i13; + + @TableField(value = "i_14",updateStrategy = FieldStrategy.IGNORED) + private Double i14; + + @TableField(value = "i_15",updateStrategy = FieldStrategy.IGNORED) + private Double i15; + + @TableField(value = "i_16",updateStrategy = FieldStrategy.IGNORED) + private Double i16; + + @TableField(value = "i_17",updateStrategy = FieldStrategy.IGNORED) + private Double i17; + + @TableField(value = "i_18",updateStrategy = FieldStrategy.IGNORED) + private Double i18; + + @TableField(value = "i_19",updateStrategy = FieldStrategy.IGNORED) + private Double i19; + + @TableField(value = "i_20",updateStrategy = FieldStrategy.IGNORED) + private Double i20; + + @TableField(value = "i_21",updateStrategy = FieldStrategy.IGNORED) + private Double i21; + + @TableField(value = "i_22",updateStrategy = FieldStrategy.IGNORED) + private Double i22; + + @TableField(value = "i_23",updateStrategy = FieldStrategy.IGNORED) + private Double i23; + + @TableField(value = "i_24",updateStrategy = FieldStrategy.IGNORED) + private Double i24; + + @TableField(value = "i_25",updateStrategy = FieldStrategy.IGNORED) + private Double i25; + + @TableField(value = "i_26",updateStrategy = FieldStrategy.IGNORED) + private Double i26; + + @TableField(value = "i_27",updateStrategy = FieldStrategy.IGNORED) + private Double i27; + + @TableField(value = "i_28",updateStrategy = FieldStrategy.IGNORED) + private Double i28; + + @TableField(value = "i_29",updateStrategy = FieldStrategy.IGNORED) + private Double i29; + + @TableField(value = "i_30",updateStrategy = FieldStrategy.IGNORED) + private Double i30; + + @TableField(value = "i_31",updateStrategy = FieldStrategy.IGNORED) + private Double i31; + + @TableField(value = "i_32",updateStrategy = FieldStrategy.IGNORED) + private Double i32; + + @TableField(value = "i_33",updateStrategy = FieldStrategy.IGNORED) + private Double i33; + + @TableField(value = "i_34",updateStrategy = FieldStrategy.IGNORED) + private Double i34; + + @TableField(value = "i_35",updateStrategy = FieldStrategy.IGNORED) + private Double i35; + + @TableField(value = "i_36",updateStrategy = FieldStrategy.IGNORED) + private Double i36; + + @TableField(value = "i_37",updateStrategy = FieldStrategy.IGNORED) + private Double i37; + + @TableField(value = "i_38",updateStrategy = FieldStrategy.IGNORED) + private Double i38; + + @TableField(value = "i_39",updateStrategy = FieldStrategy.IGNORED) + private Double i39; + + @TableField(value = "i_40",updateStrategy = FieldStrategy.IGNORED) + private Double i40; + + @TableField(value = "i_41",updateStrategy = FieldStrategy.IGNORED) + private Double i41; + + @TableField(value = "i_42",updateStrategy = FieldStrategy.IGNORED) + private Double i42; + + @TableField(value = "i_43",updateStrategy = FieldStrategy.IGNORED) + private Double i43; + + @TableField(value = "i_44",updateStrategy = FieldStrategy.IGNORED) + private Double i44; + + @TableField(value = "i_45",updateStrategy = FieldStrategy.IGNORED) + private Double i45; + + @TableField(value = "i_46",updateStrategy = FieldStrategy.IGNORED) + private Double i46; + + @TableField(value = "i_47",updateStrategy = FieldStrategy.IGNORED) + private Double i47; + + @TableField(value = "i_48",updateStrategy = FieldStrategy.IGNORED) + private Double i48; + + @TableField(value = "i_49",updateStrategy = FieldStrategy.IGNORED) + private Double i49; + + @TableField(value = "i_50",updateStrategy = FieldStrategy.IGNORED) + private Double i50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateVD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateVD.java new file mode 100644 index 0000000..26c7aef --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataHarmRateVD.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_HARMRATE_V_D") +public class RStatDataHarmRateVD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "v_1",updateStrategy = FieldStrategy.IGNORED) + private Double v1; + + @TableField(value = "v_2",updateStrategy = FieldStrategy.IGNORED) + private Double v2; + + @TableField(value = "v_3",updateStrategy = FieldStrategy.IGNORED) + private Double v3; + + @TableField(value = "v_4",updateStrategy = FieldStrategy.IGNORED) + private Double v4; + + @TableField(value = "v_5",updateStrategy = FieldStrategy.IGNORED) + private Double v5; + + @TableField(value = "v_6",updateStrategy = FieldStrategy.IGNORED) + private Double v6; + + @TableField(value = "v_7",updateStrategy = FieldStrategy.IGNORED) + private Double v7; + + @TableField(value = "v_8",updateStrategy = FieldStrategy.IGNORED) + private Double v8; + + @TableField(value = "v_9",updateStrategy = FieldStrategy.IGNORED) + private Double v9; + + @TableField(value = "v_10",updateStrategy = FieldStrategy.IGNORED) + private Double v10; + + @TableField(value = "v_11",updateStrategy = FieldStrategy.IGNORED) + private Double v11; + + @TableField(value = "v_12",updateStrategy = FieldStrategy.IGNORED) + private Double v12; + + @TableField(value = "v_13",updateStrategy = FieldStrategy.IGNORED) + private Double v13; + + @TableField(value = "v_14",updateStrategy = FieldStrategy.IGNORED) + private Double v14; + + @TableField(value = "v_15",updateStrategy = FieldStrategy.IGNORED) + private Double v15; + + @TableField(value = "v_16",updateStrategy = FieldStrategy.IGNORED) + private Double v16; + + @TableField(value = "v_17",updateStrategy = FieldStrategy.IGNORED) + private Double v17; + + @TableField(value = "v_18",updateStrategy = FieldStrategy.IGNORED) + private Double v18; + + @TableField(value = "v_19",updateStrategy = FieldStrategy.IGNORED) + private Double v19; + + @TableField(value = "v_20",updateStrategy = FieldStrategy.IGNORED) + private Double v20; + + @TableField(value = "v_21",updateStrategy = FieldStrategy.IGNORED) + private Double v21; + + @TableField(value = "v_22",updateStrategy = FieldStrategy.IGNORED) + private Double v22; + + @TableField(value = "v_23",updateStrategy = FieldStrategy.IGNORED) + private Double v23; + + @TableField(value = "v_24",updateStrategy = FieldStrategy.IGNORED) + private Double v24; + + @TableField(value = "v_25",updateStrategy = FieldStrategy.IGNORED) + private Double v25; + + @TableField(value = "v_26",updateStrategy = FieldStrategy.IGNORED) + private Double v26; + + @TableField(value = "v_27",updateStrategy = FieldStrategy.IGNORED) + private Double v27; + + @TableField(value = "v_28",updateStrategy = FieldStrategy.IGNORED) + private Double v28; + + @TableField(value = "v_29",updateStrategy = FieldStrategy.IGNORED) + private Double v29; + + @TableField(value = "v_30",updateStrategy = FieldStrategy.IGNORED) + private Double v30; + + @TableField(value = "v_31",updateStrategy = FieldStrategy.IGNORED) + private Double v31; + + @TableField(value = "v_32",updateStrategy = FieldStrategy.IGNORED) + private Double v32; + + @TableField(value = "v_33",updateStrategy = FieldStrategy.IGNORED) + private Double v33; + + @TableField(value = "v_34",updateStrategy = FieldStrategy.IGNORED) + private Double v34; + + @TableField(value = "v_35",updateStrategy = FieldStrategy.IGNORED) + private Double v35; + + @TableField(value = "v_36",updateStrategy = FieldStrategy.IGNORED) + private Double v36; + + @TableField(value = "v_37",updateStrategy = FieldStrategy.IGNORED) + private Double v37; + + @TableField(value = "v_38",updateStrategy = FieldStrategy.IGNORED) + private Double v38; + + @TableField(value = "v_39",updateStrategy = FieldStrategy.IGNORED) + private Double v39; + + @TableField(value = "v_40",updateStrategy = FieldStrategy.IGNORED) + private Double v40; + + @TableField(value = "v_41",updateStrategy = FieldStrategy.IGNORED) + private Double v41; + + @TableField(value = "v_42",updateStrategy = FieldStrategy.IGNORED) + private Double v42; + + @TableField(value = "v_43",updateStrategy = FieldStrategy.IGNORED) + private Double v43; + + @TableField(value = "v_44",updateStrategy = FieldStrategy.IGNORED) + private Double v44; + + @TableField(value = "v_45",updateStrategy = FieldStrategy.IGNORED) + private Double v45; + + @TableField(value = "v_46",updateStrategy = FieldStrategy.IGNORED) + private Double v46; + + @TableField(value = "v_47",updateStrategy = FieldStrategy.IGNORED) + private Double v47; + + @TableField(value = "v_48",updateStrategy = FieldStrategy.IGNORED) + private Double v48; + + @TableField(value = "v_49",updateStrategy = FieldStrategy.IGNORED) + private Double v49; + + @TableField(value = "v_50",updateStrategy = FieldStrategy.IGNORED) + private Double v50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataID.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataID.java new file mode 100644 index 0000000..9670ee2 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataID.java @@ -0,0 +1,209 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "r_stat_data_i_d") +public class RStatDataID implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "i_neg",updateStrategy = FieldStrategy.IGNORED) + private Double iNeg; + + @TableField(value = "i_pos",updateStrategy = FieldStrategy.IGNORED) + private Double iPos; + + @TableField(value = "i_thd",updateStrategy = FieldStrategy.IGNORED) + private Double iThd; + + @TableField(value = "i_unbalance",updateStrategy = FieldStrategy.IGNORED) + private Double iUnbalance; + + @TableField(value = "i_zero",updateStrategy = FieldStrategy.IGNORED) + private Double iZero; + + @TableField(value = "rms",updateStrategy = FieldStrategy.IGNORED) + private Double rms; + + @TableField(value = "i_1",updateStrategy = FieldStrategy.IGNORED) + private Double i1; + + @TableField(value = "i_2",updateStrategy = FieldStrategy.IGNORED) + private Double i2; + + @TableField(value = "i_3",updateStrategy = FieldStrategy.IGNORED) + private Double i3; + + @TableField(value = "i_4",updateStrategy = FieldStrategy.IGNORED) + private Double i4; + + @TableField(value = "i_5",updateStrategy = FieldStrategy.IGNORED) + private Double i5; + + @TableField(value = "i_6",updateStrategy = FieldStrategy.IGNORED) + private Double i6; + + @TableField(value = "i_7",updateStrategy = FieldStrategy.IGNORED) + private Double i7; + + @TableField(value = "i_8",updateStrategy = FieldStrategy.IGNORED) + private Double i8; + + @TableField(value = "i_9",updateStrategy = FieldStrategy.IGNORED) + private Double i9; + + @TableField(value = "i_10",updateStrategy = FieldStrategy.IGNORED) + private Double i10; + + @TableField(value = "i_11",updateStrategy = FieldStrategy.IGNORED) + private Double i11; + + @TableField(value = "i_12",updateStrategy = FieldStrategy.IGNORED) + private Double i12; + + @TableField(value = "i_13",updateStrategy = FieldStrategy.IGNORED) + private Double i13; + + @TableField(value = "i_14",updateStrategy = FieldStrategy.IGNORED) + private Double i14; + + @TableField(value = "i_15",updateStrategy = FieldStrategy.IGNORED) + private Double i15; + + @TableField(value = "i_16",updateStrategy = FieldStrategy.IGNORED) + private Double i16; + + @TableField(value = "i_17",updateStrategy = FieldStrategy.IGNORED) + private Double i17; + + @TableField(value = "i_18",updateStrategy = FieldStrategy.IGNORED) + private Double i18; + + @TableField(value = "i_19",updateStrategy = FieldStrategy.IGNORED) + private Double i19; + + @TableField(value = "i_20",updateStrategy = FieldStrategy.IGNORED) + private Double i20; + + @TableField(value = "i_21",updateStrategy = FieldStrategy.IGNORED) + private Double i21; + + @TableField(value = "i_22",updateStrategy = FieldStrategy.IGNORED) + private Double i22; + + @TableField(value = "i_23",updateStrategy = FieldStrategy.IGNORED) + private Double i23; + + @TableField(value = "i_24",updateStrategy = FieldStrategy.IGNORED) + private Double i24; + + @TableField(value = "i_25",updateStrategy = FieldStrategy.IGNORED) + private Double i25; + + @TableField(value = "i_26",updateStrategy = FieldStrategy.IGNORED) + private Double i26; + + @TableField(value = "i_27",updateStrategy = FieldStrategy.IGNORED) + private Double i27; + + @TableField(value = "i_28",updateStrategy = FieldStrategy.IGNORED) + private Double i28; + + @TableField(value = "i_29",updateStrategy = FieldStrategy.IGNORED) + private Double i29; + + @TableField(value = "i_30",updateStrategy = FieldStrategy.IGNORED) + private Double i30; + + @TableField(value = "i_31",updateStrategy = FieldStrategy.IGNORED) + private Double i31; + + @TableField(value = "i_32",updateStrategy = FieldStrategy.IGNORED) + private Double i32; + + @TableField(value = "i_33",updateStrategy = FieldStrategy.IGNORED) + private Double i33; + + @TableField(value = "i_34",updateStrategy = FieldStrategy.IGNORED) + private Double i34; + + @TableField(value = "i_35",updateStrategy = FieldStrategy.IGNORED) + private Double i35; + + @TableField(value = "i_36",updateStrategy = FieldStrategy.IGNORED) + private Double i36; + + @TableField(value = "i_37",updateStrategy = FieldStrategy.IGNORED) + private Double i37; + + @TableField(value = "i_38",updateStrategy = FieldStrategy.IGNORED) + private Double i38; + + @TableField(value = "i_39",updateStrategy = FieldStrategy.IGNORED) + private Double i39; + + @TableField(value = "i_40",updateStrategy = FieldStrategy.IGNORED) + private Double i40; + + @TableField(value = "i_41",updateStrategy = FieldStrategy.IGNORED) + private Double i41; + + @TableField(value = "i_42",updateStrategy = FieldStrategy.IGNORED) + private Double i42; + + @TableField(value = "i_43",updateStrategy = FieldStrategy.IGNORED) + private Double i43; + + @TableField(value = "i_44",updateStrategy = FieldStrategy.IGNORED) + private Double i44; + + @TableField(value = "i_45",updateStrategy = FieldStrategy.IGNORED) + private Double i45; + + @TableField(value = "i_46",updateStrategy = FieldStrategy.IGNORED) + private Double i46; + + @TableField(value = "i_47",updateStrategy = FieldStrategy.IGNORED) + private Double i47; + + @TableField(value = "i_48",updateStrategy = FieldStrategy.IGNORED) + private Double i48; + + @TableField(value = "i_49",updateStrategy = FieldStrategy.IGNORED) + private Double i49; + + @TableField(value = "i_50",updateStrategy = FieldStrategy.IGNORED) + private Double i50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmID.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmID.java new file mode 100644 index 0000000..2919137 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmID.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_INHARM_I_D") +public class RStatDataInHarmID implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "i_1",updateStrategy = FieldStrategy.IGNORED) + private Double i1; + + @TableField(value = "i_2",updateStrategy = FieldStrategy.IGNORED) + private Double i2; + + @TableField(value = "i_3",updateStrategy = FieldStrategy.IGNORED) + private Double i3; + + @TableField(value = "i_4",updateStrategy = FieldStrategy.IGNORED) + private Double i4; + + @TableField(value = "i_5",updateStrategy = FieldStrategy.IGNORED) + private Double i5; + + @TableField(value = "i_6",updateStrategy = FieldStrategy.IGNORED) + private Double i6; + + @TableField(value = "i_7",updateStrategy = FieldStrategy.IGNORED) + private Double i7; + + @TableField(value = "i_8",updateStrategy = FieldStrategy.IGNORED) + private Double i8; + + @TableField(value = "i_9",updateStrategy = FieldStrategy.IGNORED) + private Double i9; + + @TableField(value = "i_10",updateStrategy = FieldStrategy.IGNORED) + private Double i10; + + @TableField(value = "i_11",updateStrategy = FieldStrategy.IGNORED) + private Double i11; + + @TableField(value = "i_12",updateStrategy = FieldStrategy.IGNORED) + private Double i12; + + @TableField(value = "i_13",updateStrategy = FieldStrategy.IGNORED) + private Double i13; + + @TableField(value = "i_14",updateStrategy = FieldStrategy.IGNORED) + private Double i14; + + @TableField(value = "i_15",updateStrategy = FieldStrategy.IGNORED) + private Double i15; + + @TableField(value = "i_16",updateStrategy = FieldStrategy.IGNORED) + private Double i16; + + @TableField(value = "i_17",updateStrategy = FieldStrategy.IGNORED) + private Double i17; + + @TableField(value = "i_18",updateStrategy = FieldStrategy.IGNORED) + private Double i18; + + @TableField(value = "i_19",updateStrategy = FieldStrategy.IGNORED) + private Double i19; + + @TableField(value = "i_20",updateStrategy = FieldStrategy.IGNORED) + private Double i20; + + @TableField(value = "i_21",updateStrategy = FieldStrategy.IGNORED) + private Double i21; + + @TableField(value = "i_22",updateStrategy = FieldStrategy.IGNORED) + private Double i22; + + @TableField(value = "i_23",updateStrategy = FieldStrategy.IGNORED) + private Double i23; + + @TableField(value = "i_24",updateStrategy = FieldStrategy.IGNORED) + private Double i24; + + @TableField(value = "i_25",updateStrategy = FieldStrategy.IGNORED) + private Double i25; + + @TableField(value = "i_26",updateStrategy = FieldStrategy.IGNORED) + private Double i26; + + @TableField(value = "i_27",updateStrategy = FieldStrategy.IGNORED) + private Double i27; + + @TableField(value = "i_28",updateStrategy = FieldStrategy.IGNORED) + private Double i28; + + @TableField(value = "i_29",updateStrategy = FieldStrategy.IGNORED) + private Double i29; + + @TableField(value = "i_30",updateStrategy = FieldStrategy.IGNORED) + private Double i30; + + @TableField(value = "i_31",updateStrategy = FieldStrategy.IGNORED) + private Double i31; + + @TableField(value = "i_32",updateStrategy = FieldStrategy.IGNORED) + private Double i32; + + @TableField(value = "i_33",updateStrategy = FieldStrategy.IGNORED) + private Double i33; + + @TableField(value = "i_34",updateStrategy = FieldStrategy.IGNORED) + private Double i34; + + @TableField(value = "i_35",updateStrategy = FieldStrategy.IGNORED) + private Double i35; + + @TableField(value = "i_36",updateStrategy = FieldStrategy.IGNORED) + private Double i36; + + @TableField(value = "i_37",updateStrategy = FieldStrategy.IGNORED) + private Double i37; + + @TableField(value = "i_38",updateStrategy = FieldStrategy.IGNORED) + private Double i38; + + @TableField(value = "i_39",updateStrategy = FieldStrategy.IGNORED) + private Double i39; + + @TableField(value = "i_40",updateStrategy = FieldStrategy.IGNORED) + private Double i40; + + @TableField(value = "i_41",updateStrategy = FieldStrategy.IGNORED) + private Double i41; + + @TableField(value = "i_42",updateStrategy = FieldStrategy.IGNORED) + private Double i42; + + @TableField(value = "i_43",updateStrategy = FieldStrategy.IGNORED) + private Double i43; + + @TableField(value = "i_44",updateStrategy = FieldStrategy.IGNORED) + private Double i44; + + @TableField(value = "i_45",updateStrategy = FieldStrategy.IGNORED) + private Double i45; + + @TableField(value = "i_46",updateStrategy = FieldStrategy.IGNORED) + private Double i46; + + @TableField(value = "i_47",updateStrategy = FieldStrategy.IGNORED) + private Double i47; + + @TableField(value = "i_48",updateStrategy = FieldStrategy.IGNORED) + private Double i48; + + @TableField(value = "i_49",updateStrategy = FieldStrategy.IGNORED) + private Double i49; + + @TableField(value = "i_50",updateStrategy = FieldStrategy.IGNORED) + private Double i50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmVD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmVD.java new file mode 100644 index 0000000..9c221d3 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataInHarmVD.java @@ -0,0 +1,191 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_INHARM_V_D") +public class RStatDataInHarmVD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "v_1",updateStrategy = FieldStrategy.IGNORED) + private Double v1; + + @TableField(value = "v_2",updateStrategy = FieldStrategy.IGNORED) + private Double v2; + + @TableField(value = "v_3",updateStrategy = FieldStrategy.IGNORED) + private Double v3; + + @TableField(value = "v_4",updateStrategy = FieldStrategy.IGNORED) + private Double v4; + + @TableField(value = "v_5",updateStrategy = FieldStrategy.IGNORED) + private Double v5; + + @TableField(value = "v_6",updateStrategy = FieldStrategy.IGNORED) + private Double v6; + + @TableField(value = "v_7",updateStrategy = FieldStrategy.IGNORED) + private Double v7; + + @TableField(value = "v_8",updateStrategy = FieldStrategy.IGNORED) + private Double v8; + + @TableField(value = "v_9",updateStrategy = FieldStrategy.IGNORED) + private Double v9; + + @TableField(value = "v_10",updateStrategy = FieldStrategy.IGNORED) + private Double v10; + + @TableField(value = "v_11",updateStrategy = FieldStrategy.IGNORED) + private Double v11; + + @TableField(value = "v_12",updateStrategy = FieldStrategy.IGNORED) + private Double v12; + + @TableField(value = "v_13",updateStrategy = FieldStrategy.IGNORED) + private Double v13; + + @TableField(value = "v_14",updateStrategy = FieldStrategy.IGNORED) + private Double v14; + + @TableField(value = "v_15",updateStrategy = FieldStrategy.IGNORED) + private Double v15; + + @TableField(value = "v_16",updateStrategy = FieldStrategy.IGNORED) + private Double v16; + + @TableField(value = "v_17",updateStrategy = FieldStrategy.IGNORED) + private Double v17; + + @TableField(value = "v_18",updateStrategy = FieldStrategy.IGNORED) + private Double v18; + + @TableField(value = "v_19",updateStrategy = FieldStrategy.IGNORED) + private Double v19; + + @TableField(value = "v_20",updateStrategy = FieldStrategy.IGNORED) + private Double v20; + + @TableField(value = "v_21",updateStrategy = FieldStrategy.IGNORED) + private Double v21; + + @TableField(value = "v_22",updateStrategy = FieldStrategy.IGNORED) + private Double v22; + + @TableField(value = "v_23",updateStrategy = FieldStrategy.IGNORED) + private Double v23; + + @TableField(value = "v_24",updateStrategy = FieldStrategy.IGNORED) + private Double v24; + + @TableField(value = "v_25",updateStrategy = FieldStrategy.IGNORED) + private Double v25; + + @TableField(value = "v_26",updateStrategy = FieldStrategy.IGNORED) + private Double v26; + + @TableField(value = "v_27",updateStrategy = FieldStrategy.IGNORED) + private Double v27; + + @TableField(value = "v_28",updateStrategy = FieldStrategy.IGNORED) + private Double v28; + + @TableField(value = "v_29",updateStrategy = FieldStrategy.IGNORED) + private Double v29; + + @TableField(value = "v_30",updateStrategy = FieldStrategy.IGNORED) + private Double v30; + + @TableField(value = "v_31",updateStrategy = FieldStrategy.IGNORED) + private Double v31; + + @TableField(value = "v_32",updateStrategy = FieldStrategy.IGNORED) + private Double v32; + + @TableField(value = "v_33",updateStrategy = FieldStrategy.IGNORED) + private Double v33; + + @TableField(value = "v_34",updateStrategy = FieldStrategy.IGNORED) + private Double v34; + + @TableField(value = "v_35",updateStrategy = FieldStrategy.IGNORED) + private Double v35; + + @TableField(value = "v_36",updateStrategy = FieldStrategy.IGNORED) + private Double v36; + + @TableField(value = "v_37",updateStrategy = FieldStrategy.IGNORED) + private Double v37; + + @TableField(value = "v_38",updateStrategy = FieldStrategy.IGNORED) + private Double v38; + + @TableField(value = "v_39",updateStrategy = FieldStrategy.IGNORED) + private Double v39; + + @TableField(value = "v_40",updateStrategy = FieldStrategy.IGNORED) + private Double v40; + + @TableField(value = "v_41",updateStrategy = FieldStrategy.IGNORED) + private Double v41; + + @TableField(value = "v_42",updateStrategy = FieldStrategy.IGNORED) + private Double v42; + + @TableField(value = "v_43",updateStrategy = FieldStrategy.IGNORED) + private Double v43; + + @TableField(value = "v_44",updateStrategy = FieldStrategy.IGNORED) + private Double v44; + + @TableField(value = "v_45",updateStrategy = FieldStrategy.IGNORED) + private Double v45; + + @TableField(value = "v_46",updateStrategy = FieldStrategy.IGNORED) + private Double v46; + + @TableField(value = "v_47",updateStrategy = FieldStrategy.IGNORED) + private Double v47; + + @TableField(value = "v_48",updateStrategy = FieldStrategy.IGNORED) + private Double v48; + + @TableField(value = "v_49",updateStrategy = FieldStrategy.IGNORED) + private Double v49; + + @TableField(value = "v_50",updateStrategy = FieldStrategy.IGNORED) + private Double v50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataPltD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataPltD.java new file mode 100644 index 0000000..5fa10aa --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataPltD.java @@ -0,0 +1,44 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "R_STAT_DATA_PLT_D") +public class RStatDataPltD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "plt",updateStrategy = FieldStrategy.IGNORED) + private Double plt; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataVD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataVD.java new file mode 100644 index 0000000..6dd6e76 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatDataVD.java @@ -0,0 +1,224 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 类的介绍: + * + * @author xy + * @version 1.0.0 + */ +@Data +@TableName(value = "r_stat_data_v_d") +public class RStatDataVD implements Serializable { + + @MppMultiId + @TableField(value = "time") + private LocalDate time; + + @MppMultiId + @TableField(value = "line_id") + private String lineId; + + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + @MppMultiId + @TableField(value = "value_type") + private String valueType; + + @TableField(value = "quality_flag") + private Integer qualityFlag; + + @TableField(value = "freq",updateStrategy = FieldStrategy.IGNORED) + private Double freq; + + @TableField(value = "freq_dev",updateStrategy = FieldStrategy.IGNORED) + private Double freqDev; + + @TableField(value = "rms",updateStrategy = FieldStrategy.IGNORED) + private Double rms; + + @TableField(value = "rms_lvr",updateStrategy = FieldStrategy.IGNORED) + private Double rmsLvr; + + @TableField(value = "v_neg",updateStrategy = FieldStrategy.IGNORED) + private Double vNeg; + + @TableField(value = "v_pos",updateStrategy = FieldStrategy.IGNORED) + private Double vPos; + + @TableField(value = "v_thd",updateStrategy = FieldStrategy.IGNORED) + private Double vThd; + + @TableField(value = "v_unbalance",updateStrategy = FieldStrategy.IGNORED) + private Double vUnbalance; + + @TableField(value = "v_zero",updateStrategy = FieldStrategy.IGNORED) + private Double vZero; + + @TableField(value = "vl_dev",updateStrategy = FieldStrategy.IGNORED) + private Double vlDev; + + @TableField(value = "vu_dev",updateStrategy = FieldStrategy.IGNORED) + private Double vuDev; + + @TableField(value = "v_1",updateStrategy = FieldStrategy.IGNORED) + private Double v1; + + @TableField(value = "v_2",updateStrategy = FieldStrategy.IGNORED) + private Double v2; + + @TableField(value = "v_3",updateStrategy = FieldStrategy.IGNORED) + private Double v3; + + @TableField(value = "v_4",updateStrategy = FieldStrategy.IGNORED) + private Double v4; + + @TableField(value = "v_5",updateStrategy = FieldStrategy.IGNORED) + private Double v5; + + @TableField(value = "v_6",updateStrategy = FieldStrategy.IGNORED) + private Double v6; + + @TableField(value = "v_7",updateStrategy = FieldStrategy.IGNORED) + private Double v7; + + @TableField(value = "v_8",updateStrategy = FieldStrategy.IGNORED) + private Double v8; + + @TableField(value = "v_9",updateStrategy = FieldStrategy.IGNORED) + private Double v9; + + @TableField(value = "v_10",updateStrategy = FieldStrategy.IGNORED) + private Double v10; + + @TableField(value = "v_11",updateStrategy = FieldStrategy.IGNORED) + private Double v11; + + @TableField(value = "v_12",updateStrategy = FieldStrategy.IGNORED) + private Double v12; + + @TableField(value = "v_13",updateStrategy = FieldStrategy.IGNORED) + private Double v13; + + @TableField(value = "v_14",updateStrategy = FieldStrategy.IGNORED) + private Double v14; + + @TableField(value = "v_15",updateStrategy = FieldStrategy.IGNORED) + private Double v15; + + @TableField(value = "v_16",updateStrategy = FieldStrategy.IGNORED) + private Double v16; + + @TableField(value = "v_17",updateStrategy = FieldStrategy.IGNORED) + private Double v17; + + @TableField(value = "v_18",updateStrategy = FieldStrategy.IGNORED) + private Double v18; + + @TableField(value = "v_19",updateStrategy = FieldStrategy.IGNORED) + private Double v19; + + @TableField(value = "v_20",updateStrategy = FieldStrategy.IGNORED) + private Double v20; + + @TableField(value = "v_21",updateStrategy = FieldStrategy.IGNORED) + private Double v21; + + @TableField(value = "v_22",updateStrategy = FieldStrategy.IGNORED) + private Double v22; + + @TableField(value = "v_23",updateStrategy = FieldStrategy.IGNORED) + private Double v23; + + @TableField(value = "v_24",updateStrategy = FieldStrategy.IGNORED) + private Double v24; + + @TableField(value = "v_25",updateStrategy = FieldStrategy.IGNORED) + private Double v25; + + @TableField(value = "v_26",updateStrategy = FieldStrategy.IGNORED) + private Double v26; + + @TableField(value = "v_27",updateStrategy = FieldStrategy.IGNORED) + private Double v27; + + @TableField(value = "v_28",updateStrategy = FieldStrategy.IGNORED) + private Double v28; + + @TableField(value = "v_29",updateStrategy = FieldStrategy.IGNORED) + private Double v29; + + @TableField(value = "v_30",updateStrategy = FieldStrategy.IGNORED) + private Double v30; + + @TableField(value = "v_31",updateStrategy = FieldStrategy.IGNORED) + private Double v31; + + @TableField(value = "v_32",updateStrategy = FieldStrategy.IGNORED) + private Double v32; + + @TableField(value = "v_33",updateStrategy = FieldStrategy.IGNORED) + private Double v33; + + @TableField(value = "v_34",updateStrategy = FieldStrategy.IGNORED) + private Double v34; + + @TableField(value = "v_35",updateStrategy = FieldStrategy.IGNORED) + private Double v35; + + @TableField(value = "v_36",updateStrategy = FieldStrategy.IGNORED) + private Double v36; + + @TableField(value = "v_37",updateStrategy = FieldStrategy.IGNORED) + private Double v37; + + @TableField(value = "v_38",updateStrategy = FieldStrategy.IGNORED) + private Double v38; + + @TableField(value = "v_39",updateStrategy = FieldStrategy.IGNORED) + private Double v39; + + @TableField(value = "v_40",updateStrategy = FieldStrategy.IGNORED) + private Double v40; + + @TableField(value = "v_41",updateStrategy = FieldStrategy.IGNORED) + private Double v41; + + @TableField(value = "v_42",updateStrategy = FieldStrategy.IGNORED) + private Double v42; + + @TableField(value = "v_43",updateStrategy = FieldStrategy.IGNORED) + private Double v43; + + @TableField(value = "v_44",updateStrategy = FieldStrategy.IGNORED) + private Double v44; + + @TableField(value = "v_45",updateStrategy = FieldStrategy.IGNORED) + private Double v45; + + @TableField(value = "v_46",updateStrategy = FieldStrategy.IGNORED) + private Double v46; + + @TableField(value = "v_47",updateStrategy = FieldStrategy.IGNORED) + private Double v47; + + @TableField(value = "v_48",updateStrategy = FieldStrategy.IGNORED) + private Double v48; + + @TableField(value = "v_49",updateStrategy = FieldStrategy.IGNORED) + private Double v49; + + @TableField(value = "v_50",updateStrategy = FieldStrategy.IGNORED) + private Double v50; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatIntegrityD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatIntegrityD.java new file mode 100644 index 0000000..a21066a --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatIntegrityD.java @@ -0,0 +1,43 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +/** + *

+ * 数据完整性日表 + *

+ * + * @author hongawen + * @since 2023-03-28 + */ +@Data +@TableName("r_stat_integrity_d") +public class RStatIntegrityD { + + private static final long serialVersionUID = 1L; + + @MppMultiId + @TableField(value = "time_id") + private String timeId; + + @MppMultiId + @TableField(value = "line_index") + private String lineIndex; + + /** + * 应收数量 + */ + @TableField(value = "due_time") + private Integer dueTime; + /** + * 实收数量 + */ + @TableField(value = "real_time") + private Integer realTime; + + + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitQualifiedD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitQualifiedD.java new file mode 100644 index 0000000..ca77e61 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitQualifiedD.java @@ -0,0 +1,450 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName(value = "r_stat_limit_qualified_d") +public class RStatLimitQualifiedD implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + @MppMultiId + @TableField(value = "my_index") + private String lineId; + + /** + * 合格率时间 + */ + @MppMultiId + @TableField(value = "time_id") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private String time; + + + /** + * 闪变越限次数 + */ + @TableField(value = "flicker_overtime") + private Double flickerOvertime; + + + /** + * 频率偏差越限次数 + */ + @TableField(value = "freq_dev_overtime") + private Double freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + @TableField(value = "voltage_dev_overtime") + private Double voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + @TableField(value = "ubalance_overtime") + private Double ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + @TableField(value = "uaberrance_overtime") + private Double uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + @TableField(value = "i_neg_overtime") + private Double iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_2_overtime") + private Double uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_3_overtime") + private Double uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_4_overtime") + private Double uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_5_overtime") + private Double uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_6_overtime") + private Double uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_7_overtime") + private Double uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_8_overtime") + private Double uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_9_overtime") + private Double uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_10_overtime") + private Double uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_11_overtime") + private Double uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_12_overtime") + private Double uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_13_overtime") + private Double uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_14_overtime") + private Double uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_15_overtime") + private Double uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_16_overtime") + private Double uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_17_overtime") + private Double uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_18_overtime") + private Double uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_19_overtime") + private Double uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_20_overtime") + private Double uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_21_overtime") + private Double uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_22_overtime") + private Double uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_23_overtime") + private Double uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_24_overtime") + private Double uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_25_overtime") + private Double uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_2_overtime") + private Double iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_3_overtime") + private Double iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_4_overtime") + private Double iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_5_overtime") + private Double iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_6_overtime") + private Double iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_7_overtime") + private Double iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_8_overtime") + private Double iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_9_overtime") + private Double iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_10_overtime") + private Double iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_11_overtime") + private Double iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_12_overtime") + private Double iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_13_overtime") + private Double iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_14_overtime") + private Double iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_15_overtime") + private Double iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_16_overtime") + private Double iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_17_overtime") + private Double iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_18_overtime") + private Double iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_19_overtime") + private Double iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_20_overtime") + private Double iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_21_overtime") + private Double iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_22_overtime") + private Double iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_23_overtime") + private Double iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_24_overtime") + private Double iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_25_overtime") + private Double iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_1_overtime") + private Double inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_2_overtime") + private Double inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_3_overtime") + private Double inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_4_overtime") + private Double inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_5_overtime") + private Double inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_6_overtime") + private Double inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_7_overtime") + private Double inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_8_overtime") + private Double inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_9_overtime") + private Double inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_10_overtime") + private Double inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_11_overtime") + private Double inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_12_overtime") + private Double inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_13_overtime") + private Double inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_14_overtime") + private Double inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_15_overtime") + private Double inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_16_overtime") + private Double inuharm16Overtime; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateD.java new file mode 100644 index 0000000..bba4a9d --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateD.java @@ -0,0 +1,468 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@TableName(value = "r_stat_limit_rate_d") +public class RStatLimitRateD implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + @MppMultiId + @TableField(value = "my_index") + private String lineId; + + /** + * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 + */ + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + /** + * 合格率时间 + */ + @MppMultiId + @TableField(value = "time_id") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate time; + + /** + * 总计算次数 + */ + @TableField(value = "all_time") + private Integer allTime; + + /** + * 闪变越限次数 + */ + @TableField(value = "flicker_overtime") + private Integer flickerOvertime; + + /** + * 闪变总计算次数 + */ + @TableField(value = "flicker_all_time") + private Integer flickerAllTime; + + /** + * 频率偏差越限次数 + */ + @TableField(value = "freq_dev_overtime") + private Integer freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + @TableField(value = "voltage_dev_overtime") + private Integer voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + @TableField(value = "ubalance_overtime") + private Integer ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + @TableField(value = "uaberrance_overtime") + private Integer uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + @TableField(value = "i_neg_overtime") + private Integer iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_2_overtime") + private Integer uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_3_overtime") + private Integer uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_4_overtime") + private Integer uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_5_overtime") + private Integer uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_6_overtime") + private Integer uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_7_overtime") + private Integer uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_8_overtime") + private Integer uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_9_overtime") + private Integer uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_10_overtime") + private Integer uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_11_overtime") + private Integer uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_12_overtime") + private Integer uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_13_overtime") + private Integer uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_14_overtime") + private Integer uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_15_overtime") + private Integer uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_16_overtime") + private Integer uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_17_overtime") + private Integer uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_18_overtime") + private Integer uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_19_overtime") + private Integer uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_20_overtime") + private Integer uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_21_overtime") + private Integer uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_22_overtime") + private Integer uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_23_overtime") + private Integer uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_24_overtime") + private Integer uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_25_overtime") + private Integer uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_2_overtime") + private Integer iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_3_overtime") + private Integer iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_4_overtime") + private Integer iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_5_overtime") + private Integer iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_6_overtime") + private Integer iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_7_overtime") + private Integer iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_8_overtime") + private Integer iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_9_overtime") + private Integer iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_10_overtime") + private Integer iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_11_overtime") + private Integer iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_12_overtime") + private Integer iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_13_overtime") + private Integer iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_14_overtime") + private Integer iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_15_overtime") + private Integer iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_16_overtime") + private Integer iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_17_overtime") + private Integer iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_18_overtime") + private Integer iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_19_overtime") + private Integer iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_20_overtime") + private Integer iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_21_overtime") + private Integer iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_22_overtime") + private Integer iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_23_overtime") + private Integer iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_24_overtime") + private Integer iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_25_overtime") + private Integer iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_1_overtime") + private Integer inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_2_overtime") + private Integer inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_3_overtime") + private Integer inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_4_overtime") + private Integer inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_5_overtime") + private Integer inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_6_overtime") + private Integer inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_7_overtime") + private Integer inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_8_overtime") + private Integer inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_9_overtime") + private Integer inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_10_overtime") + private Integer inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_11_overtime") + private Integer inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_12_overtime") + private Integer inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_13_overtime") + private Integer inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_14_overtime") + private Integer inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_15_overtime") + private Integer inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_16_overtime") + private Integer inuharm16Overtime; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateDetailD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateDetailD.java new file mode 100644 index 0000000..22a1c46 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitRateDetailD.java @@ -0,0 +1,450 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@TableName(value = "r_stat_limit_rate_detail_d") +public class RStatLimitRateDetailD implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + @MppMultiId + @TableField(value = "my_index") + private String lineId; + + /** + * 合格率时间 + */ + @MppMultiId + @TableField(value = "time_id") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate time; + + /** + * 闪变越限次数 + */ + @TableField(value = "flicker_overtime") + private String flickerOvertime; + + + /** + * 频率偏差越限次数 + */ + @TableField(value = "freq_dev_overtime") + private String freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + @TableField(value = "voltage_dev_overtime") + private String voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + @TableField(value = "ubalance_overtime") + private String ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + @TableField(value = "uaberrance_overtime") + private String uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + @TableField(value = "i_neg_overtime") + private String iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_2_overtime") + private String uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_3_overtime") + private String uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_4_overtime") + private String uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_5_overtime") + private String uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_6_overtime") + private String uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_7_overtime") + private String uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_8_overtime") + private String uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_9_overtime") + private String uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_10_overtime") + private String uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_11_overtime") + private String uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_12_overtime") + private String uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_13_overtime") + private String uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_14_overtime") + private String uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_15_overtime") + private String uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_16_overtime") + private String uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_17_overtime") + private String uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_18_overtime") + private String uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_19_overtime") + private String uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_20_overtime") + private String uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_21_overtime") + private String uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_22_overtime") + private String uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_23_overtime") + private String uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_24_overtime") + private String uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_25_overtime") + private String uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_2_overtime") + private String iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_3_overtime") + private String iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_4_overtime") + private String iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_5_overtime") + private String iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_6_overtime") + private String iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_7_overtime") + private String iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_8_overtime") + private String iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_9_overtime") + private String iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_10_overtime") + private String iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_11_overtime") + private String iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_12_overtime") + private String iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_13_overtime") + private String iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_14_overtime") + private String iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_15_overtime") + private String iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_16_overtime") + private String iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_17_overtime") + private String iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_18_overtime") + private String iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_19_overtime") + private String iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_20_overtime") + private String iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_21_overtime") + private String iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_22_overtime") + private String iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_23_overtime") + private String iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_24_overtime") + private String iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_25_overtime") + private String iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_1_overtime") + private String inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_2_overtime") + private String inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_3_overtime") + private String inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_4_overtime") + private String inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_5_overtime") + private String inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_6_overtime") + private String inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_7_overtime") + private String inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_8_overtime") + private String inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_9_overtime") + private String inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_10_overtime") + private String inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_11_overtime") + private String inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_12_overtime") + private String inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_13_overtime") + private String inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_14_overtime") + private String inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_15_overtime") + private String inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_16_overtime") + private String inuharm16Overtime; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitTargetD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitTargetD.java new file mode 100644 index 0000000..8032809 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatLimitTargetD.java @@ -0,0 +1,469 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_limit_target_d") +public class RStatLimitTargetD { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + @MppMultiId + @TableField(value = "my_index") + private String lineId; + + /** + * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 + */ + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + /** + * 合格率时间 + */ + @MppMultiId + @TableField(value = "time_id") + private LocalDate time; + + /** + * 总计算次数 + */ + @TableField(value = "all_time") + private Integer allTime; + + /** + * 闪变总计算次数 + */ + @TableField(value = "flicker_all_time") + private Integer flickerAllTime; + + /** + * 闪变越限次数 + */ + @TableField(value = "flicker_overtime") + private Integer flickerOvertime; + + /** + * 频率偏差越限次数 + */ + @TableField(value = "freq_dev_overtime") + private Integer freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + @TableField(value = "voltage_dev_overtime") + private Integer voltageDevOvertime; + + /** + * 电压不平衡度越限次数 + */ + @TableField(value = "ubalance_overtime") + private Integer ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + @TableField(value = "uaberrance_overtime") + private Integer uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + @TableField(value = "i_neg_overtime") + private Integer iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_2_overtime") + private Integer uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_3_overtime") + private Integer uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_4_overtime") + private Integer uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_5_overtime") + private Integer uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_6_overtime") + private Integer uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_7_overtime") + private Integer uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_8_overtime") + private Integer uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_9_overtime") + private Integer uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_10_overtime") + private Integer uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_11_overtime") + private Integer uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_12_overtime") + private Integer uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_13_overtime") + private Integer uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_14_overtime") + private Integer uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_15_overtime") + private Integer uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_16_overtime") + private Integer uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_17_overtime") + private Integer uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_18_overtime") + private Integer uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_19_overtime") + private Integer uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_20_overtime") + private Integer uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_21_overtime") + private Integer uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_22_overtime") + private Integer uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_23_overtime") + private Integer uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_24_overtime") + private Integer uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_25_overtime") + private Integer uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_2_overtime") + private Integer iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_3_overtime") + private Integer iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_4_overtime") + private Integer iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_5_overtime") + private Integer iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_6_overtime") + private Integer iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_7_overtime") + private Integer iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_8_overtime") + private Integer iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_9_overtime") + private Integer iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_10_overtime") + private Integer iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_11_overtime") + private Integer iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_12_overtime") + private Integer iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_13_overtime") + private Integer iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_14_overtime") + private Integer iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_15_overtime") + private Integer iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_16_overtime") + private Integer iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_17_overtime") + private Integer iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_18_overtime") + private Integer iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_19_overtime") + private Integer iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_20_overtime") + private Integer iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_21_overtime") + private Integer iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_22_overtime") + private Integer iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_23_overtime") + private Integer iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_24_overtime") + private Integer iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_25_overtime") + private Integer iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_1_overtime") + private Integer inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_2_overtime") + private Integer inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_3_overtime") + private Integer inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_4_overtime") + private Integer inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_5_overtime") + private Integer inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_6_overtime") + private Integer inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_7_overtime") + private Integer inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_8_overtime") + private Integer inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_9_overtime") + private Integer inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_10_overtime") + private Integer inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_11_overtime") + private Integer inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_12_overtime") + private Integer inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_13_overtime") + private Integer inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_14_overtime") + private Integer inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_15_overtime") + private Integer inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_16_overtime") + private Integer inuharm16Overtime; +} \ No newline at end of file diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOnlineRateD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOnlineRateD.java new file mode 100644 index 0000000..4d406c9 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOnlineRateD.java @@ -0,0 +1,45 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +/** + * @Description: 在线率日表 + * @Author: wr + * @Date: 2025/3/10 11:28 + */ +@Data +@TableName("r_stat_onlinerate_d") +public class RStatOnlineRateD { + + private static final long serialVersionUID = 1L; + + /** + * 日期 + */ + @MppMultiId + @TableField(value = "time_id") + private String timeId; + + /** + * 装置id + */ + @MppMultiId + @TableField(value = "dev_index") + private String devIndex; + + /** + * 在线条数 + */ + @TableField(value = "online_min") + private Integer onlineMin; + + /** + * 离线条数 + */ + @TableField(value = "offline_min") + private Integer offlineMin; + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOrgIntegrityD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOrgIntegrityD.java new file mode 100644 index 0000000..db9b0be --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatOrgIntegrityD.java @@ -0,0 +1,42 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +/** + *

+ * 数据完整性日表 + *

+ * + * @author hongawen + * @since 2023-03-28 + */ +@Data +@TableName("r_stat_org_integrity_d") +public class RStatOrgIntegrityD { + + private static final long serialVersionUID = 1L; + + @MppMultiId + @TableField(value = "time_id") + private String timeId; + + @MppMultiId + @TableField(value = "org_id") + private String orgId; + + /** + * 应收数量 + */ + @TableField(value = "due_time") + private Integer dueTime; + /** + * 实收数量 + */ + @TableField(value = "real_time") + private Integer realTime; + + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgD.java new file mode 100644 index 0000000..8fb312c --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgD.java @@ -0,0 +1,54 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 单位污区图统计日表 + * @Author: wr + * @Date: 2025/3/19 14:15 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_org_d") +public class RStatPollutionOrgD implements Serializable { + /** + * 单位id + */ + @MppMultiId(value = "org_id") + @ApiModelProperty(value="单位id") + private String orgId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgM.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgM.java new file mode 100644 index 0000000..dec4f55 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgM.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 单位污区图统计月表 + * @Author: wr + * @Date: 2025/3/19 14:15 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_org_m") +public class RStatPollutionOrgM implements Serializable { + /** + * 单位id + */ + @MppMultiId(value = "org_id") + @ApiModelProperty(value="单位id") + private String orgId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgQ.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgQ.java new file mode 100644 index 0000000..0bd6220 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgQ.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 单位污区图统计季表 + * @Author: wr + * @Date: 2025/3/19 14:15 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_org_q") +public class RStatPollutionOrgQ implements Serializable { + /** + * 单位id + */ + @MppMultiId(value = "org_id") + @ApiModelProperty(value="单位id") + private String orgId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgY.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgY.java new file mode 100644 index 0000000..22ec324 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionOrgY.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 单位污区图统计年表 + * @Author: wr + * @Date: 2025/3/19 14:15 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_org_y") +public class RStatPollutionOrgY implements Serializable { + /** + * 单位id + */ + @MppMultiId(value = "org_id") + @ApiModelProperty(value="单位id") + private String orgId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationD.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationD.java new file mode 100644 index 0000000..78aac31 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationD.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 变电站污区图统计日表 + * @Author: wr + * @Date: 2025/3/19 14:16 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_substation_d") +public class RStatPollutionSubstationD implements Serializable { + /** + * 变电站id + */ + @MppMultiId(value = "substation_id") + @ApiModelProperty(value = "变电站id") + private String substationId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value = "时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value = "污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value = "统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationM.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationM.java new file mode 100644 index 0000000..f8393c0 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationM.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 变电站污区图统计月表 + * @Author: wr + * @Date: 2025/3/19 14:16 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_substation_m") +public class RStatPollutionSubstationM implements Serializable { + /** + * 变电站id + */ + @MppMultiId(value = "substation_id") + @ApiModelProperty(value = "变电站id") + private String substationId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value = "时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value = "污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value = "统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationQ.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationQ.java new file mode 100644 index 0000000..6887dea --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationQ.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 变电站污区图统计季表 + * @Author: wr + * @Date: 2025/3/19 14:16 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_substation_q") +public class RStatPollutionSubstationQ implements Serializable { + /** + * 变电站id + */ + @MppMultiId(value = "substation_id") + @ApiModelProperty(value="变电站id") + private String substationId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationY.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationY.java new file mode 100644 index 0000000..b71ebb9 --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/RStatPollutionSubstationY.java @@ -0,0 +1,53 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @Description: 变电站污区图统计年表 + * @Author: wr + * @Date: 2025/3/19 14:16 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_stat_pollution_substation_y") +public class RStatPollutionSubstationY implements Serializable { + /** + * 变电站id + */ + @MppMultiId(value = "substation_id") + @ApiModelProperty(value="变电站id") + private String substationId; + + /** + * 时间 + */ + @MppMultiId(value = "data_date") + @ApiModelProperty(value="时间") + private LocalDate dataDate; + + /** + * 污区图统计类型 + */ + @MppMultiId(value = "pollution_type") + @ApiModelProperty(value="污区图统计类型") + private String pollutionType; + + /** + * 统计值 + */ + @TableField(value = "value") + @ApiModelProperty(value="统计值") + private Double value; + + private static final long serialVersionUID = 1L; +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/SyncTableConfig.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/SyncTableConfig.java new file mode 100644 index 0000000..d67892d --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/SyncTableConfig.java @@ -0,0 +1,45 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * relational_migration + * + * @author cdf + * @date 2026/5/26 + */ +@Data +@TableName("SYNC_TABLE_CONFIG") +public class SyncTableConfig { + + @TableId + private String tableName; + private String syncMode; + private Integer enabled; + private Integer sortOrder; + private String remark; + + // BLOB相关配置 + private String blobColumns; + + // 新增:表对应的时间查询字段(动态配置) + private String timeColumn; + + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + + +} diff --git a/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/User.java b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/User.java new file mode 100644 index 0000000..c49e55c --- /dev/null +++ b/relational_migration/relational_comm/src/main/java/com/njcn/relational/pojo/po/User.java @@ -0,0 +1,148 @@ +package com.njcn.relational.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.relational.pojo.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_user") +public class User extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private String id; + + /** + * 用户名 + */ + private String name; + + /** + * 登录名 + */ + private String loginName; + + /** + * 密码 + */ + private String password; + + /** + * 部门Id + */ + private String deptId; + + /** + * 电话号码 + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + + /** + * 用户状态0-删除;1-正常;2-锁定;3-待审核;4-休眠;5-密码过期 + */ + private Integer state; + + /** + * 用户类型 0:超级管理员;1:管理员;2:普通用户 + */ + private Integer type; + + /** + * 数据来源:0-外部推送;1-正常新增;默认正常新增 + */ + private Integer origin; + + /** + * 用户类型:0-临时用户 1-正式用户 + */ + private Integer casualUser; + + /** + * 密码状态:0-不需要修改 1-需要修改 + */ + private Integer pwdState; + + /** + * 短信通知(0-不通知;1-通知)默认不通知 + */ + private Integer smsNotice; + + /** + * 邮件通知(0-不通知;1-通知)默认不通知 + */ + private Integer emailNotice; + + /** + * 推荐码 + */ + private String referralCode; + + /** + * 注册时间 + */ + private LocalDateTime registerTime; + + /** + * 密码有效期字段(初始化的时候跟注册时间一样) + */ + private LocalDateTime pwdValidity; + + /** + * 最后一次登录时间 + */ + private LocalDateTime loginTime; + + /** + * 限制登录起始IP + */ + private String limitIpStart; + + /** + * 限制登录结束IP + */ + private String limitIpEnd; + + /** + * 限制登录时间段(用'-'分割) + */ + private String limitTime; + + /** + * 密码错误次数 + */ + private Integer loginErrorTimes; + + /** + * 首次密码错误时间(半个小时错误次数超过N次数则锁定,解锁后密码错误次数、首次密码错误时间重置) + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime firstErrorTime; + + /** + * 用户密码错误锁定时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime lockTime; + + private String devCode; + + private String headSculpture; +} diff --git a/relational_migration/relational_target/pom.xml b/relational_migration/relational_target/pom.xml new file mode 100644 index 0000000..93b19bf --- /dev/null +++ b/relational_migration/relational_target/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + + com.njcn + relational_migration + 1.0.0 + + + + relational_target + + + + com.njcn + relational_comm + 1.0.0 + + + + + com.jcraft + jsch + 0.1.55 + + + + net.bytebuddy + byte-buddy + 1.12.10 + + + + + org.springframework.boot + spring-boot-starter-security + + + + + + + relation_target + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + repackage + + + + + + + + diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/ann/SyncTable.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/ann/SyncTable.java new file mode 100644 index 0000000..590d00f --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/ann/SyncTable.java @@ -0,0 +1,20 @@ +package com.njcn.relational.ann; + +import java.lang.annotation.*; + +/** + * 同步表注解 + * 标识这个Service同步哪张表 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SyncTable { + + /** + * 表名 + */ + String value(); + + +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/config/Security.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/config/Security.java new file mode 100644 index 0000000..dd00112 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/config/Security.java @@ -0,0 +1,19 @@ +package com.njcn.relational.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +public class Security extends WebSecurityConfigurerAdapter { + + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.httpBasic().and().authorizeRequests().anyRequest().authenticated().and().csrf().disable(); + } + + +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/controller/DataTransportController.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/controller/DataTransportController.java new file mode 100644 index 0000000..0d10d39 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/controller/DataTransportController.java @@ -0,0 +1,162 @@ +package com.njcn.relational.controller; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.njcn.relational.service.SyncTableConfigService; +import com.njcn.relational.service.SyncTableParseService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author: cdf + * @CreateTime: 2026-05-26 + * @Description: + */ +@RestController +@RequestMapping("/source") +@RequiredArgsConstructor +@Slf4j +public class DataTransportController { + + private final SyncTableConfigService syncTableConfigService; + + private final SyncTableParseService syncTableParseService; + + @Value("${spring.profiles.active:query}") + private String serverType; + + @GetMapping("export") + public void export(@RequestParam(required = false)String date){ + if(StrUtil.isBlank(date)){ + date = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); + }else { + if(!isValidDate(date)){ + log.error("参数时间格式错误"+date); + return; + } + } + syncTableConfigService.syncAllFullTables(date); + } + + @GetMapping("import") + public void importData(@RequestParam(required = false)String date){ + if(StrUtil.isBlank(date)){ + date = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); + }else { + if(!isValidDate(date)){ + log.error("参数时间格式错误"+date); + return; + } + } + try { + syncTableParseService.syncFullTables(date); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @GetMapping("test") + public void test(){ + syncTableConfigService.test(); + } + + @GetMapping("testR") + public void testR(){ + syncTableParseService.testR(); + } + + @GetMapping("getRemoteTwoAll") + public List getRemoteTwoAll(){ + try { + return syncTableConfigService.getPendingFiles(); + } catch (Exception e) { + log.error("最终捕获二区异常",e); + throw new RuntimeException(e); + } + } + + @GetMapping("getRemoteAll") + public List getAll(){ + try { + return syncTableParseService.getPendingFiles(); + } catch (Exception e) { + log.error("最终捕获异常",e); + throw new RuntimeException(e); + } + } + + @GetMapping("removeTwo") + public String removeTwo(@RequestParam Integer a){ + try { + syncTableConfigService.cleanLocalFiles(a); + } catch (Exception e) { + throw new RuntimeException(e); + } + return "成功"; + } + + + @GetMapping("removeThree") + public String removeThree(@RequestParam Integer a){ + try { + syncTableParseService.cleanLocalFiles(a); + } catch (Exception e) { + throw new RuntimeException(e); + } + return "成功"; + } + + + /** + * 删除横向隔离设备公共摆渡区数据 + * @author cdf + * @date 2026/6/10 + */ + @GetMapping("removeRemote") + public String removeRemote(@RequestParam Integer a){ + + return "成功"; + } + + @GetMapping("getConfig") + public Map getConfig(){ + Map config = new HashMap<>(); + if(serverType.contains("query")){ + config.put("serverType", "source"); + }else { + config.put("serverType", "target"); + } + config.put("serverTypeName", serverType.contains("query") ? "二区源服务器" : "三区目标服务器"); + return config; + } + + public boolean isValidDate(String dateStr) { + if (dateStr == null || dateStr.length() != 8) { + return false; + } + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + try { + LocalDate.parse(dateStr, formatter); + return true; + } catch (DateTimeParseException e) { + return false; + } + } + +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/job/importJob.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/job/importJob.java new file mode 100644 index 0000000..a94b137 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/job/importJob.java @@ -0,0 +1,58 @@ +package com.njcn.relational.job; + +import cn.hutool.core.date.DatePattern; +import com.njcn.relational.service.SyncTableConfigService; +import com.njcn.relational.service.SyncTableParseService; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + * data-migration + * + * @author cdf + * @date 2026/5/29 + */ +@Component +@RequiredArgsConstructor +@Profile("insert_up") +public class importJob { + + + private final SyncTableParseService syncTableParseService; + + + + /** + * 三区导入数据 + * 定时导出数据 - 每天早上3点执行 + * @author cdf + * @date 2026/5/29 + */ + @Profile("insert_up") + @Scheduled(cron = "0 55 4 * * ?") + public void threeImport(){ + String date = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); + syncTableParseService.syncFullTables(date); + } + + + + /** + * 定时清楚本地数据,默认保留一周 + * 定时导出数据 - 每天早上3点执行 + * @author cdf + * @date 2026/5/29 + */ + @Scheduled(cron = "0 44 5 * * ?") + @Profile("insert_up") + public void removeThreeLocal(){ + syncTableParseService.cleanLocalFiles(7); + } + +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/job/reportJob.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/job/reportJob.java new file mode 100644 index 0000000..aa5303b --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/job/reportJob.java @@ -0,0 +1,56 @@ +package com.njcn.relational.job; + +import cn.hutool.core.date.DatePattern; +import com.njcn.relational.service.SyncTableConfigService; +import com.njcn.relational.service.SyncTableParseService; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + * data-migration + * + * @author cdf + * @date 2026/5/29 + */ +@Component +@RequiredArgsConstructor +@Profile("query_up") +public class reportJob { + + private final SyncTableConfigService syncTableConfigService; + + + /** + * 二区查询导出数据 + * 定时导出数据 - 每天早上2点执行 + * @author cdf + * @date 2026/5/29 + */ + @Scheduled(cron = "0 40 4 * * ?") + public void twoExport(){ + String date = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); + syncTableConfigService.syncAllFullTables(date); + } + + + + /** + * 定时清楚本地数据,默认保留一周 + * 定时导出数据 - 每天早上3点执行 + * @author cdf + * @date 2026/5/29 + */ + @Scheduled(cron = "0 33 5 * * ?") + public void removeTwoLocal(){ + syncTableConfigService.cleanLocalFiles(7); + } + + + +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/BlobSerializer.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/BlobSerializer.java new file mode 100644 index 0000000..66125c8 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/BlobSerializer.java @@ -0,0 +1,37 @@ +package com.njcn.relational.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.sql.Blob; +import java.sql.SQLException; +import java.util.Base64; + +/** + * Blob 字段 JSON 序列化器 + * 将数据库 Blob 类型转换为 Base64 字符串 + */ +public class BlobSerializer extends JsonSerializer { + + @Override + public void serialize(Blob blob, JsonGenerator gen, SerializerProvider serializers) + throws IOException { + + if (blob == null) { + gen.writeNull(); + return; + } + + try { + // 获取 Blob 字节数组 + byte[] bytes = blob.getBytes(1, (int) blob.length()); + // 转换为 Base64 + String base64 = Base64.getEncoder().encodeToString(bytes); + gen.writeString(base64); + } catch (SQLException e) { + gen.writeNull(); + } + } +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/ClobSerializer.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/ClobSerializer.java new file mode 100644 index 0000000..8445316 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/serializer/ClobSerializer.java @@ -0,0 +1,34 @@ +package com.njcn.relational.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.sql.Clob; +import java.sql.SQLException; + +/** + * Clob 字段 JSON 序列化器 + * 将数据库 Clob 类型转换为字符串 + */ +public class ClobSerializer extends JsonSerializer { + + @Override + public void serialize(Clob clob, JsonGenerator gen, SerializerProvider serializers) + throws IOException { + + if (clob == null) { + gen.writeNull(); + return; + } + + try { + // 获取 Clob 字符串内容 + String content = clob.getSubString(1, (int) clob.length()); + gen.writeString(content); + } catch (SQLException e) { + gen.writeNull(); + } + } +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableConfigService.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableConfigService.java new file mode 100644 index 0000000..492b0d2 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableConfigService.java @@ -0,0 +1,490 @@ +package com.njcn.relational.service; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.njcn.relational.mapper.DynamicSyncMapper; +import com.njcn.relational.mapper.SyncTableConfigMapper; +import com.njcn.relational.pojo.bo.UploadResult; +import com.njcn.relational.pojo.po.SyncTableConfig; +import com.njcn.relational.serializer.BlobSerializer; +import com.njcn.relational.serializer.ClobSerializer; +import com.njcn.relational.utils.SftpUploadUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.io.*; +import java.sql.Blob; +import java.sql.Clob; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + + +@Slf4j +@Service +public class SyncTableConfigService extends ServiceImpl { + + @Autowired + private DynamicSyncMapper dynamicSyncMapper; + + @Value("${sync.export.remotePath}") + private String remotePath; + + @Value("${sync.export.localPath}") + private String localPath; + + @Value("${sync.ip}") + private String ip; + + @Value("${sync.port:22}") + private Integer port; + + @Value("${sync.username}") + private String username; + + @Value("${sync.password}") + private String password; + + // 新增:表名 -> 时间字段 缓存 + private Map timeColumnCache = new HashMap<>(); + + private static final int BATCH_SIZE = 10000; + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter FILE_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); + + // JSON序列化工具(自动处理时间、换行符等) + private final ObjectMapper objectMapper = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .registerModule(new SimpleModule() {{ + addSerializer(Blob.class, new BlobSerializer()); + addSerializer(Clob.class, new ClobSerializer()); + }}) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .enable(SerializationFeature.INDENT_OUTPUT) + .setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));; // 格式化输出,可读性好 + + // 缓存当前Schema + private String currentSchema; + + // 记录本次生成的所有文件 + private final List generatedFiles = new ArrayList<>(); + + @PostConstruct + public void init() { + currentSchema = dynamicSyncMapper.getCurrentUser(); + log.info("当前数据库Schema: {}", currentSchema); + } + + /** + * 获取所有启用的全量表(从配置表) + */ + public List getEnabledFullTables() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SyncTableConfig::getEnabled, 1) + .eq(SyncTableConfig::getSyncMode, "FULL") + .orderByAsc(SyncTableConfig::getSortOrder); + return this.list(wrapper); + } + + /** + * 获取所有启用的增量表(从配置表) + */ + public List getEnabledIncrementTables() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SyncTableConfig::getEnabled, 1) + .eq(SyncTableConfig::getSyncMode, "INC") + .orderByAsc(SyncTableConfig::getSortOrder); + return this.list(wrapper); + } + + /** + * 确保本地目录存在 + */ + private void ensureLocalDirectory() { + File dir = new File(localPath); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建目录: {}", localPath); + } + } + + + /** + * 全量同步所有表 + */ + public void syncAllFullTables(String dateStr) { + List tables = getEnabledFullTables(); + log.info("========== 全量同步开始,共 {} 张表 ==========", tables.size()); + + // 确保目录存在 + ensureLocalDirectory(); + generatedFiles.clear(); + + for (SyncTableConfig config : tables) { + String tableName = config.getTableName(); + try { + long startTime = System.currentTimeMillis(); + + /*IService service = registry.getServiceByTableName(tableName); + if (service != null) { + String filePath = exportFullTableWithEntity(service, tableName, dateStr); + log.info("表 {} 使用实体方式导出完成", tableName); + } else {*/ + String filePath = exportFullTableToJson(tableName, dateStr); + log.info("表 {} 使用Map方式导出完成", tableName); + // } + + long duration = System.currentTimeMillis() - startTime; + log.info("表 {} 全量导出完成,耗时 {} ms", tableName, duration); + } catch (Exception e) { + log.error("表 {} 全量导出失败", tableName, e); + } + } + syncAllIncrementTables(dateStr); + } + + /** + * 增量同步所有表 + */ + public void syncAllIncrementTables(String dateStr) { + List tables = getEnabledIncrementTables(); + timeColumnCache = tables.stream().filter(it-> StrUtil.isNotBlank(it.getTimeColumn())).collect(Collectors.toMap(SyncTableConfig::getTableName,SyncTableConfig::getTimeColumn)); + log.info("========== 增量同步开始,共 {} 张表 ==========", tables.size()); + for (SyncTableConfig config : tables) { + String tableName = config.getTableName(); + try { + long startTime = System.currentTimeMillis(); + + /*IService service = registry.getServiceByTableName(tableName); + if (service != null) { + String filePath = exportIncrementWithEntity(service, tableName, dateStr); + log.info("表 {} 使用实体方式导出完成", tableName); + } else {*/ + String filePath = exportTodayDataToJson(tableName, dateStr); + log.info("表 {} 使用Map方式导出完成", tableName); + // } + + long duration = System.currentTimeMillis() - startTime; + log.info("表 {} 增量导出完成,耗时 {} ms", tableName, duration); + } catch (Exception e) { + log.error("表 {} 增量同步失败", tableName, e); + } + } + + // 推送所有文件到横向隔离设备 + if (!generatedFiles.isEmpty()) { + uploadAllFiles(); + } + } + + /** + * 上传所有生成的文件(批量上传) + */ + private void uploadAllFiles() { + if (generatedFiles.isEmpty()) { + log.info("没有文件需要上传"); + return; + } + + try { + List resultList = SftpUploadUtil.batchUploadFiles( + ip, port, username, password, generatedFiles, remotePath + ); + + // 统计上传结果 + long successCount = resultList.stream().filter(UploadResult::isSuccess).count(); + long failCount = resultList.size() - successCount; + + log.info("批量上传完成 - 成功: {}, 失败: {}, 总计: {}", successCount, failCount, resultList.size()); + // 记录失败的文件 + for (UploadResult result : resultList) { + if (!result.isSuccess()) { + log.error("上传失败文件: {}, 原因: {}", result.getLocalFilePath(), result.getErrorMessage()); + } + } + } catch (Exception e) { + log.error("批量上传失败", e); + } + } + + /** + * Map方式全量导出为JSON(保存为.txt文件) + */ + @Transactional + public String exportFullTableToJson(String tableName, String dateStr) throws IOException { + String fileName = String.format("%s_FULL_%s.txt", tableName, dateStr); + String filePath = localPath + fileName; + + log.info("开始导出全量表: {} -> {}", tableName, filePath); + + List> allData = new ArrayList<>(); + int offset = 0; + + while (true) { + List> batchData = dynamicSyncMapper.selectPage( + tableName, BATCH_SIZE, offset); + + if (batchData.isEmpty()) { + break; + } + + allData.addAll(batchData); + log.info("表 {} 已读取 {} 条记录", tableName, allData.size()); + + if (batchData.size() < BATCH_SIZE) { + break; + } + offset += BATCH_SIZE; + } + + // 写入JSON格式到.txt文件 + try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) { + objectMapper.writeValue(bos, allData); + } + + + + // 记录生成的文件 + generatedFiles.add(filePath); + + log.info("表 {} 全量导出完成,共 {} 条记录,文件: {}", tableName, allData.size(), filePath); + return filePath; + } + + /** + * Map方式增量导出为JSON(保存为.txt文件) + */ + @Transactional + public String exportTodayDataToJson(String tableName, String dateStr) throws IOException { + + // 1. 判断表属于哪种周期:D/M/Q/Y + String periodType = getTablePeriodType(tableName); + if (periodType == null) { + log.warn("表 {} 无法识别周期类型,跳过增量导出", tableName); + return null; + } + + // 2. 根据周期构建 开始/结束 时间 + Map timeRange = buildPeriodTimeRange(periodType, dateStr); + String dateStart = timeRange.get("start"); + String dateEnd = timeRange.get("end"); + + log.info("导出表 {} 数据: {} 至 {}", tableName, dateStart, dateEnd); + + String timeColumn = getTimeColumn(tableName); + + List> queryData = dynamicSyncMapper.selectTodayData( + tableName, timeColumn, dateStart, dateEnd); + + if (queryData.isEmpty()) { + log.info("表 {} {} - {}无数据", tableName,dateStart,dateEnd); + return null; + } + + String fileName = String.format("%s_INC_%s.txt", tableName, dateStr); + String filePath = localPath + fileName; + + // 写入JSON格式到.txt文件 + try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) { + objectMapper.writeValue(bos, queryData); + } + + // 记录生成的文件 + generatedFiles.add(filePath); + + log.info("表 {} {}数据导出完成,共 {} 条记录,文件: {}", tableName,dateStr, queryData.size(), filePath); + return filePath; + + } + + + + /** + * 从表名识别周期类型 + * D=天, M=月, Q=季, Y=年 + */ + private String getTablePeriodType(String tableName) { + + if (tableName.endsWith("_D") || tableName.equalsIgnoreCase("R_MP_V_THD")) return "D"; + if (tableName.endsWith("_M")) return "M"; + if (tableName.endsWith("_Q")) return "Q"; + if (tableName.endsWith("_Y")) return "Y"; + return null; + } + /** + * 根据周期 & 入参日期,计算【当前周期】时间范围(JDK8 兼容) + */ + private Map buildPeriodTimeRange(String periodType, String dateStr) { + DateTime baseDate = DateUtil.parse(dateStr, DatePattern.PURE_DATE_PATTERN); + String start; + String end; + + // JDK8 标准 switch + switch (periodType) { + case "D": + // 入参日期 当天 + start = DateUtil.format(DateUtil.beginOfDay(baseDate), DatePattern.NORM_DATETIME_PATTERN); + end = DateUtil.format(DateUtil.endOfDay(baseDate), DatePattern.NORM_DATETIME_PATTERN); + break; + case "M": + // 入参日期 所在整月 + start = DateUtil.format(DateUtil.beginOfMonth(baseDate), DatePattern.NORM_DATETIME_PATTERN); + end = DateUtil.format(DateUtil.endOfMonth(baseDate), DatePattern.NORM_DATETIME_PATTERN); + break; + case "Q": + // 入参日期 所在整季度 + start = DateUtil.format(DateUtil.beginOfQuarter(baseDate), DatePattern.NORM_DATETIME_PATTERN); + end = DateUtil.format(DateUtil.endOfQuarter(baseDate), DatePattern.NORM_DATETIME_PATTERN); + break; + case "Y": + // 入参日期 所在整年 + start = DateUtil.format(DateUtil.beginOfYear(baseDate), DatePattern.NORM_DATETIME_PATTERN); + end = DateUtil.format(DateUtil.endOfYear(baseDate), DatePattern.NORM_DATETIME_PATTERN); + break; + default: + throw new IllegalArgumentException("不支持的周期类型:" + periodType); + } + + Map map = new HashMap<>(2); + map.put("start", start); + map.put("end", end); + return map; + } + + + + /** + * 获取时间字段 + */ + private String getTimeColumn(String tableName) { + String createTitle = timeColumnCache.get(tableName); + if(Objects.isNull(createTitle)){ + switch (tableName) { + case "R_STAT_DATA_FLICKER_D": + case "R_STAT_DATA_FLUC_D": + case "R_STAT_DATA_HARMPHASIC_I_D": + case "R_STAT_DATA_HARMPHASIC_V_D": + case "R_STAT_DATA_HARMPOWER_P_D": + case "R_STAT_DATA_HARMPOWER_Q_D": + case "R_STAT_DATA_HARMPOWER_S_D": + case "R_STAT_DATA_HARMRATE_I_D": + case "R_STAT_DATA_HARMRATE_V_D": + case "R_STAT_DATA_INHARM_I_D": + case "R_STAT_DATA_INHARM_V_D": + case "R_STAT_DATA_I_D": + case "R_STAT_DATA_PLT_D": + case "R_STAT_DATA_V_D": + return "TIME"; + // 新增表 + case "R_STAT_COMASSES_D": + case "R_STAT_ASSES_D": + case "R_STAT_LIMIT_RATE_D": + case "R_STAT_ONLINERATE_D": + case "R_STAT_INTEGRITY_D": + case "R_STAT_ORG_INTEGRITY_D": + case "R_STAT_LIMIT_RATE_DETAIL_D": + case "R_STAT_LIMIT_TARGET_D": + return "TIME_ID"; + case "R_MP_POLLUTION_D": + case "R_MP_V_THD": + case "R_STAT_POLLUTION_ORG_D": + case "R_STAT_POLLUTION_ORG_M": + case "R_STAT_POLLUTION_ORG_Q": + case "R_STAT_POLLUTION_ORG_Y": + case "R_STAT_POLLUTION_SUBSTATION_D": + case "R_STAT_POLLUTION_SUBSTATION_M": + case "R_STAT_POLLUTION_SUBSTATION_Q": + case "R_STAT_POLLUTION_SUBSTATION_Y": + return "DATA_DATE"; + default: + log.warn("表 {} 未配置时间字段,跳过", tableName); + return "CREATE_TIME"; + } + }else { + return createTitle; + } + } + + public void test(){ + try { + // 确保目录存在 + File localDir = new File(localPath); + if (!localDir.exists()) { + localDir.mkdirs(); + } + + // 生成txt文件 + String filePath = localPath + "test.txt"; + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + writer.write("test"); + } + + // 上传到SFTP服务器 + SftpUploadUtil.uploadFile(ip, port, username, password, filePath, remotePath); + + log.info("test.txt文件生成并上传成功"); + + } catch (Exception e) { + log.error("失败", e); + } + } + + public List getPendingFiles() { + List matchedFiles = new ArrayList<>(); + Vector files; + try { + // 列目录也纳入异常捕获 + files = SftpUploadUtil.listFiles(ip, port, username, password, remotePath); + for (Object obj : files) { + if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) { + com.jcraft.jsch.ChannelSftp.LsEntry entry = (com.jcraft.jsch.ChannelSftp.LsEntry) obj; + String fileName = entry.getFilename(); + matchedFiles.add(fileName); + } + } + } catch (Exception e) { + log.error("获取待处理文件列表失败,远端目录:{}", remotePath, e); + return new ArrayList<>(); + } + return matchedFiles; + } + + /** + * 清理本地已处理过的文件 + */ + public void cleanLocalFiles(int daysToKeep) { + File localDir = new File(localPath); + if (!localDir.exists()) { + return; + } + + long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24L * 60 * 60 * 1000); + File[] files = localDir.listFiles(); + + if (files != null) { + int deletedCount = 0; + for (File file : files) { + if (file.isFile() && file.lastModified() < cutoffTime) { + file.delete(); + deletedCount++; + } + } + log.info("清理了10.11.7.5二区服务器 {} 个七天前的本地txt文件", deletedCount); + } + } +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableParseService.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableParseService.java new file mode 100644 index 0000000..49990c5 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/service/SyncTableParseService.java @@ -0,0 +1,796 @@ +package com.njcn.relational.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.njcn.relational.mapper.DynamicSyncMapper; +import com.njcn.relational.mapper.SyncTableConfigMapper; +import com.njcn.relational.pojo.bo.DownloadResult; +import com.njcn.relational.pojo.po.SyncTableConfig; +import com.njcn.relational.utils.SftpUploadUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.io.*; +import java.nio.file.*; +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class SyncTableParseService { + + @Autowired + private DynamicSyncMapper dynamicSyncMapper; + + @Autowired + private SyncTableConfigMapper syncTableConfigMapper; + + // 缓存当前Schema + private String currentSchema; + + @Value("${sync.import.localPath}") + private String localPath; + + @Value("${sync.import.remotePath}") + private String remotePath; + + @Value("${sync.ip}") + private String ip; + + @Value("${sync.port:22}") + private Integer port; + + @Value("${sync.username}") + private String username; + + @Value("${sync.password}") + private String password; + + @Autowired + private JdbcTemplate targetJdbcTemplate; + + private static final int BATCH_SIZE = 10000; + private static final DateTimeFormatter FILE_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); + + // JSON解析工具 + private final ObjectMapper objectMapper = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 格式化输出,可读性好; + + @PostConstruct + public void init() { + currentSchema = dynamicSyncMapper.getCurrentUser(); + log.info("当前数据库Schema: {}", currentSchema); + } + + private Map syncData(){ + // 加载表配置到缓存 + Map tableConfigCache = new HashMap<>(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SyncTableConfig::getEnabled, 1).isNotNull(SyncTableConfig::getBlobColumns); + List configs = syncTableConfigMapper.selectList(wrapper); + for (SyncTableConfig config : configs) { + tableConfigCache.put(config.getTableName().toUpperCase(), config.getBlobColumns()); + } + return tableConfigCache; + } + + /** + * 批量同步所有表的数据文件(使用批量下载并删除) + */ + public void batchSyncAllTables(String dataStr) { + log.info("========== 开始批量同步数据{} ==========",LocalDateTime.now()); + + // 缓存表配置 + Map tableConfigCache = syncData(); + log.info("加载表配置缓存完成,共 {} 张表", tableConfigCache.size()); + + // 确保本地目录存在 + ensureLocalDirectory(); + + try { + // 1. 获取待下载的文件列表 + List remoteFilePaths = getRemoteFilePaths(dataStr); + + if (remoteFilePaths.isEmpty()) { + log.info("没有从横向隔离设备找到匹配的文件"); + return; + } + + log.info("找到 {} 个文件待处理", remoteFilePaths.size()); + + // 2. 批量下载并删除远程文件 + List downloadResults = SftpUploadUtil.batchDownloadAndDelete( + ip, port, username, password, + remoteFilePaths, localPath, true // true = 下载后删除远程文件 + ); + + // 3. 统计下载结果 + long downloadSuccessCount = downloadResults.stream().filter(DownloadResult::isSuccess).count(); + long downloadFailCount = downloadResults.size() - downloadSuccessCount; + log.info("批量下载完成 - 成功: {}, 失败: {}", downloadSuccessCount, downloadFailCount); + + // 记录下载失败的文件 + for (DownloadResult result : downloadResults) { + if (!result.isSuccess()) { + log.error("下载失败: {}, 原因: {}", result.getRemoteFilePath(), result.getErrorMessage()); + } + } + + // 4. 处理下载成功的文件(导入数据) + List successfulDownloads = downloadResults.stream() + .filter(DownloadResult::isSuccess) + .collect(Collectors.toList()); + + if (successfulDownloads.isEmpty()) { + log.warn("没有成功下载的文件,停止处理"); + return; + } + + // 5. 批量导入数据 + int importSuccessCount = 0; + int importFailCount = 0; + + for (DownloadResult downloadResult : successfulDownloads) { + try { + String tableName = extractTableNameFromFile(downloadResult.getRemoteFilePath()); + String localFilePath = downloadResult.getLocalFilePath(); + + log.info("开始导入表: {}, 文件: {}", tableName, localFilePath); + importJsonToTable(tableName, localFilePath,tableConfigCache); + + importSuccessCount++; + log.info("表 {} 导入成功", tableName); + + // 导入成功后删除本地文件 + deleteLocalFile(localFilePath); + + } catch (Exception e) { + importFailCount++; + log.error("导入失败: {}", downloadResult.getRemoteFilePath(), e); + } + } + + log.info("批量导入完成 - 成功: {}, 失败: {}", importSuccessCount, importFailCount); + log.info("========== 数据批量同步完成 =========="); + + } catch (Exception e) { + log.error("批量同步失败", e); + } + } + + /** + * 获取远程文件路径列表 + */ + private List getRemoteFilePaths(String dateStr) throws Exception { + // 获取远程目录下所有文件 + Vector files = SftpUploadUtil.listFiles(ip, port, username, password, remotePath); + + // 列出远程目录下所有匹配的文件 + String remoteFilePattern = buildRemoteFilePattern("FULL", dateStr); + List matchedFiles = listRemoteFiles(remoteFilePattern,files); + String remoteFilePatternInc = buildRemoteFilePattern("INC", dateStr); + List matchedFilesInc = listRemoteFiles(remoteFilePatternInc,files); + + // 转换为完整路径 + List remoteFilePaths = new ArrayList<>(); + for (String fileName : matchedFiles) { + remoteFilePaths.add(remotePath + (remotePath.endsWith("/") ? "" : "/") + fileName); + } + for (String fileName : matchedFilesInc) { + remoteFilePaths.add(remotePath + (remotePath.endsWith("/") ? "" : "/") + fileName); + } + return remoteFilePaths; + } + + /** + * 全量同步 + */ + public void syncFullTables(String dataStr) { + batchSyncAllTables(dataStr); + } + + + + /** + * 根据同步模式获取日期字符串 + */ + private String getDateStrBySyncMode(String syncMode) { + if ("FULL".equals(syncMode)) { + // 全量同步使用昨天的日期 + return LocalDate.now().minusDays(1).format(FILE_DATE_FORMATTER); + } else { + // 增量同步使用今天的日期 + return LocalDate.now().format(FILE_DATE_FORMATTER); + } + } + + /** + * 构建远程文件名匹配模式 + */ + private String buildRemoteFilePattern(String syncMode, String dateStr) { + return String.format(".*_%s_%s\\.txt$", syncMode, dateStr); + } + + /** + * 列出远程目录下所有匹配的文件 + */ + private List listRemoteFiles(String pattern,Vector files) throws Exception { + List matchedFiles = new ArrayList<>(); + + try { + Pattern regexPattern = Pattern.compile(pattern); + for (Object obj : files) { + if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) { + com.jcraft.jsch.ChannelSftp.LsEntry entry = (com.jcraft.jsch.ChannelSftp.LsEntry) obj; + String fileName = entry.getFilename(); + + // 跳过目录和特殊文件 + if (entry.getAttrs().isDir() || fileName.equals(".") || fileName.equals("..")) { + continue; + } + + // 匹配文件模式 + if (regexPattern.matcher(fileName).matches()) { + matchedFiles.add(fileName); + log.debug("匹配到文件: {}", fileName); + } + } + } + + } catch (Exception e) { + log.error("匹配远程文件失败: {}", pattern, e); + throw e; + } + + return matchedFiles; + } + + /** + * 确保本地目录存在 + */ + private void ensureLocalDirectory() { + File dir = new File(localPath); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建本地目录: {}", localPath); + } + } + + /** + * 从文件路径提取表名 + * 文件名格式: 表名_FULL_20260127.txt 或 表名_INC_20260127.txt + */ + private String extractTableNameFromFile(String filePath) { + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + Pattern pattern = Pattern.compile("^(.+?)_(FULL|INC)_\\d+\\.txt$"); + Matcher matcher = pattern.matcher(fileName); + + if (matcher.find()) { + return matcher.group(1); + } + + // 如果没有匹配到,直接去掉扩展名 + int extIndex = fileName.lastIndexOf("."); + if (extIndex > 0) { + return fileName.substring(0, extIndex); + } + + return fileName; + } + + /** + * 判断是否全量导入(从文件名) + */ + private boolean isFullImport(String fileName) { + return fileName.contains("_FULL"); + } + + /** + * 删除本地文件 + */ + private void deleteLocalFile(String localFilePath) { + try { + File localFile = new File(localFilePath); + if (localFile.exists()) { + localFile.delete(); + log.debug("已删除本地文件: {}", localFilePath); + } + } catch (Exception e) { + log.warn("删除本地文件失败: {}", localFilePath, e); + } + } + + /** + * 从配置缓存中获取BLOB字段列表 + */ + private List getBlobColumnsFromCache(String tableName, Map tableConfigCache) { + String blobColumnsStr = tableConfigCache.get(tableName.toUpperCase()); + if (blobColumnsStr == null || blobColumnsStr.trim().isEmpty()) { + return new ArrayList<>(); + } + + // 按逗号分隔,并转换为大写 + String[] blobArray = blobColumnsStr.split(","); + List blobColumns = new ArrayList<>(); + for (String blob : blobArray) { + blobColumns.add(blob.trim().toUpperCase()); + } + + if (!blobColumns.isEmpty()) { + log.info("表 {} 配置的BLOB字段: {}", tableName, blobColumns); + } + return blobColumns; + } + + /** + * 导入JSON数据到表(支持BLOB字段) + */ + @Transactional + public void importJsonToTable(String tableName, String filePath, Map tableConfigCache) throws Exception { + log.info("开始导入表: {}, 文件: {}", tableName, filePath); + + File dataFile = new File(filePath); + if (!dataFile.exists()) { + throw new RuntimeException("数据文件不存在: " + filePath); + } + + // 从文件名判断是否全量导入 + String fileName = dataFile.getName(); + boolean isFull = isFullImport(fileName); + + // 读取JSON数据 + List> dataList = objectMapper.readValue( + dataFile, + new TypeReference>>() {} + ); + + if (dataList.isEmpty()) { + log.info("表 {} 无数据,跳过导入", tableName); + return; + } + + log.info("表 {} 共 {} 条数据,{} 导入", tableName, dataList.size(), isFull ? "全量" : "增量(存在则更新)"); + + // 如果是全量导入,先清空表 + if (isFull) { + log.info("全量导入,清空表: {}", tableName); + dynamicSyncMapper.truncateTable(tableName); + } + + // 获取目标表的列信息 + List columns = dynamicSyncMapper.getTableColumns(tableName.toUpperCase(), currentSchema); + + if (columns == null || columns.isEmpty()) { + throw new RuntimeException("表 " + tableName + " 不存在或没有列"); + } + + // 获取时间字段列表 + List timeColumns = getTimeColumns(tableName.toUpperCase()); + + // 【从缓存配置中获取BLOB字段列表】 + List blobColumns = getBlobColumnsFromCache(tableName, tableConfigCache); + + // 转换数据:Map key转大写,并将时间字段转换为Timestamp,BLOB字段转换为byte[] + List> convertedData = new ArrayList<>(); + for (Map row : dataList) { + Map convertedRow = new LinkedHashMap<>(); + for (Map.Entry entry : row.entrySet()) { + String key = entry.getKey().toUpperCase(); + Object value = entry.getValue(); + + // 如果是BLOB字段且值为字符串,转换为byte[] + if (blobColumns.contains(key) && value instanceof String) { + String blobStr = (String) value; + if (blobStr != null && !blobStr.isEmpty()) { + // 检查是否是 Base64 字符串(不是占位符) + if (!blobStr.startsWith("[BLOB_")) { + byte[] bytes = convertBase64ToBytes(blobStr); + if (bytes != null && bytes.length > 0) { + convertedRow.put(key, bytes); + log.debug("BLOB字段 {} 已转换为byte[]", key); + } else { + convertedRow.put(key, null); + log.warn("BLOB字段 {} 转换失败,设置为null", key); + } + } else { + convertedRow.put(key, null); + log.debug("BLOB字段 {} 为占位符,设置为null", key); + } + } else { + convertedRow.put(key, null); + } + } + // 如果是时间字段且值为字符串,转换为Timestamp + else if (timeColumns.contains(key) && value instanceof String) { + String timeStr = (String) value; + if (timeStr != null && !timeStr.isEmpty()) { + value = convertToTimestamp(timeStr); + } + } + convertedRow.put(key, value); + } + convertedData.add(convertedRow); + } + + // ============================================== + // 核心修改:增量使用MERGE INTO(存在更新/不存在插入) + // ============================================== + int totalCount = 0; + if (isFull) { + // 全量:批量INSERT + String insertSql = buildInsertSql(tableName, columns); + List> batchList = new ArrayList<>(); + + for (Map row : convertedData) { + batchList.add(row); + if (batchList.size() >= BATCH_SIZE) { + totalCount += executeBatchInsert(insertSql, columns, batchList); + batchList.clear(); + log.info("表 {} 已导入 {} 条记录", tableName, totalCount); + } + } + if (!batchList.isEmpty()) { + totalCount += executeBatchInsert(insertSql, columns, batchList); + } + } else { + // 增量:达梦MERGE INTO 存在则更新,不存在则插入 + List primaryKeys = getTablePrimaryKeys(tableName); + if (primaryKeys.isEmpty()) { + throw new RuntimeException("增量同步必须有主键!表:" + tableName + " 未找到主键"); + } + String mergeSql = buildMergeSql(tableName, columns, primaryKeys); + List> batchList = new ArrayList<>(); + + for (Map row : convertedData) { + batchList.add(row); + if (batchList.size() >= BATCH_SIZE) { + totalCount += executeBatchMerge(mergeSql, columns, primaryKeys, batchList); + batchList.clear(); + log.info("表 {} 已同步(更新/插入) {} 条记录", tableName, totalCount); + } + } + if (!batchList.isEmpty()) { + totalCount += executeBatchMerge(mergeSql, columns, primaryKeys, batchList); + } + } + + log.info("表 {} 导入完成,共 {} 条记录", tableName, totalCount); + } + + /** + * 将Base64字符串转换为byte[] + */ + private byte[] convertBase64ToBytes(String base64Str) { + if (base64Str == null || base64Str.isEmpty()) { + return null; + } + try { + // 去除可能的引号 + String cleaned = base64Str.trim(); + if (cleaned.startsWith("\"") && cleaned.endsWith("\"")) { + cleaned = cleaned.substring(1, cleaned.length() - 1); + } + + log.debug("Base64 字符串长度: {}, 前50字符: {}", cleaned.length(), + cleaned.length() > 50 ? cleaned.substring(0, 50) : cleaned); + + byte[] bytes = java.util.Base64.getDecoder().decode(cleaned); + log.debug("解码后字节数组长度: {}", bytes.length); + return bytes; + } catch (Exception e) { + log.warn("Base64解码失败: {}, 字符串前100字符: {}", e.getMessage(), + base64Str.length() > 100 ? base64Str.substring(0, 100) : base64Str); + return null; + } + } + + /** + * 获取表主键(达梦) + */ + private List getTablePrimaryKeys(String tableName) { + String sql = "SELECT COLUMN_NAME FROM ALL_CONS_COLUMNS A " + + "JOIN ALL_CONSTRAINTS B ON A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND A.OWNER = B.OWNER " + + "WHERE B.OWNER = ? AND B.TABLE_NAME = ? AND B.CONSTRAINT_TYPE = 'P' " + + "ORDER BY A.POSITION"; + try { + List pks = targetJdbcTemplate.queryForList(sql, String.class, currentSchema, tableName); + log.info("表 {} 主键: {}", tableName, pks); + return pks != null ? pks : new ArrayList<>(); + } catch (Exception e) { + log.error("获取主键失败", e); + return new ArrayList<>(); + } + } + + /** + * 构建达梦MERGE INTO SQL(存在更新,不存在插入) + */ + private String buildMergeSql(String tableName, List columns, List primaryKeys) { + StringBuilder sb = new StringBuilder(); + sb.append("MERGE INTO ").append(tableName).append(" T1 "); + sb.append("USING (SELECT "); + for (int i = 0; i < columns.size(); i++) { + if (i > 0) sb.append(","); + sb.append("? AS ").append(columns.get(i)); + } + sb.append(" FROM DUAL) T2 "); + sb.append("ON ("); + for (int i = 0; i < primaryKeys.size(); i++) { + if (i > 0) sb.append(" AND "); + sb.append("T1.").append(primaryKeys.get(i)).append(" = T2.").append(primaryKeys.get(i)); + } + sb.append(") "); + sb.append("WHEN MATCHED THEN UPDATE SET "); + List nonPkColumns = new ArrayList<>(); + for (String col : columns) { + if (!primaryKeys.contains(col)) nonPkColumns.add(col); + } + for (int i = 0; i < nonPkColumns.size(); i++) { + if (i > 0) sb.append(","); + sb.append("T1.").append(nonPkColumns.get(i)).append(" = T2.").append(nonPkColumns.get(i)); + } + sb.append(" WHEN NOT MATCHED THEN INSERT ("); + for (int i = 0; i < columns.size(); i++) { + if (i > 0) sb.append(","); + sb.append(columns.get(i)); + } + sb.append(") VALUES ("); + for (int i = 0; i < columns.size(); i++) { + if (i > 0) sb.append(","); + sb.append("T2.").append(columns.get(i)); + } + sb.append(")"); + return sb.toString(); + } + + /** + * 批量执行MERGE + */ + private int executeBatchMerge(String sql, List columns, List primaryKeys, List> batchList) { + List batchArgs = new ArrayList<>(); + for (Map row : batchList) { + Object[] args = new Object[columns.size()]; + for (int i = 0; i < columns.size(); i++) { + args[i] = row.get(columns.get(i)); + } + batchArgs.add(args); + } + int[] results = targetJdbcTemplate.batchUpdate(sql, batchArgs); + return Arrays.stream(results).sum(); + } + + /** + * 获取表中的时间类型字段 + */ + private List getTimeColumns(String tableName) { + String sql = "SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS " + + "WHERE TABLE_NAME = ? AND OWNER = ? " + + "AND DATA_TYPE IN ('DATE', 'TIMESTAMP')"; + try { + List timeColumns = targetJdbcTemplate.queryForList(sql, String.class, tableName, currentSchema); + log.debug("表 {} 的时间字段: {}", tableName, timeColumns); + return timeColumns != null ? timeColumns : new ArrayList<>(); + } catch (Exception e) { + log.warn("获取时间字段失败: {}", e.getMessage()); + return new ArrayList<>(); + } + } + + /** + * 将字符串转换为 java.sql.Timestamp(增强版) + */ + private Timestamp convertToTimestamp(String timeStr) { + if (timeStr == null || timeStr.isEmpty()) { + return null; + } + try { + // 去除可能的引号 + timeStr = timeStr.trim(); + if (timeStr.startsWith("\"") && timeStr.endsWith("\"")) { + timeStr = timeStr.substring(1, timeStr.length() - 1); + } + + // 尝试多种解析器 + // 1. ISO_OFFSET_DATE_TIME (支持 2025-04-17T03:42:04.000+00:00) + try { + java.time.OffsetDateTime offsetDateTime = java.time.OffsetDateTime.parse(timeStr); + return Timestamp.valueOf(offsetDateTime.toLocalDateTime()); + } catch (Exception e) { + // 继续尝试其他格式 + } + + // 2. ISO_LOCAL_DATE_TIME (支持 2025-04-17T03:42:04) + try { + java.time.LocalDateTime localDateTime = java.time.LocalDateTime.parse(timeStr); + return Timestamp.valueOf(localDateTime); + } catch (Exception e) { + // 继续尝试其他格式 + } + + // 3. 自定义格式: yyyy-MM-dd HH:mm:ss + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime ldt = LocalDateTime.parse(timeStr, formatter); + return Timestamp.valueOf(ldt); + } catch (Exception e) { + // 继续尝试其他格式 + } + + // 4. 日期格式: yyyy-MM-dd + try { + LocalDate ld = LocalDate.parse(timeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + return Timestamp.valueOf(ld.atStartOfDay()); + } catch (Exception e) { + // 继续尝试其他格式 + } + + // 5. 最后尝试直接转换 + return Timestamp.valueOf(timeStr); + + } catch (Exception e) { + log.warn("时间转换失败: {}, 返回null", timeStr); + return null; + } + } + + /** + * 构建INSERT语句 + */ + private String buildInsertSql(String tableName, List columns) { + StringBuilder sql = new StringBuilder("INSERT INTO "); + sql.append(tableName).append(" ("); + for (int i = 0; i < columns.size(); i++) { + if (i > 0) sql.append(", "); + sql.append(columns.get(i)); + } + sql.append(") VALUES ("); + for (int i = 0; i < columns.size(); i++) { + if (i > 0) sql.append(", "); + sql.append("?"); + } + sql.append(")"); + return sql.toString(); + } + + /** + * 执行批量插入 + */ + private int executeBatchInsert(String sql, List columns, List> batchList) { + List batchArgs = new ArrayList<>(); + for (Map row : batchList) { + Object[] args = new Object[columns.size()]; + for (int i = 0; i < columns.size(); i++) { + args[i] = row.get(columns.get(i)); + } + batchArgs.add(args); + } + int[] results = targetJdbcTemplate.batchUpdate(sql, batchArgs); + return Arrays.stream(results).sum(); + } + + /** + * 手动导入指定的远程文件(单个文件处理) + */ + public void importRemoteFile(String remoteFileName) throws Exception { + String remoteFilePath = remotePath + remoteFileName; + String localFilePath = localPath + remoteFileName; + + log.info("手动导入远程文件: {}", remoteFilePath); + + // 下载并删除远程文件 + List singleFileList = Collections.singletonList(remoteFilePath); + List results = SftpUploadUtil.batchDownloadAndDelete( + ip, port, username, password, + singleFileList, localPath, true + ); + + if (results.isEmpty() || !results.get(0).isSuccess()) { + throw new Exception("下载失败: " + remoteFilePath); + } + + DownloadResult result = results.get(0); + String tableName = extractTableNameFromFile(remoteFileName); + + try { + + // 缓存表配置 + Map tableConfigCache = syncData(); + log.info("加载表配置缓存完成,共 {} 张表", tableConfigCache.size()); + + // 导入数据 + importJsonToTable(tableName, result.getLocalFilePath(),tableConfigCache); + + // 导入成功后删除本地文件 + deleteLocalFile(result.getLocalFilePath()); + + log.info("手动导入完成: {}", remoteFileName); + } catch (Exception e) { + log.error("手动导入失败: {}", remoteFileName, e); + throw e; + } + } + + /** + * 获取远程目录下所有待处理文件列表 + */ + public List getPendingFiles() { + List matchedFiles = new ArrayList<>(); + Vector files; + try { + // 列目录也纳入异常捕获 + files = SftpUploadUtil.listFiles(ip, port, username, password, remotePath); + for (Object obj : files) { + if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) { + com.jcraft.jsch.ChannelSftp.LsEntry entry = (com.jcraft.jsch.ChannelSftp.LsEntry) obj; + String fileName = entry.getFilename(); + matchedFiles.add(fileName); + } + } + } catch (Exception e) { + log.error("获取待处理文件列表失败,远端目录:{}", remotePath, e); + return new ArrayList<>(); + } + return matchedFiles; + } + + /** + * 清理本地已处理过的文件 + */ + public void cleanLocalFiles(int daysToKeep) { + File localDir = new File(localPath); + if (!localDir.exists()) { + return; + } + + long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24L * 60 * 60 * 1000); + File[] files = localDir.listFiles(); + + if (files != null) { + int deletedCount = 0; + for (File file : files) { + if (file.isFile() && file.lastModified() < cutoffTime) { + file.delete(); + deletedCount++; + } + } + log.info("清理了服务器 {} 七天前本地txt文件", deletedCount); + } + } + + /** + * 测试方法 + */ + public void testR() { + try { + String remoteFilePath = remotePath + "test.txt"; + String localFilePath = localPath + "test.txt"; + + SftpUploadUtil.downloadFile(ip, port, username, password, remoteFilePath, localFilePath,true); + + File file = new File(localFilePath); + if (file.exists()) { + String content = new String(Files.readAllBytes(Paths.get(localFilePath))); + log.info("文件内容: {}", content); + } + + } catch (Exception e) { + log.error("获取文件失败", e); + } + } +} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/BlobConverter.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/BlobConverter.java new file mode 100644 index 0000000..9f53ee7 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/BlobConverter.java @@ -0,0 +1,60 @@ +//package com.njcn.relational.utils; +// +//import java.sql.Blob; +//import java.sql.SQLException; +//import java.util.Base64; +// +//public class BlobConverter { +// +// /** +// * 将 Blob 转换为 Base64 字符串(推荐) +// */ +// public static String blobToBase64(Blob blob) { +// if (blob == null) { +// return null; +// } +// try { +// byte[] bytes = blob.getBytes(1, (int) blob.length()); +// return Base64.getEncoder().encodeToString(bytes); +// } catch (SQLException e) { +// throw new RuntimeException("Blob 转换失败", e); +// } +// } +// +// /** +// * 将 Blob 转换为字节数组 +// */ +// public static byte[] blobToBytes(Blob blob) { +// if (blob == null) { +// return null; +// } +// try { +// return blob.getBytes(1, (int) blob.length()); +// } catch (SQLException e) { +// throw new RuntimeException("Blob 转换失败", e); +// } +// } +// +// /** +// * 将 Blob 转换为十六进制字符串(用于小文件) +// */ +// public static String blobToHex(Blob blob) { +// if (blob == null) { +// return null; +// } +// try { +// byte[] bytes = blob.getBytes(1, (int) blob.length()); +// StringBuilder hexString = new StringBuilder(); +// for (byte b : bytes) { +// String hex = Integer.toHexString(0xff & b); +// if (hex.length() == 1) { +// hexString.append('0'); +// } +// hexString.append(hex); +// } +// return hexString.toString(); +// } catch (SQLException e) { +// throw new RuntimeException("Blob 转换失败", e); +// } +// } +//} diff --git a/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/SftpUploadUtil.java b/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/SftpUploadUtil.java new file mode 100644 index 0000000..69455c5 --- /dev/null +++ b/relational_migration/relational_target/src/main/java/com/njcn/relational/utils/SftpUploadUtil.java @@ -0,0 +1,533 @@ +package com.njcn.relational.utils; + +/** + * @Author: cdf + * @CreateTime: 2026-05-26 + * @Description: SFTP 文件传输工具类(支持上传和下载) + */ + +import com.jcraft.jsch.*; +import com.njcn.relational.pojo.bo.DownloadResult; +import com.njcn.relational.pojo.bo.UploadResult; +import lombok.extern.slf4j.Slf4j; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +/** + * SFTP 文件传输工具类 + * 功能:将当前服务器上的文件传输到另一台服务器的指定目录,或从远程服务器下载文件 + */ +@Slf4j +public class SftpUploadUtil { + + // 默认端口 + private static final int DEFAULT_PORT = 22; + + /** + * 上传文件到远程服务器 + * + * @param host 远程服务器IP + * @param port 远程服务器端口(默认22) + * @param username 服务器用户名 + * @param password 服务器密码 + * @param localFilePath 本地/当前服务器文件路径(如 /data/test.txt) + * @param remoteDir 远程目标目录(如 /opt/upload/) + * @throws Exception 上传异常 + */ + public static void uploadFile(String host, int port, String username, String password, + String localFilePath, String remoteDir) throws Exception { + + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + InputStream inputStream = null; + + try { + // 1. 创建SSH会话 + session = jsch.getSession(username, host, port); + session.setPassword(password); + + // 2. 设置配置(跳过主机密钥检查,生产环境可根据安全要求调整) + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + session.setConfig(config); + + // 3. 连接服务器 + log.info("正在连接远程服务器:" + host); + session.connect(); + log.info("服务器连接成功!"); + + // 4. 打开SFTP通道 + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + // 5. 如果远程目录不存在,自动创建(支持多级目录) + try { + channelSftp.cd(remoteDir); + } catch (SftpException e) { + // 目录不存在则创建 + String[] dirs = remoteDir.split("/"); + String currentPath = ""; + for (String dir : dirs) { + if (dir == null || dir.isEmpty()) continue; + currentPath += "/" + dir; + try { + channelSftp.cd(currentPath); + } catch (SftpException e1) { + channelSftp.mkdir(currentPath); + channelSftp.cd(currentPath); + } + } + log.info("远程目录已创建:" + remoteDir); + } + + // 6. 读取本地文件 + File localFile = new File(localFilePath); + if (!localFile.exists()) { + throw new FileNotFoundException("本地文件不存在: " + localFilePath); + } + inputStream = new FileInputStream(localFile); + + // 7. 上传文件 + log.info("开始上传文件:" + localFile.getName()); + channelSftp.put(inputStream, localFile.getName()); + log.info("文件上传完成!远程路径:" + remoteDir + localFile.getName()); + + } finally { + // 8. 关闭流和连接 + if (inputStream != null) inputStream.close(); + if (channelSftp != null && channelSftp.isConnected()) channelSftp.disconnect(); + if (session != null && session.isConnected()) session.disconnect(); + log.info("连接已关闭"); + } + } + + + /** + * 批量上传文件到远程服务器(共享同一个Session连接) + * + * @param host 远程服务器IP + * @param port 远程服务器端口(默认22) + * @param username 服务器用户名 + * @param password 服务器密码 + * @param localFilePaths 本地文件路径列表 + * @param remoteDir 远程目标目录(如 /opt/upload/) + * @return 上传结果列表,包含每个文件的上传状态 + * @throws Exception 连接异常 + */ + /** + * 批量上传文件到远程服务器(共享同一个Session连接)【稳定版:支持保活 + 重试】 + */ + public static List batchUploadFiles(String host, int port, String username, String password, + List localFilePaths, String remoteDir) throws Exception { + + List results = new ArrayList<>(); + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + + try { + session = jsch.getSession(username, host, port); + session.setPassword(password); + + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + + session.setConfig(config); + + session.setTimeout(30000); + // ✅ 保活间隔:每 10 秒发一次心跳 + session.setServerAliveInterval(10000); + session.setServerAliveCountMax(5); + + log.info("正在连接远程服务器:" + host + ":" + port); + session.connect(); + log.info("服务器连接成功!"); + + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + channelSftp.setFilenameEncoding("UTF-8"); + + + log.info("开始批量上传文件,共 " + localFilePaths.size() + " 个文件, 上传目录: " + remoteDir); + + for (String localFilePath : localFilePaths) { + UploadResult result = new UploadResult(); + result.setLocalFilePath(localFilePath); + + // ✅ 失败自动重试 3 次 + int retry = 3; + boolean uploadOk = false; + + while (retry > 0 && !uploadOk) { + try (InputStream inputStream = new FileInputStream(localFilePath)) { + File localFile = new File(localFilePath); + if (!localFile.exists()) { + result.setSuccess(false); + result.setErrorMessage("文件不存在"); + break; + } + + String fileName = localFile.getName(); + // ✅ 拼接完整绝对路径 + String remoteFullPath = remoteDir + (remoteDir.endsWith("/") ? "" : "/") + fileName; + + // ✅ 直接用完整路径上传,不依赖 cd 目录 + channelSftp.put(inputStream, remoteFullPath); + // ✅ 用完整路径校验,绝对不会错 + channelSftp.stat(remoteFullPath); + + uploadOk = true; + + result.setSuccess(true); + result.setRemotePath(remoteFullPath); + result.setFileSize(localFile.length()); + log.info("上传成功: " + fileName + " 剩余重试:" + retry); + + } catch (Exception e) { + log.info(e.getMessage()); + retry--; + log.error("上传失败,剩余重试次数 " + retry + ":" + localFilePath); + if (retry == 0) { + result.setSuccess(false); + result.setErrorMessage("最终失败:" + e.getMessage()); + } + Thread.sleep(1000); + } + } + + results.add(result); + } + + long successCount = results.stream().filter(UploadResult::isSuccess).count(); + long failCount = results.size() - successCount; + log.info("批量上传完成!成功: " + successCount + ", 失败: " + failCount); + + } finally { + safeDisconnect(session,channelSftp); + log.info("连接已关闭"); + } + + return results; + } + + /** + * 安全的关闭方法 + */ + private static void safeDisconnect(Session session, ChannelSftp channelSftp) { + if (channelSftp != null) { + try { + if (channelSftp.isConnected()) { + channelSftp.exit(); // 退出 SFTP 通道 + channelSftp.disconnect(); + } + } catch (Exception e) { + log.error("关闭 SFTP 通道失败: " + e.getMessage()); + } + } + + if (session != null) { + try { + if (session.isConnected()) { + session.disconnect(); + } + } catch (Exception e) { + log.error("关闭 Session 失败: " + e.getMessage()); + } + } + } + /** + * 从远程服务器下载文件 + * + * @param host 远程服务器IP + * @param port 远程服务器端口(默认22) + * @param username 服务器用户名 + * @param password 服务器密码 + * @param remoteFilePath 远程文件路径(如 /opt/data/test.txt) + * @param localDir 本地目标目录(如 /data/download/) + * @return 下载后的本地文件路径 + * @throws Exception 下载异常 + */ + public static String downloadFile(String host, int port, String username, String password, + String remoteFilePath, String localDir, + boolean deleteAfterDownload) throws Exception { + + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + OutputStream outputStream = null; + + try { + // 1. 创建SSH会话 + session = jsch.getSession(username, host, port); + session.setPassword(password); + + // 2. 设置配置 + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + session.setConfig(config); + + // 3. 连接服务器 + log.info("正在连接远程服务器:" + host); + session.connect(); + log.info("服务器连接成功!"); + + // 4. 打开SFTP通道 + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + // 5. 检查远程文件是否存在 + try { + channelSftp.stat(remoteFilePath); + } catch (SftpException e) { + throw new FileNotFoundException("远程文件不存在: " + remoteFilePath); + } + + // 6. 创建本地目录(如果不存在) + File localDirFile = new File(localDir); + if (!localDirFile.exists()) { + localDirFile.mkdirs(); + log.info("创建本地目录:" + localDir); + } + + // 7. 生成本地文件路径 + String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/") + 1); + String localFilePath = localDir + fileName; + outputStream = new FileOutputStream(new File(localFilePath)); + + // 8. 下载文件 + log.info("开始下载文件:" + fileName); + channelSftp.get(remoteFilePath, outputStream); + log.info("文件下载完成!本地路径:" + localFilePath); + + + // 下载成功后删除远程文件 + if (deleteAfterDownload) { + try { + channelSftp.rm(remoteFilePath); + log.info("已删除远程文件: " + remoteFilePath); + } catch (SftpException e) { + log.error("删除远程文件失败: " + remoteFilePath + ", " + e.getMessage()); + } + } + return localFilePath; + + } finally { + // 9. 关闭流和连接 + if (outputStream != null) outputStream.close(); + if (channelSftp != null && channelSftp.isConnected()) channelSftp.disconnect(); + if (session != null && session.isConnected()) session.disconnect(); + log.info("连接已关闭"); + } + } + + + + /** + * 批量下载并删除远程文件(下载成功后删除远程文件) + * + * @param host 远程服务器IP + * @param port 远程服务器端口 + * @param username 用户名 + * @param password 密码 + * @param remoteFilePaths 远程文件路径列表 + * @param localDir 本地目标目录 + * @param deleteAfterDownload 下载后是否删除远程文件 + * @return 下载结果列表 + * @throws Exception 连接异常 + */ + public static List batchDownloadAndDelete(String host, int port, String username, String password, + List remoteFilePaths, String localDir, + boolean deleteAfterDownload) throws Exception { + + List results = new ArrayList<>(); + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + + try { + // 创建并连接 + session = jsch.getSession(username, host, port); + session.setPassword(password); + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + session.setConfig(config); + session.setTimeout(30000); + session.connect(); + log.info("服务器连接成功!"); + + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + // 创建本地目录 + File localDirFile = new File(localDir); + if (!localDirFile.exists()) { + localDirFile.mkdirs(); + log.info("创建本地目录:" + localDir); + } + + log.info("开始批量下载文件,共 " + remoteFilePaths.size() + " 个文件"); + + for (String remoteFilePath : remoteFilePaths) { + DownloadResult result = new DownloadResult(); + result.setRemoteFilePath(remoteFilePath); + + OutputStream outputStream = null; + try { + String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/") + 1); + String localFilePath = localDir + (localDir.endsWith("/") ? "" : "/") + fileName; + + outputStream = new FileOutputStream(new File(localFilePath)); + channelSftp.get(remoteFilePath, outputStream); + + result.setSuccess(true); + result.setLocalFilePath(localFilePath); + log.info("下载成功: " + fileName); + + // 下载成功后删除远程文件 + if (deleteAfterDownload) { + try { + channelSftp.rm(remoteFilePath); + log.info("已删除远程文件: " + remoteFilePath); + } catch (SftpException e) { + log.error("删除远程文件失败: " + remoteFilePath + ", " + e.getMessage()); + } + } + + } catch (Exception e) { + result.setSuccess(false); + result.setErrorMessage(e.getMessage()); + log.error("下载失败: " + remoteFilePath + ", 错误: " + e.getMessage()); + } finally { + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + // 忽略 + } + } + } + results.add(result); + } + + long successCount = results.stream().filter(DownloadResult::isSuccess).count(); + long failCount = results.size() - successCount; + log.info("批量下载完成!成功: " + successCount + ", 失败: " + failCount); + + } finally { + if (channelSftp != null && channelSftp.isConnected()) { + channelSftp.disconnect(); + } + if (session != null && session.isConnected()) { + session.disconnect(); + } + log.info("连接已关闭"); + } + + return results; + } + + + /** + * 列出远程目录下的文件 + * + * @param host 远程服务器IP + * @param port 远程服务器端口 + * @param username 用户名 + * @param password 密码 + * @param remoteDir 远程目录 + * @return 文件列表 + * @throws Exception 异常 + */ + public static java.util.Vector listFiles(String host, int port, + String username, String password, + String remoteDir) throws Exception { + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + + try { + session = jsch.getSession(username, host, port); + session.setPassword(password); + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + + session.setConfig(config); + session.connect(); + + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + return channelSftp.ls(remoteDir); + + }catch (Exception e){ + log.error("查看远程目录失败{}",remoteDir,e); + throw new RuntimeException(e); + }finally { + if (channelSftp != null && channelSftp.isConnected()) channelSftp.disconnect(); + if (session != null && session.isConnected()) session.disconnect(); + } + } + + /** + * 删除远程文件 + * + * @param host 远程服务器IP + * @param port 远程服务器端口 + * @param username 用户名 + * @param password 密码 + * @param remoteFilePath 远程文件路径 + * @throws Exception 异常 + */ + public static void deleteRemoteFile(String host, int port, String username, String password, + String remoteFilePath) throws Exception { + JSch jsch = new JSch(); + Session session = null; + ChannelSftp channelSftp = null; + + try { + session = jsch.getSession(username, host, port); + session.setPassword(password); + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + config.put("server_host_key", "ssh-rsa,ssh-dss"); + + session.setConfig(config); + session.connect(); + + Channel channel = session.openChannel("sftp"); + channel.connect(); + channelSftp = (ChannelSftp) channel; + + channelSftp.rm(remoteFilePath); + log.info("远程文件已删除:" + remoteFilePath); + + } finally { + if (channelSftp != null && channelSftp.isConnected()) channelSftp.disconnect(); + if (session != null && session.isConnected()) session.disconnect(); + } + } + + /** + * 上传文件(使用默认端口22) + */ + public static void uploadFile(String host, String username, String password, + String localFilePath, String remoteDir) throws Exception { + uploadFile(host, DEFAULT_PORT, username, password, localFilePath, remoteDir); + } + + +} diff --git a/relational_migration/relational_target/src/main/resources/application-insert.yml b/relational_migration/relational_target/src/main/resources/application-insert.yml new file mode 100644 index 0000000..8f459b4 --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/application-insert.yml @@ -0,0 +1,35 @@ +spring: + #数据库内容配置 + datasource: + druid: + driver-class-name: dm.jdbc.driver.DmDriver + url: jdbc:dm://192.168.1.21:5236/PQSINFO_LN?useUnicode=true&characterEncoding=utf-8 + username: PQSINFO_LN + password: Pqsadmin123 + #初始化建立物理连接的个数、最小、最大连接数 + initial-size: 5 + min-idle: 5 + max-active: 50 + #获取连接最大等待时间,单位毫秒 + max-wait: 60000 + #链接保持空间而不被驱逐的最长时间,单位毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: select 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + + + +sync: + ip: 192.168.1.68 + username: root + password: dnzl@#001 + import: + localPath: D:/data/import/ + remotePath: /home/export/ + export: + localPath: D:/data/export/ + remotePath: /home/export/ diff --git a/relational_migration/relational_target/src/main/resources/application-insert_up.yml b/relational_migration/relational_target/src/main/resources/application-insert_up.yml new file mode 100644 index 0000000..1c89175 --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/application-insert_up.yml @@ -0,0 +1,36 @@ +spring: + #数据库内容配置 + datasource: + druid: + driver-class-name: dm.jdbc.driver.DmDriver + url: jdbc:dm://dky/PQSADMIN?useUnicode=true&characterEncoding=utf-8 + username: PQSADMIN + password: Pqsadmin.123 + #初始化建立物理连接的个数、最小、最大连接数 + initial-size: 5 + min-idle: 5 + max-active: 50 + #获取连接最大等待时间,单位毫秒 + max-wait: 60000 + #链接保持空间而不被驱逐的最长时间,单位毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: select 1 from dual + test-while-idle: true + test-on-borrow: false + test-on-return: false + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + + + +sync: + ip: 10.21.39.5 + port: 22 + username: njcn + password: "@#001njcnpqs" + import: + localPath: /home/dcloud/import/ + remotePath: /home/d5000/liaoning/file-recv/7/isolate_recv/ + export: + localPath: D:/data/export/ + remotePath: /home/export/ diff --git a/relational_migration/relational_target/src/main/resources/application-query.yml b/relational_migration/relational_target/src/main/resources/application-query.yml new file mode 100644 index 0000000..1f9a96f --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/application-query.yml @@ -0,0 +1,35 @@ +spring: + #数据库内容配置 + datasource: + druid: + driver-class-name: dm.jdbc.driver.DmDriver + url: jdbc:dm://192.168.1.21:5236/PQSADMIN?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT + username: PQSADMIN + password: Pqsadmin123 + #初始化建立物理连接的个数、最小、最大连接数 + initial-size: 5 + min-idle: 5 + max-active: 50 + #获取连接最大等待时间,单位毫秒 + max-wait: 60000 + #链接保持空间而不被驱逐的最长时间,单位毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: select 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + + + +sync: + ip: 192.168.1.68 + username: root + password: dnzl@#001 + export: + localPath: D:/data/export/ + remotePath: /home/export/ + import: + localPath: D:/data/export/ + remotePath: /home/export/ diff --git a/relational_migration/relational_target/src/main/resources/application-query_up.yml b/relational_migration/relational_target/src/main/resources/application-query_up.yml new file mode 100644 index 0000000..2563168 --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/application-query_up.yml @@ -0,0 +1,36 @@ +spring: + #数据库内容配置 + datasource: + druid: + driver-class-name: dm.jdbc.driver.DmDriver + url: jdbc:dm://10.11.7.6:15236/PQSADMIN?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT + username: PQSADMIN + password: Pqsadmin123 + #初始化建立物理连接的个数、最小、最大连接数 + initial-size: 5 + min-idle: 5 + max-active: 50 + #获取连接最大等待时间,单位毫秒 + max-wait: 60000 + #链接保持空间而不被驱逐的最长时间,单位毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: select 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + + + +sync: + ip: 10.11.8.22 + port: 22 + username: njcn + password: "@#001njcnpqs" + export: + localPath: /home/lnyw/export/ + remotePath: /home/d5000/liaoning/file-send/7/ + import: + localPath: D:/data/export/ + remotePath: /home/import/ diff --git a/relational_migration/relational_target/src/main/resources/logback-spring.xml b/relational_migration/relational_target/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..fa95188 --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/logback-spring.xml @@ -0,0 +1,81 @@ + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + /home/lnyw/logs/transport/transport${appName}.log + + /home/lnyw/logs/transport/transport${appName}-%d{yyyy-MM-dd}.log + 15 + 10GB + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + /home/lnyw/logs/transport/transport${appName}-info.log + + /home/lnyw/logs/transport/transport${appName}-info-%d{yyyy-MM-dd}.log + 15 + 5GB + + + + INFO + ACCEPT + DENY + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + /home/lnyw/logs/transport/transport${appName}-error.log + + /home/lnyw/logs/transport/transport${appName}-error-%d{yyyy-MM-dd}.log + 30 + 5GB + + + ERROR + ACCEPT + DENY + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + + + + + + + + diff --git a/relational_migration/relational_target/src/main/resources/static/js/axios.min.js b/relational_migration/relational_target/src/main/resources/static/js/axios.min.js new file mode 100644 index 0000000..826b263 --- /dev/null +++ b/relational_migration/relational_target/src/main/resources/static/js/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t,n){"use strict";var r,o=n(4),i=Object.prototype.toString,s=(r=Object.create(null),function(e){var t=i.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var d=a("Date"),h=a("File"),m=a("Blob"),v=a("FileList");function y(e){return"[object Function]"===i.call(e)}var g=a("URLSearchParams");function E(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var n=0,r=e.length;n0;)s[i=r[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:O,isFileList:v}},function(e,t,n){"use strict";var r=n(0);function o(e,t,n,r,o){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var i=o.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(o,s),Object.defineProperty(i,"isAxiosError",{value:!0}),o.from=function(e,t,n,s,a,u){var c=Object.create(i);return r.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,n,s,a),c.name=e.name,u&&Object.assign(c,u),c},e.exports=o},function(e,t,n){"use strict";var r=n(1);function o(e){r.call(this,null==e?"canceled":e,r.ERR_CANCELED),this.name="CanceledError"}n(0).inherits(o,r,{__CANCEL__:!0}),e.exports=o},function(e,t,n){"use strict";var r=n(0),o=n(19),i=n(1),s=n(6),a=n(7),u={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var f,l={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(f=n(8)),f),transformRequest:[function(e,t){if(o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,i=r.isObject(e),s=t&&t["Content-Type"];if((n=r.isFileList(e))||i&&"multipart/form-data"===s){var u=this.env&&this.env.FormData;return a(n?{"files[]":e}:e,u&&new u)}return i||"application/json"===s?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||l.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,s=!n&&"json"===this.responseType;if(s||o&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i.from(e,i.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(27)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){l.headers[e]=r.merge(u)})),e.exports=l},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},function(e,t){e.exports=null},function(e,t,n){"use strict";var r=n(12).version,o=n(1),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new o(i(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[r]&&(s[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),i=r.length;i-- >0;){var s=r[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},function(e,t,n){"use strict";var r=n(2);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t3?0:(e-e%10!=10)*e%10]}};var g={D:function(e){return e.getDay()},DD:function(e){return d(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return d(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return d(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return d(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return d(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return d(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return d(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return d(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return d(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return d(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return d(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+d(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},y={d:["\\d\\d?",function(e,t){e.day=t}],Do:["\\d\\d?"+a,function(e,t){e.day=parseInt(t,10)}],M:["\\d\\d?",function(e,t){e.month=t-1}],yy:["\\d\\d?",function(e,t){var n=+(""+(new Date).getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:["\\d\\d?",function(e,t){e.hour=t}],m:["\\d\\d?",function(e,t){e.minute=t}],s:["\\d\\d?",function(e,t){e.second=t}],yyyy:["\\d{4}",function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:["\\d{3}",function(e,t){e.millisecond=t}],D:["\\d\\d?",u],ddd:[a,u],MMM:[a,h("monthNamesShort")],MMMM:[a,h("monthNames")],a:[a,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};y.dd=y.d,y.dddd=y.ddd,y.DD=y.D,y.mm=y.m,y.hh=y.H=y.HH=y.h,y.MM=y.M,y.ss=y.s,y.A=y.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks.default;var r=[];return(t=(t=t.replace(l,function(e,t){return r.push(t),"@@@"})).replace(s,function(t){return t in g?g[t](e,i):t.slice(1,t.length-1)})).replace(/@@@/g,function(){return r.shift()})},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},a=[],u=[];t=t.replace(l,function(e,t){return u.push(t),"@@@"});var c,h=(c=t,c.replace(/[|\\{()[^$+*?.-]/g,"\\$&")).replace(s,function(e){if(y[e]){var t=y[e];return a.push(t[1]),"("+t[0]+")"}return e});h=h.replace(/@@@/g,function(){return u.shift()});var d=e.match(new RegExp(h,"i"));if(!d)return null;for(var f=1;fe?u():!0!==t&&(r=setTimeout(i?function(){r=void 0}:u,void 0===i?e-a:e))}}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce(function(e,t){var r,o,s,a,l;for(s in t)if(r=e[s],o=t[s],r&&n.test(s))if("class"===s&&("string"==typeof r&&(l=r,e[s]=r={},r[l]=!0),"string"==typeof o&&(l=o,t[s]=o={},o[l]=!0)),"on"===s||"nativeOn"===s||"hook"===s)for(a in o)r[a]=i(r[a],o[a]);else if(Array.isArray(r))e[s]=r.concat(o);else if(Array.isArray(o))e[s]=[r].concat(o);else for(a in o)r[a]=o[a];else e[s]=t[s];return e},{})}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";t.__esModule=!0;var i,r=n(57),o=(i=r)&&i.__esModule?i:{default:i};t.default=o.default||function(e){for(var t=1;t>>1,z=[["ary",k],["bind",g],["bindKey",y],["curry",_],["curryRight",w],["flip",D],["partial",x],["partialRight",C],["rearg",S]],R="[object Arguments]",H="[object Array]",j="[object AsyncFunction]",W="[object Boolean]",q="[object Date]",Y="[object DOMException]",K="[object Error]",U="[object Function]",G="[object GeneratorFunction]",X="[object Map]",Z="[object Number]",J="[object Null]",Q="[object Object]",ee="[object Proxy]",te="[object RegExp]",ne="[object Set]",ie="[object String]",re="[object Symbol]",oe="[object Undefined]",se="[object WeakMap]",ae="[object WeakSet]",le="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",he="[object Float64Array]",de="[object Int8Array]",fe="[object Int16Array]",pe="[object Int32Array]",me="[object Uint8Array]",ve="[object Uint8ClampedArray]",ge="[object Uint16Array]",ye="[object Uint32Array]",be=/\b__p \+= '';/g,_e=/\b(__p \+=) '' \+/g,we=/(__e\(.*?\)|\b__t\)) \+\n'';/g,xe=/&(?:amp|lt|gt|quot|#39);/g,Ce=/[&<>"']/g,ke=RegExp(xe.source),Se=RegExp(Ce.source),De=/<%-([\s\S]+?)%>/g,Ee=/<%([\s\S]+?)%>/g,$e=/<%=([\s\S]+?)%>/g,Te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Me=/^\w*$/,Ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oe=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Oe.source),Ie=/^\s+|\s+$/g,Ae=/^\s+/,Fe=/\s+$/,Le=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ve=/\{\n\/\* \[wrapped with (.+)\] \*/,Be=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Re=/\\(\\)?/g,He=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,je=/\w*$/,We=/^[-+]0x[0-9a-f]+$/i,qe=/^0b[01]+$/i,Ye=/^\[object .+?Constructor\]$/,Ke=/^0o[0-7]+$/i,Ue=/^(?:0|[1-9]\d*)$/,Ge=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xe=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Je="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",et="[\\ud800-\\udfff]",tt="["+Qe+"]",nt="["+Je+"]",it="\\d+",rt="[\\u2700-\\u27bf]",ot="[a-z\\xdf-\\xf6\\xf8-\\xff]",st="[^\\ud800-\\udfff"+Qe+it+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",at="\\ud83c[\\udffb-\\udfff]",lt="[^\\ud800-\\udfff]",ut="(?:\\ud83c[\\udde6-\\uddff]){2}",ct="[\\ud800-\\udbff][\\udc00-\\udfff]",ht="[A-Z\\xc0-\\xd6\\xd8-\\xde]",dt="(?:"+ot+"|"+st+")",ft="(?:"+ht+"|"+st+")",pt="(?:"+nt+"|"+at+")"+"?",mt="[\\ufe0e\\ufe0f]?"+pt+("(?:\\u200d(?:"+[lt,ut,ct].join("|")+")[\\ufe0e\\ufe0f]?"+pt+")*"),vt="(?:"+[rt,ut,ct].join("|")+")"+mt,gt="(?:"+[lt+nt+"?",nt,ut,ct,et].join("|")+")",yt=RegExp("['’]","g"),bt=RegExp(nt,"g"),_t=RegExp(at+"(?="+at+")|"+gt+mt,"g"),wt=RegExp([ht+"?"+ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tt,ht,"$"].join("|")+")",ft+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tt,ht+dt,"$"].join("|")+")",ht+"?"+dt+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ht+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",it,vt].join("|"),"g"),xt=RegExp("[\\u200d\\ud800-\\udfff"+Je+"\\ufe0e\\ufe0f]"),Ct=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],St=-1,Dt={};Dt[ce]=Dt[he]=Dt[de]=Dt[fe]=Dt[pe]=Dt[me]=Dt[ve]=Dt[ge]=Dt[ye]=!0,Dt[R]=Dt[H]=Dt[le]=Dt[W]=Dt[ue]=Dt[q]=Dt[K]=Dt[U]=Dt[X]=Dt[Z]=Dt[Q]=Dt[te]=Dt[ne]=Dt[ie]=Dt[se]=!1;var Et={};Et[R]=Et[H]=Et[le]=Et[ue]=Et[W]=Et[q]=Et[ce]=Et[he]=Et[de]=Et[fe]=Et[pe]=Et[X]=Et[Z]=Et[Q]=Et[te]=Et[ne]=Et[ie]=Et[re]=Et[me]=Et[ve]=Et[ge]=Et[ye]=!0,Et[K]=Et[U]=Et[se]=!1;var $t={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Tt=parseFloat,Mt=parseInt,Nt="object"==typeof e&&e&&e.Object===Object&&e,Ot="object"==typeof self&&self&&self.Object===Object&&self,Pt=Nt||Ot||Function("return this")(),It=t&&!t.nodeType&&t,At=It&&"object"==typeof i&&i&&!i.nodeType&&i,Ft=At&&At.exports===It,Lt=Ft&&Nt.process,Vt=function(){try{var e=At&&At.require&&At.require("util").types;return e||Lt&&Lt.binding&&Lt.binding("util")}catch(e){}}(),Bt=Vt&&Vt.isArrayBuffer,zt=Vt&&Vt.isDate,Rt=Vt&&Vt.isMap,Ht=Vt&&Vt.isRegExp,jt=Vt&&Vt.isSet,Wt=Vt&&Vt.isTypedArray;function qt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Yt(e,t,n,i){for(var r=-1,o=null==e?0:e.length;++r-1}function Jt(e,t,n){for(var i=-1,r=null==e?0:e.length;++i-1;);return n}function wn(e,t){for(var n=e.length;n--&&ln(t,e[n],0)>-1;);return n}var xn=fn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Cn=fn({"&":"&","<":"<",">":">",'"':""","'":"'"});function kn(e){return"\\"+$t[e]}function Sn(e){return xt.test(e)}function Dn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,i){n[++t]=[i,e]}),n}function En(e,t){return function(n){return e(t(n))}}function $n(e,t){for(var n=-1,i=e.length,r=0,o=[];++n",""":'"',"'":"'"});var An=function e(t){var n,i=(t=null==t?Pt:An.defaults(Pt.Object(),t,An.pick(Pt,kt))).Array,r=t.Date,Je=t.Error,Qe=t.Function,et=t.Math,tt=t.Object,nt=t.RegExp,it=t.String,rt=t.TypeError,ot=i.prototype,st=Qe.prototype,at=tt.prototype,lt=t["__core-js_shared__"],ut=st.toString,ct=at.hasOwnProperty,ht=0,dt=(n=/[^.]+$/.exec(lt&<.keys&<.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",ft=at.toString,pt=ut.call(tt),mt=Pt._,vt=nt("^"+ut.call(ct).replace(Oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),gt=Ft?t.Buffer:o,_t=t.Symbol,xt=t.Uint8Array,$t=gt?gt.allocUnsafe:o,Nt=En(tt.getPrototypeOf,tt),Ot=tt.create,It=at.propertyIsEnumerable,At=ot.splice,Lt=_t?_t.isConcatSpreadable:o,Vt=_t?_t.iterator:o,on=_t?_t.toStringTag:o,fn=function(){try{var e=zo(tt,"defineProperty");return e({},"",{}),e}catch(e){}}(),Fn=t.clearTimeout!==Pt.clearTimeout&&t.clearTimeout,Ln=r&&r.now!==Pt.Date.now&&r.now,Vn=t.setTimeout!==Pt.setTimeout&&t.setTimeout,Bn=et.ceil,zn=et.floor,Rn=tt.getOwnPropertySymbols,Hn=gt?gt.isBuffer:o,jn=t.isFinite,Wn=ot.join,qn=En(tt.keys,tt),Yn=et.max,Kn=et.min,Un=r.now,Gn=t.parseInt,Xn=et.random,Zn=ot.reverse,Jn=zo(t,"DataView"),Qn=zo(t,"Map"),ei=zo(t,"Promise"),ti=zo(t,"Set"),ni=zo(t,"WeakMap"),ii=zo(tt,"create"),ri=ni&&new ni,oi={},si=hs(Jn),ai=hs(Qn),li=hs(ei),ui=hs(ti),ci=hs(ni),hi=_t?_t.prototype:o,di=hi?hi.valueOf:o,fi=hi?hi.toString:o;function pi(e){if($a(e)&&!ga(e)&&!(e instanceof yi)){if(e instanceof gi)return e;if(ct.call(e,"__wrapped__"))return ds(e)}return new gi(e)}var mi=function(){function e(){}return function(t){if(!Ea(t))return{};if(Ot)return Ot(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function vi(){}function gi(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function yi(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=L,this.__views__=[]}function bi(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Fi(e,t,n,i,r,s){var a,l=t&d,u=t&f,c=t&p;if(n&&(a=r?n(e,i,r,s):n(e)),a!==o)return a;if(!Ea(e))return e;var h=ga(e);if(h){if(a=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&ct.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!l)return io(e,a)}else{var m=jo(e),v=m==U||m==G;if(wa(e))return Zr(e,l);if(m==Q||m==R||v&&!r){if(a=u||v?{}:qo(e),!l)return u?function(e,t){return ro(e,Ho(e),t)}(e,function(e,t){return e&&ro(t,ol(t),e)}(a,e)):function(e,t){return ro(e,Ro(e),t)}(e,Oi(a,e))}else{if(!Et[m])return r?e:{};a=function(e,t,n){var i,r,o,s=e.constructor;switch(t){case le:return Jr(e);case W:case q:return new s(+e);case ue:return function(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case ce:case he:case de:case fe:case pe:case me:case ve:case ge:case ye:return Qr(e,n);case X:return new s;case Z:case ie:return new s(e);case te:return(o=new(r=e).constructor(r.source,je.exec(r))).lastIndex=r.lastIndex,o;case ne:return new s;case re:return i=e,di?tt(di.call(i)):{}}}(e,m,l)}}s||(s=new Ci);var g=s.get(e);if(g)return g;if(s.set(e,a),Pa(e))return e.forEach(function(i){a.add(Fi(i,t,n,i,e,s))}),a;if(Ta(e))return e.forEach(function(i,r){a.set(r,Fi(i,t,n,r,e,s))}),a;var y=h?o:(c?u?Po:Oo:u?ol:rl)(e);return Kt(y||e,function(i,r){y&&(i=e[r=i]),Ti(a,r,Fi(i,t,n,r,e,s))}),a}function Li(e,t,n){var i=n.length;if(null==e)return!i;for(e=tt(e);i--;){var r=n[i],s=t[r],a=e[r];if(a===o&&!(r in e)||!s(a))return!1}return!0}function Vi(e,t,n){if("function"!=typeof e)throw new rt(l);return rs(function(){e.apply(o,n)},t)}function Bi(e,t,n,i){var r=-1,o=Zt,a=!0,l=e.length,u=[],c=t.length;if(!l)return u;n&&(t=Qt(t,gn(n))),i?(o=Jt,a=!1):t.length>=s&&(o=bn,a=!1,t=new xi(t));e:for(;++r-1},_i.prototype.set=function(e,t){var n=this.__data__,i=Mi(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},wi.prototype.clear=function(){this.size=0,this.__data__={hash:new bi,map:new(Qn||_i),string:new bi}},wi.prototype.delete=function(e){var t=Vo(this,e).delete(e);return this.size-=t?1:0,t},wi.prototype.get=function(e){return Vo(this,e).get(e)},wi.prototype.has=function(e){return Vo(this,e).has(e)},wi.prototype.set=function(e,t){var n=Vo(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},xi.prototype.add=xi.prototype.push=function(e){return this.__data__.set(e,u),this},xi.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.clear=function(){this.__data__=new _i,this.size=0},Ci.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ci.prototype.get=function(e){return this.__data__.get(e)},Ci.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _i){var i=n.__data__;if(!Qn||i.length0&&n(a)?t>1?qi(a,t-1,n,i,r):en(r,a):i||(r[r.length]=a)}return r}var Yi=lo(),Ki=lo(!0);function Ui(e,t){return e&&Yi(e,t,rl)}function Gi(e,t){return e&&Ki(e,t,rl)}function Xi(e,t){return Xt(t,function(t){return ka(e[t])})}function Zi(e,t){for(var n=0,i=(t=Kr(t,e)).length;null!=e&&nt}function tr(e,t){return null!=e&&ct.call(e,t)}function nr(e,t){return null!=e&&t in tt(e)}function ir(e,t,n){for(var r=n?Jt:Zt,s=e[0].length,a=e.length,l=a,u=i(a),c=1/0,h=[];l--;){var d=e[l];l&&t&&(d=Qt(d,gn(t))),c=Kn(d.length,c),u[l]=!n&&(t||s>=120&&d.length>=120)?new xi(l&&d):o}d=e[0];var f=-1,p=u[0];e:for(;++f=a)return l;var u=n[i];return l*("desc"==u?-1:1)}}return e.index-t.index}(e,t,n)})}function br(e,t,n){for(var i=-1,r=t.length,o={};++i-1;)a!==e&&At.call(a,l,1),At.call(e,l,1);return e}function wr(e,t){for(var n=e?t.length:0,i=n-1;n--;){var r=t[n];if(n==i||r!==o){var o=r;Ko(r)?At.call(e,r,1):Br(e,r)}}return e}function xr(e,t){return e+zn(Xn()*(t-e+1))}function Cr(e,t){var n="";if(!e||t<1||t>I)return n;do{t%2&&(n+=e),(t=zn(t/2))&&(e+=e)}while(t);return n}function kr(e,t){return os(ts(e,t,Ml),e+"")}function Sr(e){return Si(fl(e))}function Dr(e,t){var n=fl(e);return ls(n,Ai(t,0,n.length))}function Er(e,t,n,i){if(!Ea(e))return e;for(var r=-1,s=(t=Kr(t,e)).length,a=s-1,l=e;null!=l&&++ro?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=i(o);++r>>1,s=e[o];null!==s&&!Aa(s)&&(n?s<=t:s=s){var c=t?null:ko(e);if(c)return Mn(c);a=!1,r=bn,u=new xi}else u=t?[]:l;e:for(;++i=i?e:Nr(e,t,n)}var Xr=Fn||function(e){return Pt.clearTimeout(e)};function Zr(e,t){if(t)return e.slice();var n=e.length,i=$t?$t(n):new e.constructor(n);return e.copy(i),i}function Jr(e){var t=new e.constructor(e.byteLength);return new xt(t).set(new xt(e)),t}function Qr(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function eo(e,t){if(e!==t){var n=e!==o,i=null===e,r=e==e,s=Aa(e),a=t!==o,l=null===t,u=t==t,c=Aa(t);if(!l&&!c&&!s&&e>t||s&&a&&u&&!l&&!c||i&&a&&u||!n&&u||!r)return 1;if(!i&&!s&&!c&&e1?n[r-1]:o,a=r>2?n[2]:o;for(s=e.length>3&&"function"==typeof s?(r--,s):o,a&&Uo(n[0],n[1],a)&&(s=r<3?o:s,r=1),t=tt(t);++i-1?r[s?t[a]:a]:o}}function po(e){return No(function(t){var n=t.length,i=n,r=gi.prototype.thru;for(e&&t.reverse();i--;){var s=t[i];if("function"!=typeof s)throw new rt(l);if(r&&!a&&"wrapper"==Ao(s))var a=new gi([],!0)}for(i=a?i:n;++i1&&_.reverse(),d&&cl))return!1;var c=s.get(e);if(c&&s.get(t))return c==t;var h=-1,d=!0,f=n&v?new xi:o;for(s.set(e,t),s.set(t,e);++h-1&&e%1==0&&e1?"& ":"")+t[i],t=t.join(n>2?", ":" "),e.replace(Le,"{\n/* [wrapped with "+t+"] */\n")}(i,function(e,t){return Kt(z,function(n){var i="_."+n[0];t&n[1]&&!Zt(e,i)&&e.push(i)}),e.sort()}(function(e){var t=e.match(Ve);return t?t[1].split(Be):[]}(i),n)))}function as(e){var t=0,n=0;return function(){var i=Un(),r=M-(i-n);if(n=i,r>0){if(++t>=T)return arguments[0]}else t=0;return e.apply(o,arguments)}}function ls(e,t){var n=-1,i=e.length,r=i-1;for(t=t===o?i:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,Os(e,n)});function Bs(e){var t=pi(e);return t.__chain__=!0,t}function zs(e,t){return t(e)}var Rs=No(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,r=function(t){return Ii(t,e)};return!(t>1||this.__actions__.length)&&i instanceof yi&&Ko(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:zs,args:[r],thisArg:o}),new gi(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(o),e})):this.thru(r)});var Hs=oo(function(e,t,n){ct.call(e,n)?++e[n]:Pi(e,n,1)});var js=fo(vs),Ws=fo(gs);function qs(e,t){return(ga(e)?Kt:zi)(e,Lo(t,3))}function Ys(e,t){return(ga(e)?Ut:Ri)(e,Lo(t,3))}var Ks=oo(function(e,t,n){ct.call(e,n)?e[n].push(t):Pi(e,n,[t])});var Us=kr(function(e,t,n){var r=-1,o="function"==typeof t,s=ba(e)?i(e.length):[];return zi(e,function(e){s[++r]=o?qt(t,e,n):rr(e,t,n)}),s}),Gs=oo(function(e,t,n){Pi(e,n,t)});function Xs(e,t){return(ga(e)?Qt:fr)(e,Lo(t,3))}var Zs=oo(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});var Js=kr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Uo(e,t[0],t[1])?t=[]:n>2&&Uo(t[0],t[1],t[2])&&(t=[t[0]]),yr(e,qi(t,1),[])}),Qs=Ln||function(){return Pt.Date.now()};function ea(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Do(e,k,o,o,o,o,t)}function ta(e,t){var n;if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var na=kr(function(e,t,n){var i=g;if(n.length){var r=$n(n,Fo(na));i|=x}return Do(e,i,t,n,r)}),ia=kr(function(e,t,n){var i=g|y;if(n.length){var r=$n(n,Fo(ia));i|=x}return Do(t,i,e,n,r)});function ra(e,t,n){var i,r,s,a,u,c,h=0,d=!1,f=!1,p=!0;if("function"!=typeof e)throw new rt(l);function m(t){var n=i,s=r;return i=r=o,h=t,a=e.apply(s,n)}function v(e){var n=e-c;return c===o||n>=t||n<0||f&&e-h>=s}function g(){var e=Qs();if(v(e))return y(e);u=rs(g,function(e){var n=t-(e-c);return f?Kn(n,s-(e-h)):n}(e))}function y(e){return u=o,p&&i?m(e):(i=r=o,a)}function b(){var e=Qs(),n=v(e);if(i=arguments,r=this,c=e,n){if(u===o)return function(e){return h=e,u=rs(g,t),d?m(e):a}(c);if(f)return u=rs(g,t),m(c)}return u===o&&(u=rs(g,t)),a}return t=ja(t)||0,Ea(n)&&(d=!!n.leading,s=(f="maxWait"in n)?Yn(ja(n.maxWait)||0,t):s,p="trailing"in n?!!n.trailing:p),b.cancel=function(){u!==o&&Xr(u),h=0,i=c=r=u=o},b.flush=function(){return u===o?a:y(Qs())},b}var oa=kr(function(e,t){return Vi(e,1,t)}),sa=kr(function(e,t,n){return Vi(e,ja(t)||0,n)});function aa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new rt(l);var n=function(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var s=e.apply(this,i);return n.cache=o.set(r,s)||o,s};return n.cache=new(aa.Cache||wi),n}function la(e){if("function"!=typeof e)throw new rt(l);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}aa.Cache=wi;var ua=Ur(function(e,t){var n=(t=1==t.length&&ga(t[0])?Qt(t[0],gn(Lo())):Qt(qi(t,1),gn(Lo()))).length;return kr(function(i){for(var r=-1,o=Kn(i.length,n);++r=t}),va=or(function(){return arguments}())?or:function(e){return $a(e)&&ct.call(e,"callee")&&!It.call(e,"callee")},ga=i.isArray,ya=Bt?gn(Bt):function(e){return $a(e)&&Qi(e)==le};function ba(e){return null!=e&&Da(e.length)&&!ka(e)}function _a(e){return $a(e)&&ba(e)}var wa=Hn||jl,xa=zt?gn(zt):function(e){return $a(e)&&Qi(e)==q};function Ca(e){if(!$a(e))return!1;var t=Qi(e);return t==K||t==Y||"string"==typeof e.message&&"string"==typeof e.name&&!Na(e)}function ka(e){if(!Ea(e))return!1;var t=Qi(e);return t==U||t==G||t==j||t==ee}function Sa(e){return"number"==typeof e&&e==Ra(e)}function Da(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=I}function Ea(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $a(e){return null!=e&&"object"==typeof e}var Ta=Rt?gn(Rt):function(e){return $a(e)&&jo(e)==X};function Ma(e){return"number"==typeof e||$a(e)&&Qi(e)==Z}function Na(e){if(!$a(e)||Qi(e)!=Q)return!1;var t=Nt(e);if(null===t)return!0;var n=ct.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ut.call(n)==pt}var Oa=Ht?gn(Ht):function(e){return $a(e)&&Qi(e)==te};var Pa=jt?gn(jt):function(e){return $a(e)&&jo(e)==ne};function Ia(e){return"string"==typeof e||!ga(e)&&$a(e)&&Qi(e)==ie}function Aa(e){return"symbol"==typeof e||$a(e)&&Qi(e)==re}var Fa=Wt?gn(Wt):function(e){return $a(e)&&Da(e.length)&&!!Dt[Qi(e)]};var La=wo(dr),Va=wo(function(e,t){return e<=t});function Ba(e){if(!e)return[];if(ba(e))return Ia(e)?Pn(e):io(e);if(Vt&&e[Vt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Vt]());var t=jo(e);return(t==X?Dn:t==ne?Mn:fl)(e)}function za(e){return e?(e=ja(e))===P||e===-P?(e<0?-1:1)*A:e==e?e:0:0===e?e:0}function Ra(e){var t=za(e),n=t%1;return t==t?n?t-n:t:0}function Ha(e){return e?Ai(Ra(e),0,L):0}function ja(e){if("number"==typeof e)return e;if(Aa(e))return F;if(Ea(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Ea(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ie,"");var n=qe.test(e);return n||Ke.test(e)?Mt(e.slice(2),n?2:8):We.test(e)?F:+e}function Wa(e){return ro(e,ol(e))}function qa(e){return null==e?"":Lr(e)}var Ya=so(function(e,t){if(Jo(t)||ba(t))ro(t,rl(t),e);else for(var n in t)ct.call(t,n)&&Ti(e,n,t[n])}),Ka=so(function(e,t){ro(t,ol(t),e)}),Ua=so(function(e,t,n,i){ro(t,ol(t),e,i)}),Ga=so(function(e,t,n,i){ro(t,rl(t),e,i)}),Xa=No(Ii);var Za=kr(function(e,t){e=tt(e);var n=-1,i=t.length,r=i>2?t[2]:o;for(r&&Uo(t[0],t[1],r)&&(i=1);++n1),t}),ro(e,Po(e),n),i&&(n=Fi(n,d|f|p,To));for(var r=t.length;r--;)Br(n,t[r]);return n});var ul=No(function(e,t){return null==e?{}:function(e,t){return br(e,t,function(t,n){return el(e,n)})}(e,t)});function cl(e,t){if(null==e)return{};var n=Qt(Po(e),function(e){return[e]});return t=Lo(t),br(e,n,function(e,n){return t(e,n[0])})}var hl=So(rl),dl=So(ol);function fl(e){return null==e?[]:yn(e,rl(e))}var pl=co(function(e,t,n){return t=t.toLowerCase(),e+(n?ml(t):t)});function ml(e){return Cl(qa(e).toLowerCase())}function vl(e){return(e=qa(e))&&e.replace(Ge,xn).replace(bt,"")}var gl=co(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),yl=co(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),bl=uo("toLowerCase");var _l=co(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()});var wl=co(function(e,t,n){return e+(n?" ":"")+Cl(t)});var xl=co(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),Cl=uo("toUpperCase");function kl(e,t,n){return e=qa(e),(t=n?o:t)===o?function(e){return Ct.test(e)}(e)?function(e){return e.match(wt)||[]}(e):function(e){return e.match(ze)||[]}(e):e.match(t)||[]}var Sl=kr(function(e,t){try{return qt(e,o,t)}catch(e){return Ca(e)?e:new Je(e)}}),Dl=No(function(e,t){return Kt(t,function(t){t=cs(t),Pi(e,t,na(e[t],e))}),e});function El(e){return function(){return e}}var $l=po(),Tl=po(!0);function Ml(e){return e}function Nl(e){return ur("function"==typeof e?e:Fi(e,d))}var Ol=kr(function(e,t){return function(n){return rr(n,e,t)}}),Pl=kr(function(e,t){return function(n){return rr(e,n,t)}});function Il(e,t,n){var i=rl(t),r=Xi(t,i);null!=n||Ea(t)&&(r.length||!i.length)||(n=t,t=e,e=this,r=Xi(t,rl(t)));var o=!(Ea(n)&&"chain"in n&&!n.chain),s=ka(e);return Kt(r,function(n){var i=t[n];e[n]=i,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=io(this.__actions__)).push({func:i,args:arguments,thisArg:e}),n.__chain__=t,n}return i.apply(e,en([this.value()],arguments))})}),e}function Al(){}var Fl=yo(Qt),Ll=yo(Gt),Vl=yo(rn);function Bl(e){return Go(e)?dn(cs(e)):function(e){return function(t){return Zi(t,e)}}(e)}var zl=_o(),Rl=_o(!0);function Hl(){return[]}function jl(){return!1}var Wl=go(function(e,t){return e+t},0),ql=Co("ceil"),Yl=go(function(e,t){return e/t},1),Kl=Co("floor");var Ul,Gl=go(function(e,t){return e*t},1),Xl=Co("round"),Zl=go(function(e,t){return e-t},0);return pi.after=function(e,t){if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){if(--e<1)return t.apply(this,arguments)}},pi.ary=ea,pi.assign=Ya,pi.assignIn=Ka,pi.assignInWith=Ua,pi.assignWith=Ga,pi.at=Xa,pi.before=ta,pi.bind=na,pi.bindAll=Dl,pi.bindKey=ia,pi.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ga(e)?e:[e]},pi.chain=Bs,pi.chunk=function(e,t,n){t=(n?Uo(e,t,n):t===o)?1:Yn(Ra(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var s=0,a=0,l=i(Bn(r/t));sr?0:r+n),(i=i===o||i>r?r:Ra(i))<0&&(i+=r),i=n>i?0:Ha(i);n>>0)?(e=qa(e))&&("string"==typeof t||null!=t&&!Oa(t))&&!(t=Lr(t))&&Sn(e)?Gr(Pn(e),0,n):e.split(t,n):[]},pi.spread=function(e,t){if("function"!=typeof e)throw new rt(l);return t=null==t?0:Yn(Ra(t),0),kr(function(n){var i=n[t],r=Gr(n,0,t);return i&&en(r,i),qt(e,this,r)})},pi.tail=function(e){var t=null==e?0:e.length;return t?Nr(e,1,t):[]},pi.take=function(e,t,n){return e&&e.length?Nr(e,0,(t=n||t===o?1:Ra(t))<0?0:t):[]},pi.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?Nr(e,(t=i-(t=n||t===o?1:Ra(t)))<0?0:t,i):[]},pi.takeRightWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3),!1,!0):[]},pi.takeWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3)):[]},pi.tap=function(e,t){return t(e),e},pi.throttle=function(e,t,n){var i=!0,r=!0;if("function"!=typeof e)throw new rt(l);return Ea(n)&&(i="leading"in n?!!n.leading:i,r="trailing"in n?!!n.trailing:r),ra(e,t,{leading:i,maxWait:t,trailing:r})},pi.thru=zs,pi.toArray=Ba,pi.toPairs=hl,pi.toPairsIn=dl,pi.toPath=function(e){return ga(e)?Qt(e,cs):Aa(e)?[e]:io(us(qa(e)))},pi.toPlainObject=Wa,pi.transform=function(e,t,n){var i=ga(e),r=i||wa(e)||Fa(e);if(t=Lo(t,4),null==n){var o=e&&e.constructor;n=r?i?new o:[]:Ea(e)&&ka(o)?mi(Nt(e)):{}}return(r?Kt:Ui)(e,function(e,i,r){return t(n,e,i,r)}),n},pi.unary=function(e){return ea(e,1)},pi.union=$s,pi.unionBy=Ts,pi.unionWith=Ms,pi.uniq=function(e){return e&&e.length?Vr(e):[]},pi.uniqBy=function(e,t){return e&&e.length?Vr(e,Lo(t,2)):[]},pi.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?Vr(e,o,t):[]},pi.unset=function(e,t){return null==e||Br(e,t)},pi.unzip=Ns,pi.unzipWith=Os,pi.update=function(e,t,n){return null==e?e:zr(e,t,Yr(n))},pi.updateWith=function(e,t,n,i){return i="function"==typeof i?i:o,null==e?e:zr(e,t,Yr(n),i)},pi.values=fl,pi.valuesIn=function(e){return null==e?[]:yn(e,ol(e))},pi.without=Ps,pi.words=kl,pi.wrap=function(e,t){return ca(Yr(t),e)},pi.xor=Is,pi.xorBy=As,pi.xorWith=Fs,pi.zip=Ls,pi.zipObject=function(e,t){return Wr(e||[],t||[],Ti)},pi.zipObjectDeep=function(e,t){return Wr(e||[],t||[],Er)},pi.zipWith=Vs,pi.entries=hl,pi.entriesIn=dl,pi.extend=Ka,pi.extendWith=Ua,Il(pi,pi),pi.add=Wl,pi.attempt=Sl,pi.camelCase=pl,pi.capitalize=ml,pi.ceil=ql,pi.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=ja(n))==n?n:0),t!==o&&(t=(t=ja(t))==t?t:0),Ai(ja(e),t,n)},pi.clone=function(e){return Fi(e,p)},pi.cloneDeep=function(e){return Fi(e,d|p)},pi.cloneDeepWith=function(e,t){return Fi(e,d|p,t="function"==typeof t?t:o)},pi.cloneWith=function(e,t){return Fi(e,p,t="function"==typeof t?t:o)},pi.conformsTo=function(e,t){return null==t||Li(e,t,rl(t))},pi.deburr=vl,pi.defaultTo=function(e,t){return null==e||e!=e?t:e},pi.divide=Yl,pi.endsWith=function(e,t,n){e=qa(e),t=Lr(t);var i=e.length,r=n=n===o?i:Ai(Ra(n),0,i);return(n-=t.length)>=0&&e.slice(n,r)==t},pi.eq=fa,pi.escape=function(e){return(e=qa(e))&&Se.test(e)?e.replace(Ce,Cn):e},pi.escapeRegExp=function(e){return(e=qa(e))&&Pe.test(e)?e.replace(Oe,"\\$&"):e},pi.every=function(e,t,n){var i=ga(e)?Gt:Hi;return n&&Uo(e,t,n)&&(t=o),i(e,Lo(t,3))},pi.find=js,pi.findIndex=vs,pi.findKey=function(e,t){return sn(e,Lo(t,3),Ui)},pi.findLast=Ws,pi.findLastIndex=gs,pi.findLastKey=function(e,t){return sn(e,Lo(t,3),Gi)},pi.floor=Kl,pi.forEach=qs,pi.forEachRight=Ys,pi.forIn=function(e,t){return null==e?e:Yi(e,Lo(t,3),ol)},pi.forInRight=function(e,t){return null==e?e:Ki(e,Lo(t,3),ol)},pi.forOwn=function(e,t){return e&&Ui(e,Lo(t,3))},pi.forOwnRight=function(e,t){return e&&Gi(e,Lo(t,3))},pi.get=Qa,pi.gt=pa,pi.gte=ma,pi.has=function(e,t){return null!=e&&Wo(e,t,tr)},pi.hasIn=el,pi.head=bs,pi.identity=Ml,pi.includes=function(e,t,n,i){e=ba(e)?e:fl(e),n=n&&!i?Ra(n):0;var r=e.length;return n<0&&(n=Yn(r+n,0)),Ia(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&ln(e,t,n)>-1},pi.indexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=null==n?0:Ra(n);return r<0&&(r=Yn(i+r,0)),ln(e,t,r)},pi.inRange=function(e,t,n){return t=za(t),n===o?(n=t,t=0):n=za(n),function(e,t,n){return e>=Kn(t,n)&&e=-I&&e<=I},pi.isSet=Pa,pi.isString=Ia,pi.isSymbol=Aa,pi.isTypedArray=Fa,pi.isUndefined=function(e){return e===o},pi.isWeakMap=function(e){return $a(e)&&jo(e)==se},pi.isWeakSet=function(e){return $a(e)&&Qi(e)==ae},pi.join=function(e,t){return null==e?"":Wn.call(e,t)},pi.kebabCase=gl,pi.last=Cs,pi.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=i;return n!==o&&(r=(r=Ra(n))<0?Yn(i+r,0):Kn(r,i-1)),t==t?function(e,t,n){for(var i=n+1;i--;)if(e[i]===t)return i;return i}(e,t,r):an(e,cn,r,!0)},pi.lowerCase=yl,pi.lowerFirst=bl,pi.lt=La,pi.lte=Va,pi.max=function(e){return e&&e.length?ji(e,Ml,er):o},pi.maxBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),er):o},pi.mean=function(e){return hn(e,Ml)},pi.meanBy=function(e,t){return hn(e,Lo(t,2))},pi.min=function(e){return e&&e.length?ji(e,Ml,dr):o},pi.minBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),dr):o},pi.stubArray=Hl,pi.stubFalse=jl,pi.stubObject=function(){return{}},pi.stubString=function(){return""},pi.stubTrue=function(){return!0},pi.multiply=Gl,pi.nth=function(e,t){return e&&e.length?gr(e,Ra(t)):o},pi.noConflict=function(){return Pt._===this&&(Pt._=mt),this},pi.noop=Al,pi.now=Qs,pi.pad=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;if(!t||i>=t)return e;var r=(t-i)/2;return bo(zn(r),n)+e+bo(Bn(r),n)},pi.padEnd=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;return t&&it){var i=e;e=t,t=i}if(n||e%1||t%1){var r=Xn();return Kn(e+r*(t-e+Tt("1e-"+((r+"").length-1))),t)}return xr(e,t)},pi.reduce=function(e,t,n){var i=ga(e)?tn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,zi)},pi.reduceRight=function(e,t,n){var i=ga(e)?nn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,Ri)},pi.repeat=function(e,t,n){return t=(n?Uo(e,t,n):t===o)?1:Ra(t),Cr(qa(e),t)},pi.replace=function(){var e=arguments,t=qa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pi.result=function(e,t,n){var i=-1,r=(t=Kr(t,e)).length;for(r||(r=1,e=o);++iI)return[];var n=L,i=Kn(e,L);t=Lo(t),e-=L;for(var r=vn(i,t);++n=s)return e;var l=n-On(i);if(l<1)return i;var u=a?Gr(a,0,l).join(""):e.slice(0,l);if(r===o)return u+i;if(a&&(l+=u.length-l),Oa(r)){if(e.slice(l).search(r)){var c,h=u;for(r.global||(r=nt(r.source,qa(je.exec(r))+"g")),r.lastIndex=0;c=r.exec(h);)var d=c.index;u=u.slice(0,d===o?l:d)}}else if(e.indexOf(Lr(r),l)!=l){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+i},pi.unescape=function(e){return(e=qa(e))&&ke.test(e)?e.replace(xe,In):e},pi.uniqueId=function(e){var t=++ht;return qa(e)+t},pi.upperCase=xl,pi.upperFirst=Cl,pi.each=qs,pi.eachRight=Ys,pi.first=bs,Il(pi,(Ul={},Ui(pi,function(e,t){ct.call(pi.prototype,t)||(Ul[t]=e)}),Ul),{chain:!1}),pi.VERSION="4.17.10",Kt(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pi[e].placeholder=pi}),Kt(["drop","take"],function(e,t){yi.prototype[e]=function(n){n=n===o?1:Yn(Ra(n),0);var i=this.__filtered__&&!t?new yi(this):this.clone();return i.__filtered__?i.__takeCount__=Kn(n,i.__takeCount__):i.__views__.push({size:Kn(n,L),type:e+(i.__dir__<0?"Right":"")}),i},yi.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Kt(["filter","map","takeWhile"],function(e,t){var n=t+1,i=n==N||3==n;yi.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Lo(e,3),type:n}),t.__filtered__=t.__filtered__||i,t}}),Kt(["head","last"],function(e,t){var n="take"+(t?"Right":"");yi.prototype[e]=function(){return this[n](1).value()[0]}}),Kt(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");yi.prototype[e]=function(){return this.__filtered__?new yi(this):this[n](1)}}),yi.prototype.compact=function(){return this.filter(Ml)},yi.prototype.find=function(e){return this.filter(e).head()},yi.prototype.findLast=function(e){return this.reverse().find(e)},yi.prototype.invokeMap=kr(function(e,t){return"function"==typeof e?new yi(this):this.map(function(n){return rr(n,e,t)})}),yi.prototype.reject=function(e){return this.filter(la(Lo(e)))},yi.prototype.slice=function(e,t){e=Ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new yi(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=Ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},yi.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},yi.prototype.toArray=function(){return this.take(L)},Ui(yi.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),r=pi[i?"take"+("last"==t?"Right":""):t],s=i||/^find/.test(t);r&&(pi.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,l=t instanceof yi,u=a[0],c=l||ga(t),h=function(e){var t=r.apply(pi,en([e],a));return i&&d?t[0]:t};c&&n&&"function"==typeof u&&1!=u.length&&(l=c=!1);var d=this.__chain__,f=!!this.__actions__.length,p=s&&!d,m=l&&!f;if(!s&&c){t=m?t:new yi(this);var v=e.apply(t,a);return v.__actions__.push({func:zs,args:[h],thisArg:o}),new gi(v,d)}return p&&m?e.apply(this,a):(v=this.thru(h),p?i?v.value()[0]:v.value():v)})}),Kt(["pop","push","shift","sort","splice","unshift"],function(e){var t=ot[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",i=/^(?:pop|shift)$/.test(e);pi.prototype[e]=function(){var e=arguments;if(i&&!this.__chain__){var r=this.value();return t.apply(ga(r)?r:[],e)}return this[n](function(n){return t.apply(ga(n)?n:[],e)})}}),Ui(yi.prototype,function(e,t){var n=pi[t];if(n){var i=n.name+"";(oi[i]||(oi[i]=[])).push({name:t,func:n})}}),oi[mo(o,y).name]=[{name:"wrapper",func:o}],yi.prototype.clone=function(){var e=new yi(this.__wrapped__);return e.__actions__=io(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=io(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=io(this.__views__),e},yi.prototype.reverse=function(){if(this.__filtered__){var e=new yi(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},yi.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=ga(e),i=t<0,r=n?e.length:0,o=function(e,t,n){for(var i=-1,r=n.length;++i=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},pi.prototype.plant=function(e){for(var t,n=this;n instanceof vi;){var i=ds(n);i.__index__=0,i.__values__=o,t?r.__wrapped__=i:t=i;var r=i;n=n.__wrapped__}return r.__wrapped__=e,t},pi.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof yi){var t=e;return this.__actions__.length&&(t=new yi(this)),(t=t.reverse()).__actions__.push({func:zs,args:[Es],thisArg:o}),new gi(t,this.__chain__)}return this.thru(Es)},pi.prototype.toJSON=pi.prototype.valueOf=pi.prototype.value=function(){return Hr(this.__wrapped__,this.__actions__)},pi.prototype.first=pi.prototype.head,Vt&&(pi.prototype[Vt]=function(){return this}),pi}();Pt._=An,(r=function(){return An}.call(t,n,t,i))===o||(i.exports=r)}).call(this)}).call(this,n(37),n(89)(e))},function(e,t){var n=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(4),r=n(1);e.exports={throttle:i,debounce:r}},function(e,t,n){var i=n(16);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(40),r=n(31);e.exports=Object.keys||function(e){return i(e,r)}},function(e,t){e.exports=!0},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var i=n(5),r=n(15),o=n(60),s=n(9),a=n(7),l=function(e,t,n){var u,c,h,d=e&l.F,f=e&l.G,p=e&l.S,m=e&l.P,v=e&l.B,g=e&l.W,y=f?r:r[t]||(r[t]={}),b=y.prototype,_=f?i:p?i[t]:(i[t]||{}).prototype;for(u in f&&(n=t),n)(c=!d&&_&&void 0!==_[u])&&a(y,u)||(h=c?_[u]:n[u],y[u]=f&&"function"!=typeof _[u]?n[u]:v&&c?o(h,i):g&&_[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):m&&"function"==typeof h?o(Function.call,h):h,m&&((y.virtual||(y.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&s(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){var i=n(16);e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},function(e,t,n){var i=n(30)("keys"),r=n(23);e.exports=function(e){return i[e]||(i[e]=r(e))}},function(e,t,n){var i=n(15),r=n(5),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n(22)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){e.exports={}},function(e,t,n){var i=n(10).f,r=n(7),o=n(13)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},function(e,t,n){t.f=n(13)},function(e,t,n){var i=n(5),r=n(15),o=n(22),s=n(35),a=n(10).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:s.f(e)})}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){e.exports=!n(11)&&!n(17)(function(){return 7!=Object.defineProperty(n(39)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(16),r=n(5).document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,t,n){var i=n(7),r=n(12),o=n(63)(!1),s=n(29)("IE_PROTO");e.exports=function(e,t){var n,a=r(e),l=0,u=[];for(n in a)n!=s&&i(a,n)&&u.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~o(u,n)||u.push(n));return u}},function(e,t,n){var i=n(42);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(27);e.exports=function(e){return Object(i(e))}},function(e,t,n){"use strict";var i=n(22),r=n(25),o=n(45),s=n(9),a=n(33),l=n(70),u=n(34),c=n(73),h=n(13)("iterator"),d=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,p,m,v,g){l(n,t,p);var y,b,_,w=function(e){if(!d&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",C="values"==m,k=!1,S=e.prototype,D=S[h]||S["@@iterator"]||m&&S[m],E=D||w(m),$=m?C?w("entries"):E:void 0,T="Array"==t&&S.entries||D;if(T&&(_=c(T.call(new e)))!==Object.prototype&&_.next&&(u(_,x,!0),i||"function"==typeof _[h]||s(_,h,f)),C&&D&&"values"!==D.name&&(k=!0,E=function(){return D.call(this)}),i&&!g||!d&&!k&&S[h]||s(S,h,E),a[t]=E,a[x]=f,m)if(y={values:C?E:w("values"),keys:v?E:w("keys"),entries:$},g)for(b in y)b in S||o(S,b,y[b]);else r(r.P+r.F*(d||k),t,y);return y}},function(e,t,n){e.exports=n(9)},function(e,t,n){var i=n(19),r=n(71),o=n(31),s=n(29)("IE_PROTO"),a=function(){},l=function(){var e,t=n(39)("iframe"),i=o.length;for(t.style.display="none",n(72).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("