1
0
wangzaijun 7 mēneši atpakaļ
revīzija
2208c7b284
30 mainītis faili ar 1456 papildinājumiem un 0 dzēšanām
  1. 35 0
      .gitignore
  2. 181 0
      pom.xml
  3. 45 0
      readme.md
  4. 59 0
      service-base/pom.xml
  5. 34 0
      service-base/src/main/java/com/simuwang/base/common/exception/APIException.java
  6. 82 0
      service-base/src/main/java/com/simuwang/base/common/exception/ErrorInfo.java
  7. 76 0
      service-base/src/main/java/com/simuwang/base/config/DataSourceAutoConfig.java
  8. 28 0
      service-base/src/main/java/com/simuwang/base/config/DataSourceConfiguration.java
  9. 20 0
      service-base/src/main/java/com/simuwang/base/config/MybatisPlusPageInterceptor.java
  10. 168 0
      service-base/src/main/java/com/simuwang/base/dataobject/RzFundNavDO.java
  11. 1 0
      service-base/src/main/java/com/simuwang/base/dataobject/package-info.java
  12. 1 0
      service-base/src/main/java/com/simuwang/base/mapper/package-info.java
  13. 35 0
      service-calc/pom.xml
  14. 1 0
      service-calc/src/main/java/com/simuwang/calc/package-info.java
  15. 18 0
      service-daq/pom.xml
  16. 1 0
      service-daq/src/main/java/com/simuwang/daq/manager/package-info.java
  17. 1 0
      service-daq/src/main/java/com/simuwang/daq/service/package-info.java
  18. 33 0
      service-deploy/.gitignore
  19. 81 0
      service-deploy/pom.xml
  20. 13 0
      service-deploy/src/main/java/com/simuwang/Application.java
  21. 171 0
      service-deploy/src/main/java/com/simuwang/deploy/components/ErrorInfoBuilder.java
  22. 45 0
      service-deploy/src/main/java/com/simuwang/deploy/components/GlobalErrorController.java
  23. 52 0
      service-deploy/src/main/java/com/simuwang/deploy/components/GlobalResponseBodyAdvice.java
  24. 19 0
      service-deploy/src/main/java/com/simuwang/deploy/filter/RequestFilter.java
  25. 111 0
      service-deploy/src/main/java/com/simuwang/deploy/filter/RequestWrapper.java
  26. 40 0
      service-deploy/src/main/resources/application.yml
  27. 81 0
      service-deploy/src/main/resources/logback.xml
  28. 22 0
      service-manage/pom.xml
  29. 1 0
      service-manage/src/main/java/com/simuwang/manage/api/package-info.java
  30. 1 0
      service-manage/src/main/java/com/simuwang/manage/service/package-info.java

+ 35 - 0
.gitignore

@@ -0,0 +1,35 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+logs/

+ 181 - 0
pom.xml

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.simuwang</groupId>
+    <artifactId>data-daq</artifactId>
+    <version>1.0.0</version>
+    <description>私募排排网-数据采集系统</description>
+    <packaging>pom</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <pagehelper.boot.version>1.4.7</pagehelper.boot.version>
+        <data-calc.version>0.1.8-SNAPSHOT</data-calc.version>
+        <joda-time.version>2.12.7</joda-time.version>
+        <commons-math3.version>3.6.1</commons-math3.version>
+        <hutool.version>5.8.31</hutool.version>
+        <mybatis-plus.version>3.5.7</mybatis-plus.version>
+        <dameng.version>8.1.3.62</dameng.version>
+        <daq.version>1.0.0</daq.version>
+    </properties>
+
+    <modules>
+        <module>service-deploy</module>
+        <module>service-base</module>
+        <module>service-calc</module>
+        <module>service-manage</module>
+        <module>service-daq</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- SpringBoot的依赖配置-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>3.3.3</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+<!--            &lt;!&ndash; pagehelper 分页插件 &ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>com.github.pagehelper</groupId>-->
+<!--                <artifactId>pagehelper-spring-boot-starter</artifactId>-->
+<!--                <version>${pagehelper.boot.version}</version>-->
+<!--            </dependency>-->
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-boot-starter</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+            <!-- 达梦数据库 -->
+            <dependency>
+                <groupId>com.dameng</groupId>
+                <artifactId>DmJdbcDriver18</artifactId>
+                <version>${dameng.version}</version>
+            </dependency>
+
+            <!-- 私有库 -->
+            <dependency>
+                <groupId>com.smppw</groupId>
+                <artifactId>data-calc</artifactId>
+                <version>${data-calc.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-math3</artifactId>
+                <version>${commons-math3.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>joda-time</groupId>
+                <artifactId>joda-time</artifactId>
+                <version>${joda-time.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-core</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-json</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-http</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-crypto</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
+
+            <!-- 内部模块 -->
+            <dependency>
+                <groupId>com.simuwang</groupId>
+                <artifactId>service-base</artifactId>
+                <version>${daq.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.simuwang</groupId>
+                <artifactId>service-calc</artifactId>
+                <version>${daq.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.simuwang</groupId>
+                <artifactId>service-manage</artifactId>
+                <version>${daq.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.simuwang</groupId>
+                <artifactId>service-daq</artifactId>
+                <version>${daq.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <compilerArgs>
+                        <arg>-parameters</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+        <repository>
+            <id>smppw-release</id>
+            <url>http://120.24.213.180:8081/nexus/content/repositories/releases/</url>
+        </repository>
+        <repository>
+            <id>smppw-snapshots</id>
+            <url>http://120.24.213.180:8081/nexus/content/repositories/snapshots/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+</project>

+ 45 - 0
readme.md

@@ -0,0 +1,45 @@
+# 数据采集系统
+
+### 架构说明
+> 项目使用springboot3.3.x+mybatis plus搭建,权限框架暂定shiro
+
+
+### 各模块说明
+##### 0、入口 `service-deploy`
+> 项目入口,提供一下全局的拦截、过滤器或者异常处理,也可以做全局的配置管理
+
+##### 1、基础模块 `service-base`
+> 该模块是所有依赖包引入入口,数据库访问层mapper以及对mapper的二次封装dao,建议按功能模块分包或者有更好的分包方式也请说明
+>
+
+##### 2、计算模块 `service-calc`
+> 指标计算的相关功能
+>
+
+##### 3、数据采集 `service-daq`
+> 主要的数据采集功能模块,对数据库的访问请走base提供的服务;当前模块可以按需求扩展数据采集方式,包括但不限于邮箱、托管api等方式
+> 
+
+##### 4、后台管理 `service-manage`
+> 提供后台管理系统的api,建议按各一级菜单分包
+>
+
+##### 各模块依赖关系
+> `service-base`依赖了所有第三方包,包括一个私有包,`service-calc`、`service-daq`和`service-manage`依赖`service-base`模块
+
+
+### FAQ
+
+- 1. 下列包的作用?
+```xml
+<dependency>
+    <groupId>com.smppw</groupId>
+    <artifactId>data-calc</artifactId>
+    <version>${data-calc.version}</version>
+</dependency>
+```
+> 封装了一些常用对象、工具类和指标计算方法
+>
+
+2. 部分依赖不可删除,删除就报错,比如joda-time
+> data-calc包目前有强依赖的第三方包,待优化后可控制

+ 59 - 0
service-base/pom.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-daq</artifactId>
+        <groupId>com.simuwang</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>service-base</artifactId>
+    <description>核心模块</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.dameng</groupId>
+            <artifactId>DmJdbcDriver18</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.zaxxer</groupId>
+            <artifactId>HikariCP</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 私有库 -->
+        <dependency>
+            <groupId>com.smppw</groupId>
+            <artifactId>data-calc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-math3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-json</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 34 - 0
service-base/src/main/java/com/simuwang/base/common/exception/APIException.java

@@ -0,0 +1,34 @@
+package com.simuwang.base.common.exception;
+
+import com.smppw.common.pojo.enums.status.ResultCode;
+import com.smppw.common.pojo.enums.status.StatusCode;
+
+public class APIException extends RuntimeException {
+    private final int code;
+    private final String msg;
+
+    // 手动设置异常
+    public APIException(StatusCode statusCode, String message) {
+        // message用于用户设置抛出错误详情,例如:当前价格-5,小于0
+        super(message);
+        // 状态码
+        this.code = statusCode.getCode();
+        // 状态码配套的msg
+        this.msg = statusCode.getMsg();
+    }
+
+    // 默认异常使用APP_ERROR状态码
+    public APIException(String message) {
+        super(message);
+        this.code = ResultCode.COMMON_ERROR.getCode();
+        this.msg = message;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 82 - 0
service-base/src/main/java/com/simuwang/base/common/exception/ErrorInfo.java

@@ -0,0 +1,82 @@
+package com.simuwang.base.common.exception;
+
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/12 15:51
+ * @description 通用的错误信息
+ */
+public class ErrorInfo {
+    /**
+     * 发生时间
+     */
+    private String time;
+    /**
+     * 访问Url
+     */
+    private String url;
+    /**
+     * 错误类型
+     */
+    private String error;
+    /**
+     * 状态码
+     */
+    private int statusCode;
+    /**
+     * 状态码
+     */
+    private String reasonPhrase;
+    /**
+     * 错误的堆栈轨迹
+     */
+    private String stackTrace;
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(int statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getReasonPhrase() {
+        return reasonPhrase;
+    }
+
+    public void setReasonPhrase(String reasonPhrase) {
+        this.reasonPhrase = reasonPhrase;
+    }
+
+    public String getStackTrace() {
+        return stackTrace;
+    }
+
+    public void setStackTrace(String stackTrace) {
+        this.stackTrace = stackTrace;
+    }
+}

+ 76 - 0
service-base/src/main/java/com/simuwang/base/config/DataSourceAutoConfig.java

@@ -0,0 +1,76 @@
+package com.simuwang.base.config;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@MapperScan(value = {"com.simuwang.base.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory")
+@Configuration
+public class DataSourceAutoConfig {
+    static final String[] MAPPER_LOCATIONS = {"classpath*:mapper/**/*.xml"};
+
+    @Autowired
+    @Qualifier(DataSourceConfiguration.DS_DATA_DAQ)
+    private DataSource dataSource;
+
+    @Autowired
+    private MybatisPlusInterceptor mybatisPlusInterceptor;
+
+    @Primary
+    @Bean(name = "sqlSessionFactory")
+    public SqlSessionFactory sqlSessionFactory() throws Exception {
+        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
+        sessionFactory.setDataSource(this.dataSource);
+        // 扫描追加多个包下的资源文件
+        List<Resource> resources = ListUtil.list(false);
+        for (String mapperLocation : MAPPER_LOCATIONS) {
+            PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
+            Resource[] resource = patternResolver.getResources(mapperLocation);
+            if (resource.length > 0) {
+                resources.addAll(ListUtil.toList(resource));
+            }
+        }
+        sessionFactory.setMapperLocations(resources.toArray(new Resource[]{}));
+        // 添加mybatis-plus分页拦截插件
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        configuration.addInterceptor(this.mybatisPlusInterceptor);
+        // 设置下划线转驼峰
+        configuration.setMapUnderscoreToCamelCase(true);
+        sessionFactory.setConfiguration(configuration);
+        // 关闭横幅
+        GlobalConfig globalConfig = new GlobalConfig();
+        globalConfig.setBanner(false);
+        sessionFactory.setGlobalConfig(globalConfig);
+        return sessionFactory.getObject();
+    }
+
+    @Primary
+    @Bean(name = "transactionManager")
+    public DataSourceTransactionManager transactionManager() {
+        return new DataSourceTransactionManager(this.dataSource);
+    }
+
+    @Primary
+    @Bean(name = "transactionTemplate")
+    public TransactionTemplate transactionTemplate() {
+        return new TransactionTemplate(this.transactionManager());
+    }
+}
+

+ 28 - 0
service-base/src/main/java/com/simuwang/base/config/DataSourceConfiguration.java

@@ -0,0 +1,28 @@
+package com.simuwang.base.config;
+
+import com.zaxxer.hikari.HikariDataSource;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class DataSourceConfiguration {
+    public static final String DATA_DAQ_PROPERTIES = "spring.datasource.data-daq";
+    public static final String DS_DATA_DAQ = "spring.datasource.data-daq.hikari";
+
+    @Primary
+    @Bean(name = DATA_DAQ_PROPERTIES)
+    @ConfigurationProperties(prefix = DATA_DAQ_PROPERTIES)
+    public DataSourceProperties daqDataSourceProperties() {
+        return new DataSourceProperties();
+    }
+
+    @Primary
+    @Bean(name = DS_DATA_DAQ)
+    @ConfigurationProperties(prefix = DS_DATA_DAQ)
+    public HikariDataSource dataTrustDataSource() {
+        return daqDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
+    }
+}

+ 20 - 0
service-base/src/main/java/com/simuwang/base/config/MybatisPlusPageInterceptor.java

@@ -0,0 +1,20 @@
+package com.simuwang.base.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusPageInterceptor {
+
+    @Bean("mybatisPlusInterceptor")
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        // 添加分页插件
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+        return interceptor;
+    }
+}

+ 168 - 0
service-base/src/main/java/com/simuwang/base/dataobject/RzFundNavDO.java

@@ -0,0 +1,168 @@
+package com.simuwang.base.dataobject;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("rz_fund_nav")
+public class RzFundNavDO {
+    /**
+     * 主键Id
+     */
+    @TableId(value = "id")
+    private Integer id;
+    /**
+     * 基金id(CF开头)
+     */
+    @TableField(value = "fund_id")
+    private String fundId;
+    /**
+     * 净值日期
+     */
+    @TableField(value = "price_date")
+    private Date priceDate;
+    /**
+     * 单位净值
+     */
+    @TableField(value = "nav")
+    private BigDecimal nav;
+    /**
+     * 累计单位净值
+     */
+    @TableField(value = "cumulative_nav_withdrawal")
+    private BigDecimal cumulativeNavWithdrawal;
+    /**
+     * 复权净值
+     */
+    @TableField(value = "cumulative_nav")
+    private BigDecimal cumulativeNav;
+    /**
+     * 净值来源:1-托管接入,2-邮件解析,3-手动填写
+     */
+    @TableField(value = "source")
+    private Integer source;
+    /**
+     * 记录的有效性;1-有效;0-无效
+     */
+    @TableField(value = "isvalid")
+    private Integer isvalid;
+    /**
+     * 创建者Id
+     */
+    @TableField(value = "creatorid")
+    private Integer creatorId;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "createtime")
+    private Date createTime;
+    /**
+     * 修改者Id
+     */
+    @TableField(value = "updaterid")
+    private Integer updaterId;
+    /**
+     * 修改时间
+     */
+    @TableField(value = "updatetime")
+    private Date updateTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getFundId() {
+        return fundId;
+    }
+
+    public void setFundId(String fundId) {
+        this.fundId = fundId;
+    }
+
+    public Date getPriceDate() {
+        return priceDate;
+    }
+
+    public void setPriceDate(Date priceDate) {
+        this.priceDate = priceDate;
+    }
+
+    public BigDecimal getNav() {
+        return nav;
+    }
+
+    public void setNav(BigDecimal nav) {
+        this.nav = nav;
+    }
+
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return cumulativeNavWithdrawal;
+    }
+
+    public void setCumulativeNavWithdrawal(BigDecimal cumulativeNavWithdrawal) {
+        this.cumulativeNavWithdrawal = cumulativeNavWithdrawal;
+    }
+
+    public BigDecimal getCumulativeNav() {
+        return cumulativeNav;
+    }
+
+    public void setCumulativeNav(BigDecimal cumulativeNav) {
+        this.cumulativeNav = cumulativeNav;
+    }
+
+    public Integer getSource() {
+        return source;
+    }
+
+    public void setSource(Integer source) {
+        this.source = source;
+    }
+
+    public Integer getIsvalid() {
+        return isvalid;
+    }
+
+    public void setIsvalid(Integer isvalid) {
+        this.isvalid = isvalid;
+    }
+
+    public Integer getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Integer creatorId) {
+        this.creatorId = creatorId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getUpdaterId() {
+        return updaterId;
+    }
+
+    public void setUpdaterId(Integer updaterId) {
+        this.updaterId = updaterId;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}

+ 1 - 0
service-base/src/main/java/com/simuwang/base/dataobject/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.base.dataobject;

+ 1 - 0
service-base/src/main/java/com/simuwang/base/mapper/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.base.mapper;

+ 35 - 0
service-calc/pom.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-daq</artifactId>
+        <groupId>com.simuwang</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>service-calc</artifactId>
+    <description>数据采集计算模块</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-base</artifactId>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>smppw-release</id>
+            <url>http://120.24.213.180:8081/nexus/content/repositories/releases/</url>
+        </repository>
+        <repository>
+            <id>smppw-snapshots</id>
+            <url>http://120.24.213.180:8081/nexus/content/repositories/snapshots/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+</project>

+ 1 - 0
service-calc/src/main/java/com/simuwang/calc/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.calc;

+ 18 - 0
service-daq/pom.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-daq</artifactId>
+        <groupId>com.simuwang</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>service-daq</artifactId>
+    <description>数据采集</description>
+
+    <dependencies>
+
+    </dependencies>
+</project>

+ 1 - 0
service-daq/src/main/java/com/simuwang/daq/manager/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.daq.manager;

+ 1 - 0
service-daq/src/main/java/com/simuwang/daq/service/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.daq.service;

+ 33 - 0
service-deploy/.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 81 - 0
service-deploy/pom.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.simuwang</groupId>
+        <artifactId>data-daq</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>service-deploy</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>service-deploy</name>
+    <description>数据采集系统入口</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-calc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-manage</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-daq</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <scope>runtime</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.graalvm.buildtools</groupId>
+                <artifactId>native-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
service-deploy/src/main/java/com/simuwang/Application.java

@@ -0,0 +1,13 @@
+package com.simuwang;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
+
+}

+ 171 - 0
service-deploy/src/main/java/com/simuwang/deploy/components/ErrorInfoBuilder.java

@@ -0,0 +1,171 @@
+package com.simuwang.deploy.components;
+
+import cn.hutool.core.util.StrUtil;
+import com.simuwang.base.common.exception.ErrorInfo;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.web.ErrorProperties;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpStatus;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.util.WebUtils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.time.LocalDateTime;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/12 16:23
+ * @description 错误信息构造工具
+ */
+@Component
+public class ErrorInfoBuilder implements HandlerExceptionResolver, Ordered {
+    /**
+     * 错误KEY
+     */
+    private final static String ERROR_NAME = "simuwang.error";
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    /**
+     * 错误配置(ErrorConfiguration)
+     */
+    private final ErrorProperties errorProperties;
+
+    /**
+     * 错误构造器 (Constructor) 传递配置属性:server.xx -> server.error.xx
+     */
+    public ErrorInfoBuilder(ServerProperties serverProperties) {
+        this.errorProperties = serverProperties.getError();
+    }
+
+    /**
+     * 构建错误信息.(ErrorInfo)
+     */
+    public ErrorInfo getErrorInfo(HttpServletRequest request) {
+        return getErrorInfo(request, getError(request));
+    }
+
+    /**
+     * 构建错误信息.(ErrorInfo)
+     */
+    public ErrorInfo getErrorInfo(HttpServletRequest request, Throwable error) {
+        String url = request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE).toString();
+        ErrorInfo errorInfo = new ErrorInfo();
+        errorInfo.setTime(LocalDateTime.now().toString());
+        errorInfo.setUrl(url);
+        errorInfo.setError(error.getMessage());
+        errorInfo.setStatusCode(getHttpStatus(request).value());
+        errorInfo.setReasonPhrase(getHttpStatus(request).getReasonPhrase());
+        errorInfo.setStackTrace(getStackTraceInfo(error, isIncludeStackTrace(request)));
+        logger.error(StrUtil.format("{} 接口请求错误:{}", url, errorInfo.getError()));
+        return errorInfo;
+    }
+
+    /**
+     * 获取错误.(Error/Exception)
+     *
+     * @see org.springframework.boot.web.servlet.error.DefaultErrorAttributes #addErrorDetails
+     */
+    public Throwable getError(HttpServletRequest request) {
+        //根据HandlerExceptionResolver接口方法来获取错误.
+        Throwable error = (Throwable) request.getAttribute(ERROR_NAME);
+        //根据Request对象获取错误.
+        if (error == null) {
+            error = (Throwable) request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE);
+        }
+        //当获取错误非空,取出RootCause.
+        if (error != null) {
+            while (error instanceof ServletException && error.getCause() != null) {
+                error = error.getCause();
+            }
+        } else {
+            //当获取错误为null,此时我们设置错误信息即可.
+            String message = (String) request.getAttribute(WebUtils.ERROR_MESSAGE_ATTRIBUTE);
+            if (StringUtils.isEmpty(message)) {
+                HttpStatus status = getHttpStatus(request);
+                message = "Unknown Exception But " + status.value() + " " + status.getReasonPhrase();
+            }
+            error = new Exception(message);
+        }
+        return error;
+    }
+
+    /**
+     * 获取通信状态(HttpStatus)
+     *
+     * @see org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController #getStatus
+     */
+    public HttpStatus getHttpStatus(HttpServletRequest request) {
+        Integer statusCode = (Integer) request.getAttribute(WebUtils.ERROR_STATUS_CODE_ATTRIBUTE);
+        try {
+            return statusCode != null ? HttpStatus.valueOf(statusCode) : HttpStatus.INTERNAL_SERVER_ERROR;
+        } catch (Exception ex) {
+            return HttpStatus.INTERNAL_SERVER_ERROR;
+        }
+    }
+
+    /**
+     * 获取堆栈轨迹(StackTrace)
+     *
+     * @see org.springframework.boot.web.servlet.error.DefaultErrorAttributes  #addStackTrace
+     */
+    public String getStackTraceInfo(Throwable error, boolean flag) {
+        if (!flag) {
+            return "omitted";
+        }
+        StringWriter stackTrace = new StringWriter();
+        error.printStackTrace(new PrintWriter(stackTrace));
+        stackTrace.flush();
+        return stackTrace.toString();
+    }
+
+    /**
+     * 判断是否包含堆栈轨迹.(isIncludeStackTrace)
+     *
+     * @see org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController #isIncludeStackTrace
+     */
+    public boolean isIncludeStackTrace(HttpServletRequest request) {
+
+        //读取错误配置(server.error.include-stacktrace=NEVER)
+        ErrorProperties.IncludeAttribute includeStacktrace = errorProperties.getIncludeStacktrace();
+
+        //情况1:若IncludeStacktrace为ALWAYS
+        if (includeStacktrace == ErrorProperties.IncludeAttribute.ALWAYS) {
+            return true;
+        }
+        //情况2:若请求参数含有trace
+        if (includeStacktrace == ErrorProperties.IncludeAttribute.ON_PARAM) {
+            String parameter = request.getParameter("trace");
+            return parameter != null && !"false".equalsIgnoreCase(parameter);
+        }
+        //情况3:其它情况
+        return false;
+    }
+
+    /**
+     * 保存错误/异常.
+     *
+     * @see org.springframework.web.servlet.DispatcherServlet #processHandlerException 进行选举HandlerExceptionResolver
+     */
+    @Override
+    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) {
+        request.setAttribute(ERROR_NAME, ex);
+        return null;
+    }
+
+    /**
+     * 提供优先级 或用于排序
+     */
+    @Override
+    public int getOrder() {
+        return HIGHEST_PRECEDENCE;
+    }
+}

+ 45 - 0
service-deploy/src/main/java/com/simuwang/deploy/components/GlobalErrorController.java

@@ -0,0 +1,45 @@
+package com.simuwang.deploy.components;
+
+import com.simuwang.base.common.exception.ErrorInfo;
+import com.smppw.common.pojo.ResultVo;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.boot.web.servlet.error.ErrorController;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/12 15:46
+ * @description 全局的错误信息处理
+ */
+@Controller
+@RequestMapping("${server.error.path:/error}")
+public class GlobalErrorController implements ErrorController {
+    private final static String DEFAULT_ERROR_VIEW = "error";//错误信息页
+    private final ErrorInfoBuilder errorInfoBuilder;
+
+    public GlobalErrorController(ErrorInfoBuilder errorInfoBuilder) {
+        this.errorInfoBuilder = errorInfoBuilder;
+    }
+
+    /**
+     * 情况1:若预期返回类型为text/html,则返回错误信息页(View).
+     */
+    @RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
+    public ModelAndView errorHtml(HttpServletRequest request) {
+        return new ModelAndView(DEFAULT_ERROR_VIEW, "error", errorInfoBuilder.getErrorInfo(request));
+    }
+
+    /**
+     * 情况2:其它预期类型 则返回详细的错误信息(JSON).
+     */
+    @RequestMapping
+    @ResponseBody
+    public ResultVo<?> error(HttpServletRequest request) {
+        ErrorInfo errorInfo = errorInfoBuilder.getErrorInfo(request);
+        return ResultVo.fail(errorInfo.getStatusCode(), errorInfo.getError());
+    }
+}

+ 52 - 0
service-deploy/src/main/java/com/simuwang/deploy/components/GlobalResponseBodyAdvice.java

@@ -0,0 +1,52 @@
+package com.simuwang.deploy.components;
+
+import cn.hutool.json.JSONUtil;
+import com.smppw.common.pojo.ResultVo;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.lang.NonNull;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Arrays;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/12 16:39
+ * @description 全局的异常处理
+ */
+@RestControllerAdvice
+public class GlobalResponseBodyAdvice implements ResponseBodyAdvice<Object> {
+    private static final Class[] ANNOTATIONS = new Class[]{
+            RequestMapping.class,
+            PostMapping.class,
+            PostMapping.class,
+            DeleteMapping.class,
+            PutMapping.class
+    };
+
+    @Override
+    public boolean supports(MethodParameter returnType, @NonNull Class<? extends HttpMessageConverter<?>> converterType) {
+        AnnotatedElement element = returnType.getAnnotatedElement();
+        return Arrays.stream(ANNOTATIONS).anyMatch((annotation) -> annotation.isAnnotation() && element.isAnnotationPresent(annotation));
+    }
+
+    @Override
+    public Object beforeBodyWrite(Object body, @NonNull MethodParameter returnType, @NonNull MediaType selectedContentType,
+                                  @NonNull Class<? extends HttpMessageConverter<?>> selectedConverterType, @NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response) {
+        if (body instanceof String) {
+            // 当响应体是String类型时
+            return JSONUtil.toJsonStr(ResultVo.ok(body));
+        }
+        if (body instanceof ResultVo<?>) {
+            // 已经包装过的结果无需再次包装
+            return body;
+        }
+        // 对响应体进行包装
+        return ResultVo.ok(body);
+    }
+}

+ 19 - 0
service-deploy/src/main/java/com/simuwang/deploy/filter/RequestFilter.java

@@ -0,0 +1,19 @@
+package com.simuwang.deploy.filter;
+
+import jakarta.servlet.*;
+import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+@Component
+@WebFilter(urlPatterns = "/*")
+public class RequestFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        ServletRequest requestWrapper = new RequestWrapper((HttpServletRequest) request);
+        chain.doFilter(requestWrapper, response);
+    }
+}

+ 111 - 0
service-deploy/src/main/java/com/simuwang/deploy/filter/RequestWrapper.java

@@ -0,0 +1,111 @@
+package com.simuwang.deploy.filter;
+
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import org.springframework.util.StreamUtils;
+
+import java.io.*;
+import java.nio.charset.Charset;
+
+public class RequestWrapper extends HttpServletRequestWrapper {
+    // 存储流的容器
+    private byte[] requestBody = null;
+
+    /**
+     * Constructs a request object wrapping the given request.
+     *
+     * @param request The request to wrap
+     * @throws IllegalArgumentException if the request is null
+     */
+    public RequestWrapper(HttpServletRequest request) throws IOException {
+        super(request);
+        // 将流复制到字节数组 requestBody 中
+        requestBody = StreamUtils.copyToByteArray(request.getInputStream());
+    }
+
+    /**
+     * 获取请求体
+     */
+    public String getBodyString(final ServletRequest request) {
+        try {
+            return inputStream2String(request.getInputStream());
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 获取请求体
+     */
+    public String getBodyString() {
+        final InputStream inputStream = new ByteArrayInputStream(requestBody);
+
+        return inputStream2String(inputStream);
+    }
+
+    /**
+     * 读取inputStream数据,并转换为String
+     */
+    private String inputStream2String(InputStream inputStream) {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+
+        try {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.defaultCharset()));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                }
+            }
+        }
+
+        return sb.toString();
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+
+        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+        return new ServletInputStream() {
+
+            @Override
+            public int read() throws IOException {
+                return byteArrayInputStream.read();
+            }
+
+            @Override
+            public boolean isFinished() {
+                return false;
+            }
+
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener) {
+            }
+        };
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+}
+

+ 40 - 0
service-deploy/src/main/resources/application.yml

@@ -0,0 +1,40 @@
+server:
+  port: 8899
+  undertow:
+    threads:
+      # io线程数,主要执行费阻塞的任务
+      io: 8
+      # 阻塞任务线程池
+      worker: 50
+    # 每块buffer的空间大小,越小的空间被利用越充分
+    buffer-size: 1024
+    # 是否分配的直接内存
+    direct-buffers: true
+  error:
+    include-binding-errors: on_param
+    include-stacktrace: on_param
+
+spring:
+  application:
+    name: data-daq
+  datasource:
+    data-daq:
+      # 指定为HikariDataSource
+      type: com.zaxxer.hikari.HikariDataSource
+      driver-class-name: dm.jdbc.driver.DmDriver
+      url: jdbc:dm://39.108.170.90:5236/?schema=RZ_COMBINATION_MASTER
+      username: RZ_DMPPWUSER_PRO
+      password: Sowh!_44821
+      # hikari连接池配置 对应 HikariConfig 配置属性类
+      hikari:
+        pool-name: HikariCP-daq
+        # 连接池最大连接数,默认是10
+        maximum-pool-size: 10
+        # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
+        auto-commit: true
+        # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+        max-lifetime: 900000
+        # 数据库连接超时时间,设置为300秒超时
+        connection-timeout: 300000
+        # keepalive time
+        keepalive-time: 60000

+ 81 - 0
service-deploy/src/main/resources/logback.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="true">
+    <!-- 日志格式:年-月-日 时:分:秒 [线程] 日志级别 所在类:行号 - 具体信息 换行 -->
+    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%-4L - %msg%n"/>
+    <property name="LOG_HOME" value="./logs"/>
+
+    <!--输出到控制台-->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <!--<charset>utf8</charset>-->
+        </encoder>
+    </appender>
+
+
+    <!--info 级别的日志-->
+    <!-- 按照每天生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+        <file>${LOG_HOME}/info.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <fileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}_%i.log</fileNamePattern>
+            <maxFileSize>50MB</maxFileSize>
+            <!--日志文件保留天数-->
+            <MaxHistory>18</MaxHistory>
+        </rollingPolicy>
+    </appender>
+
+
+    <!--WARN 级别的日志-->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+        <file>${LOG_HOME}/warn.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}_%i.log</fileNamePattern>
+            <maxFileSize>50MB</maxFileSize>
+            <MaxHistory>18</MaxHistory>
+        </rollingPolicy>
+    </appender>
+
+    <!--ERROR 级别的日志-->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+        <file>${LOG_HOME}/error.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}_%i.log</fileNamePattern>
+            <maxFileSize>50MB</maxFileSize>
+            <MaxHistory>18</MaxHistory>
+        </rollingPolicy>
+    </appender>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="WARN"/>
+        <appender-ref ref="ERROR"/>
+    </root>
+</configuration>

+ 22 - 0
service-manage/pom.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-daq</artifactId>
+        <groupId>com.simuwang</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>service-manage</artifactId>
+    <description>数据采集系统后台管理模块</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.simuwang</groupId>
+            <artifactId>service-base</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 1 - 0
service-manage/src/main/java/com/simuwang/manage/api/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.manage.api;

+ 1 - 0
service-manage/src/main/java/com/simuwang/manage/service/package-info.java

@@ -0,0 +1 @@
+package com.simuwang.manage.service;