Browse Source

五损状态计算

xushili 2 years ago
parent
commit
358bff328c

+ 121 - 0
common/data/src/main/java/com/gyee/gaia/common/data/power/ModelPower.java

@@ -0,0 +1,121 @@
+package com.gyee.gaia.common.data.power;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author gfhd
+ * @since 2023-05-04
+ */
+@TableName("pro_basic_model_power")
+public class ModelPower implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private String id;
+
+    /**
+     * 型号编号
+     */
+    private String modelId;
+
+    /**
+     * 风速/光照度
+     */
+    private BigDecimal speed;
+
+    /**
+     * 稳态功率(相当于理论)
+     */
+    private BigDecimal theoryPower;
+
+    /**
+     * 动态功率(保证功率)
+     */
+    private BigDecimal ensurePower;
+
+    /**
+     * 场站编号
+     */
+    private String windpowerstationId;
+
+    private BigDecimal fullSpeed;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getModelId() {
+        return modelId;
+    }
+
+    public void setModelId(String modelId) {
+        this.modelId = modelId;
+    }
+
+    public BigDecimal getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(BigDecimal speed) {
+        this.speed = speed;
+    }
+
+    public BigDecimal getTheoryPower() {
+        return theoryPower;
+    }
+
+    public void setTheoryPower(BigDecimal theoryPower) {
+        this.theoryPower = theoryPower;
+    }
+
+    public BigDecimal getEnsurePower() {
+        return ensurePower;
+    }
+
+    public void setEnsurePower(BigDecimal ensurePower) {
+        this.ensurePower = ensurePower;
+    }
+
+    public String getWindpowerstationId() {
+        return windpowerstationId;
+    }
+
+    public void setWindpowerstationId(String windpowerstationId) {
+        this.windpowerstationId = windpowerstationId;
+    }
+
+    public BigDecimal getFullSpeed() {
+        return fullSpeed;
+    }
+
+    public void setFullSpeed(BigDecimal fullSpeed) {
+        this.fullSpeed = fullSpeed;
+    }
+
+    @Override
+    public String toString() {
+        return "ModelPower{" +
+                "id = " + id +
+                ", modelId = " + modelId +
+                ", speed = " + speed +
+                ", theoryPower = " + theoryPower +
+                ", ensurePower = " + ensurePower +
+                ", windpowerstationId = " + windpowerstationId +
+                ", fullSpeed = " + fullSpeed +
+                "}";
+    }
+}

+ 6 - 0
state/cause/README.md

@@ -0,0 +1,6 @@
+## cause 分析原因,故障损失,计划检修损失,受累损失,限电损失,性能损失等
+
+
+
+
+

+ 47 - 0
state/cause/build.gradle

@@ -0,0 +1,47 @@
+buildscript {
+    repositories {
+        mavenLocal()
+        maven {
+            allowInsecureProtocol = true
+            url "http://maven.aliyun.com/nexus/content/groups/public"
+        }
+        mavenCentral()
+    }
+    dependencies {
+        classpath("$bootGroup:spring-boot-gradle-plugin:$springBootVersion")
+    }
+}
+
+apply plugin: "$bootGroup"
+apply plugin: 'io.spring.dependency-management'
+
+dependencyManagement {
+    imports {
+        mavenBom "org.springframework.cloud:spring-cloud-dependencies:$springCloudVersion"
+        mavenBom "org.springframework.boot:spring-boot-dependencies:$springBootVersion"
+        mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:$springCloudAlibabaVersion"
+    }
+}
+
+dependencies {
+    implementation project(":timeseries:dao-sql")
+
+    implementation("$bootGroup:spring-boot-starter-web")
+    implementation("$bootGroup:spring-boot-starter-undertow")
+
+
+    implementation("org.postgresql:postgresql:$postgresqlDriverVersion")
+    implementation "com.baomidou:mybatis-plus-boot-starter:$mybatisPlusVersion"
+    implementation("com.alibaba:druid:$alibabaDruidVersion")
+    implementation("com.alibaba:fastjson:$fastjsonVersion")
+
+    implementation("$bootGroup:spring-boot-starter-test")
+    implementation("com.xuxueli:xxl-job-core:$xxlJobVersion")
+    implementation("org.springframework.cloud:spring-cloud-starter-bootstrap")
+    implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery")
+    implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config")
+
+    implementation("$cloudGroup:spring-cloud-starter-openfeign")
+    implementation("cn.hutool:hutool-all:5.8.18")
+}
+

+ 21 - 0
state/cause/src/main/java/com/gyee/gaia/StateCauseApp.java

@@ -0,0 +1,21 @@
+package com.gyee.gaia;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class StateCauseApp {
+
+    public static void main(String[] args) {
+
+        SpringApplication.run(StateCauseApp.class, args);
+
+    }
+}
+
+

+ 25 - 0
state/cause/src/main/java/com/gyee/gaia/cause/config/AppConfig.java

@@ -0,0 +1,25 @@
+package com.gyee.gaia.cause.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+@Data
+@Component
+@ConfigurationProperties("meter")
+public class AppConfig {
+
+    //场站范围
+    private String stations;
+    private Map<String, String> uniformcode;
+
+
+    @Override
+    public String toString() {
+        return "stations = " + stations;
+    }
+
+}

+ 17 - 0
state/cause/src/main/java/com/gyee/gaia/cause/config/NacosConfig.java

@@ -0,0 +1,17 @@
+package com.gyee.gaia.cause.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+
+@Data
+@Component
+@RefreshScope
+public class NacosConfig {
+
+    @Value("${test.abcd}")
+    private String testttt;
+
+}

+ 78 - 0
state/cause/src/main/java/com/gyee/gaia/cause/config/XxlJobConfig.java

@@ -0,0 +1,78 @@
+package com.gyee.gaia.cause.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * xxl-job config
+ *
+ * @author xuxueli 2017-04-28
+ */
+@Configuration
+public class XxlJobConfig {
+    private Logger logger = LoggerFactory.getLogger(com.gyee.gaia.cause.config.XxlJobConfig.class);
+
+    @Value("${xxl.job.admin.addresses}")
+    private String adminAddresses;
+
+    @Value("${xxl.job.accessToken}")
+    private String accessToken;
+
+    @Value("${xxl.job.executor.appname}")
+    private String appname;
+
+    @Value("${xxl.job.executor.address}")
+    private String address;
+
+    @Value("${xxl.job.executor.ip}")
+    private String ip;
+
+    @Value("${xxl.job.executor.port}")
+    private int port;
+
+    @Value("${xxl.job.executor.logpath}")
+    private String logPath;
+
+    @Value("${xxl.job.executor.logretentiondays}")
+    private int logRetentionDays;
+
+
+    @Bean
+    public XxlJobSpringExecutor xxlJobExecutor() {
+        logger.info(">>>>>>>>>>> xxl-job config init.");
+        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+        xxlJobSpringExecutor.setAppname(appname);
+        //xxlJobSpringExecutor.se(address);
+        xxlJobSpringExecutor.setIp(ip);
+        xxlJobSpringExecutor.setPort(port);
+        xxlJobSpringExecutor.setAccessToken(accessToken);
+        xxlJobSpringExecutor.setLogPath(logPath);
+        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+
+        return xxlJobSpringExecutor;
+    }
+
+    /**
+     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
+     *
+     *      1、引入依赖:
+     *          <dependency>
+     *             <groupId>org.springframework.cloud</groupId>
+     *             <artifactId>spring-cloud-commons</artifactId>
+     *             <version>${version}</version>
+     *         </dependency>
+     *
+     *      2、配置文件,或者容器启动变量
+     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
+     *
+     *      3、获取IP
+     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
+     */
+
+
+}

+ 65 - 0
state/cause/src/main/java/com/gyee/gaia/cause/job/CauseJobHandler.java

@@ -0,0 +1,65 @@
+package com.gyee.gaia.cause.job;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.cause.entity.PointData;
+import com.gyee.gaia.cause.entity.StateCause;
+import com.gyee.gaia.cause.service.CalculateService;
+import com.gyee.gaia.cause.service.IStateCauseService;
+import com.gyee.gaia.common.data.point.TestingPoint;
+import com.gyee.gaia.dao.sql.point.ITestingPointService;
+import com.gyee.gaia.init.CacheContext;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.xxl.job.core.biz.model.ReturnT.SUCCESS_CODE;
+
+
+@Order(2)
+@Component
+public class CauseJobHandler implements ApplicationRunner {
+
+    @Resource
+    private ITestingPointService testingPointService;
+    @Resource
+    private IStateCauseService stateCauseService;
+    @Resource
+    private CalculateService calculateService;
+
+    @XxlJob("WindCauseJobHandler")
+    public ReturnT<String> windCauseJobHandler() {
+        return new ReturnT(SUCCESS_CODE, "调度成功111");
+    }
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        QueryWrapper<StateCause> scWrapper = new QueryWrapper<>();
+        scWrapper.select("max(end_time)");
+        Map<String, Object> map = stateCauseService.getMap(scWrapper);
+        if (map == null) {
+            map = new HashMap<>();
+            map.put("max", DateUtil.yesterday().getTime());
+        }
+        Object max = map.get("max");
+        if (max == null) max = DateUtil.yesterday().getTime();
+
+        Map<TestingPoint, List<PointData>> value = calculateService.getValue(CacheContext.state8Point, (long) max, System.currentTimeMillis());
+        calculateService.calculate(value);
+        //String command = XxlJobHelper.getJobParam();
+        //Map<String, String> map = JSON.parseObject(command, Map.class);
+        QueryWrapper<TestingPoint> wrapper = new QueryWrapper<>();
+        wrapper.eq("uniform_code", "FJZT8");
+        List<TestingPoint> list = testingPointService.list(wrapper);
+
+    }
+}

+ 95 - 0
state/cause/src/main/resources/bootstrap.yaml

@@ -0,0 +1,95 @@
+server:
+  port: 8321
+
+spring:
+  application:
+    name: state-cause
+  profiles:
+    # 环境配置
+    active: nx
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 192.168.10.18:8848
+      config:
+        # 配置中心地址
+        server-addr: 192.168.10.18:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+  cache:
+    type: SIMPLE
+  datasource:
+    driver-class-name: org.postgresql.Driver
+    url: jdbc:postgresql://192.168.10.18:5432/nx_dev
+    username: gdprod
+    password: gyee123
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      max-active: 20
+      initial-size: 1
+      min-idle: 3
+      max-wait: 60000
+      time-between-eviction-runs-millis: 60000
+      min-evictable-idle-time-millis: 300000
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
+    default-property-inclusion: always
+
+meter:
+  stations: MHS_FDC,NSS_FDC
+  adapter-url: http://192.168.10.18:8011
+  uniformcode:
+    state8: FJZT8
+
+mybatis-plus:
+  typeAliasesPackage: com.gyee.gaia.meter.entity
+  mapper-locations: classpath:mappers-postgresql/*.xml
+  global-config:
+    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+    id-type: 3
+    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+    field-strategy: 2
+    #驼峰下划线转换
+    db-column-underline: true
+    #mp2.3+ 全局表前缀 mp_
+    #table-prefix: mp_
+    #刷新mapper 调试神器
+    #refresh-mapper: true
+    #数据库大写下划线转换
+    #capital-mode: true
+    # Sequence序列接口实现类配置
+    key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
+    #逻辑删除配置(下面3个配置)
+    logic-delete-value: 1
+    logic-not-delete-value: 0
+    #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
+    #自定义填充策略接口实现
+    #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
+  configuration:
+    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+    #配置JdbcTypeForNull, oracle数据库必须配置
+    jdbc-type-for-null: 'null'
+    callSettersOnNulls: true
+
+xxl:
+  job:
+    admin:
+      addresses: http://192.168.10.18:8080/xxl-job-admin
+    accessToken:
+    executor:
+      appname: meter
+      address:
+      ip:
+      port: 9021
+      logpath: d:/xxl-job/meter/logs
+      logretentiondays: 30

+ 49 - 0
state/cause/src/main/resources/log4j2.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+    <Properties>
+        <Property name="Pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %t %M(%F:%L) %m%n</Property>
+    </Properties>
+    <Filter type="ThresholdFilter" level="INFO"/>
+
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="${Pattern}"/>
+        </Console>
+        <RollingFile name="RollingFileInfo" fileName="logs/info.log"
+                     filePattern="logs/%d{yyyy-MM}/info-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+            </Policies>
+        </RollingFile>
+        <RollingFile name="RollingFileWarn" fileName="logs/warn.log"
+                     filePattern="logs/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+            </Policies>
+        </RollingFile>
+        <RollingFile name="RollingFileError" fileName="logs/error.log"
+                     filePattern="logs/%d{yyyy-MM}/error-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+            </Policies>
+        </RollingFile>
+    </Appenders>
+
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+            <!--<appender-ref ref="RollingFileInfo"/>-->
+            <appender-ref ref="RollingFileWarn"/>
+            <appender-ref ref="RollingFileError"/>
+        </Root>
+    </Loggers>
+</Configuration>

+ 18 - 0
timeseries/dao-interface/src/main/java/com/gyee/gaia/dao/power/ModelPowerMapper.java

@@ -0,0 +1,18 @@
+package com.gyee.gaia.dao.power;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.gaia.common.data.power.ModelPower;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author gfhd
+ * @since 2023-05-04
+ */
+@Mapper
+public interface ModelPowerMapper extends BaseMapper<ModelPower> {
+
+}

+ 16 - 0
timeseries/dao-sql/src/main/java/com/gyee/gaia/dao/sql/power/IModelPowerService.java

@@ -0,0 +1,16 @@
+package com.gyee.gaia.dao.sql.power;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.gaia.common.data.power.ModelPower;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2023-05-04
+ */
+public interface IModelPowerService extends IService<ModelPower> {
+
+}

+ 19 - 0
timeseries/dao-sql/src/main/java/com/gyee/gaia/dao/sql/power/ModelPowerServiceImpl.java

@@ -0,0 +1,19 @@
+package com.gyee.gaia.dao.sql.power;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.gaia.common.data.power.ModelPower;
+import com.gyee.gaia.dao.power.ModelPowerMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2023-05-04
+ */
+@Service
+public class ModelPowerServiceImpl extends ServiceImpl<ModelPowerMapper, ModelPower> implements IModelPowerService {
+
+}