Merge remote-tracking branch 'origin/master' into master
commit
7f92febe7d
@ -0,0 +1,7 @@
|
|||||||
|
.idea
|
||||||
|
target
|
||||||
|
*.iml
|
||||||
|
/view/flutter/**/gen/*
|
||||||
|
**/*.log
|
||||||
|
dist
|
||||||
|
logs
|
@ -0,0 +1,104 @@
|
|||||||
|
<?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>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-gaea-parent</artifactId>
|
||||||
|
<version>1.0.0.RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea</artifactId>
|
||||||
|
<description>anjiplus-template-gaea</description>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<name>template-gaea</name>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>report-core</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<gaea.version>1.0.0-SNAPSHOT</gaea.version>
|
||||||
|
<gaea.security.version>1.0.0-SNAPSHOT</gaea.security.version>
|
||||||
|
<gaea.export.version>1.0.0-SNAPSHOT</gaea.export.version>
|
||||||
|
<gaea.generator.version>1.0.0-SNAPSHOT</gaea.generator.version>
|
||||||
|
<gaea.log.version>1.0.0-SNAPSHOT</gaea.log.version>
|
||||||
|
<maven.test.skip>true</maven.test.skip>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-auth</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-business</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-common</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-generator</artifactId>
|
||||||
|
<version>${gaea.generator.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-gaea</artifactId>
|
||||||
|
<version>${gaea.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-starter-gaea-security</artifactId>
|
||||||
|
<version>${gaea.security.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-starter-gaea-export</artifactId>
|
||||||
|
<version>${gaea.export.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-starter-gaea-log</artifactId>
|
||||||
|
<version>${gaea.log.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>dev</id>
|
||||||
|
<properties>
|
||||||
|
<spring.profiles.active>dev</spring.profiles.active>
|
||||||
|
</properties>
|
||||||
|
<activation>
|
||||||
|
<activeByDefault>true</activeByDefault>
|
||||||
|
</activation>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>nexus-releases</id>
|
||||||
|
<url>http://nexus.anji-plus.com:8081/repository/maven-releases/</url>
|
||||||
|
</repository>
|
||||||
|
<snapshotRepository>
|
||||||
|
<id>nexus-snapshots</id>
|
||||||
|
<url>http://nexus.anji-plus.com:8081/repository/maven-snapshots/</url>
|
||||||
|
</snapshotRepository>
|
||||||
|
</distributionManagement>
|
||||||
|
</project>
|
@ -0,0 +1,115 @@
|
|||||||
|
<?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>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>aj-report</artifactId>
|
||||||
|
<name>aj-report</name>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-common</artifactId>
|
||||||
|
<!-- <exclusions>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||||
|
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||||
|
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- </exclusions>-->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anjiplus.template.gaea</groupId>
|
||||||
|
<artifactId>template-gaea-generator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||||
|
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||||
|
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-starter-gaea-export</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.anji-plus</groupId>
|
||||||
|
<artifactId>spring-boot-starter-gaea-log</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>druid</artifactId>
|
||||||
|
<version>1.1.22</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--kudu impala驱动-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>owinfo</groupId>
|
||||||
|
<artifactId>impalajdbc41</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${project.basedir}/src/main/resources/lib/ImpalaJDBC41.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.hive</groupId>
|
||||||
|
<artifactId>hive-jdbc</artifactId>
|
||||||
|
<version>1.2.1</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.eclipse.jetty.aggregate</groupId>
|
||||||
|
<artifactId>jetty-all</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<includeSystemScope>true</includeSystemScope>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.anjiplus.template.gaea.business;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.enabled.EnabledGaeaConfiguration;
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务模板
|
||||||
|
* @author lr
|
||||||
|
* @since 2021-02-03
|
||||||
|
*/
|
||||||
|
@EnabledGaeaConfiguration
|
||||||
|
@SpringBootApplication(scanBasePackages = {
|
||||||
|
"com.anjiplus.template.gaea",
|
||||||
|
"com.anji.plus"
|
||||||
|
})
|
||||||
|
@MapperScan(basePackages = {
|
||||||
|
"com.anjiplus.template.gaea.business.modules.*.dao",
|
||||||
|
"com.anjiplus.template.gaea.business.modules.*.**.dao",
|
||||||
|
"com.anji.plus.gaea.*.module.*.dao"
|
||||||
|
})
|
||||||
|
public class ReportApplication {
|
||||||
|
public static void main( String[] args ) {
|
||||||
|
SpringApplication.run(ReportApplication.class);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.base;
|
||||||
|
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.dto.BaseDTO;
|
||||||
|
import com.anji.plus.gaea.curd.entity.BaseEntity;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目级的Controller公共处理基类
|
||||||
|
*
|
||||||
|
* @author WongBin
|
||||||
|
* @date 2021/3/26
|
||||||
|
*/
|
||||||
|
public abstract class BaseController<P extends PageParam, T extends BaseEntity, D extends BaseDTO>
|
||||||
|
extends GaeaBaseController<P,T,D> {
|
||||||
|
/**
|
||||||
|
* 获取当前语言类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getI18nLang(){
|
||||||
|
return LocaleContextHolder.getLocale().getLanguage();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.base;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.entity.BaseEntity;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目级的Service公共处理基类
|
||||||
|
* @author WongBin
|
||||||
|
* @date 2021/3/26
|
||||||
|
*/
|
||||||
|
public interface BaseService<P extends PageParam, T extends BaseEntity> extends GaeaBaseService<P, T> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应码
|
||||||
|
* @author lr
|
||||||
|
* @since 2021-02-22
|
||||||
|
*/
|
||||||
|
public interface ResponseCode {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典项重复
|
||||||
|
*/
|
||||||
|
String DICT_ITEM_REPEAT = "Dict.item.code.exist";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数字字典国际化标识不能为null
|
||||||
|
*/
|
||||||
|
String DICT_CODE_LOCALE_NULL = "500-00002";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数为空
|
||||||
|
*/
|
||||||
|
String PARAM_IS_NULL = "Rule.execute.param.null";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则编译不通过
|
||||||
|
*/
|
||||||
|
String RULE_CONTENT_COMPILE_ERROR = "Rule.content.compile.error";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则执行不通过
|
||||||
|
*/
|
||||||
|
String RULE_CONTENT_EXECUTE_ERROR = "Rule.content.execute.error";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则编码已存在
|
||||||
|
*/
|
||||||
|
String RULE_CODE_EXIST = "Rule.code.exist";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对应规则内容不存在
|
||||||
|
*/
|
||||||
|
String RULE_CONTENT_NOT_EXIST = "Rule.content.not.exist";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对应规则字段值不存在
|
||||||
|
*/
|
||||||
|
String RULE_FIELDS_NOT_EXIST = "Rule.fields.not.exist";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则字段必填
|
||||||
|
*/
|
||||||
|
String RULE_FIELD_VALUE_IS_REQUIRED = "Rule.field.value.is.required";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则字段值类型错误
|
||||||
|
*/
|
||||||
|
String RULE_FIELD_VALUE_TYPE_ERROR = "Rule.field.value.type.error";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则参数校验不通过
|
||||||
|
*/
|
||||||
|
String RULE_FIELDS_CHECK_ERROR = "Rule.fields.check.error";
|
||||||
|
/**
|
||||||
|
* 组件未加载
|
||||||
|
*/
|
||||||
|
String COMPONENT_NOT_LOAD = "Component.load.check.error";
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.config;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.runner.ApplicationInitRunner;
|
||||||
|
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* business配置类
|
||||||
|
* @author lr
|
||||||
|
* @since 2021-04-08
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@MapperScan(basePackages = {
|
||||||
|
"com.anjiplus.template.gaea.business.modules.*.dao",
|
||||||
|
"com.anjiplus.template.gaea.business.modules.*.**.dao"
|
||||||
|
})
|
||||||
|
public class BusinessAutoConfiguration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统启动完执行
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public ApplicationInitRunner applicationInitRunner() {
|
||||||
|
return new ApplicationInitRunner();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 常量
|
||||||
|
* @author lr
|
||||||
|
* @since 2021-03-26
|
||||||
|
*/
|
||||||
|
public interface BusinessConstant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典项重复
|
||||||
|
*/
|
||||||
|
String DICT_ITEM_EXIST_GROUP = "dictItemExist";
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Permission;
|
||||||
|
import com.anji.plus.gaea.annotation.log.GaeaAuditLog;
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ReportDashboardObjectDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.service.ReportDashboardService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc 大屏设计 controller
|
||||||
|
* @website https://gitee.com/anji-plus/gaea
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "大屏设计管理")
|
||||||
|
@RequestMapping("/reportDashboard")
|
||||||
|
public class ReportDashboardController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportDashboardService reportDashboardService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预览、查询大屏详情
|
||||||
|
* @param reportCode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping({"/{reportCode}"})
|
||||||
|
@Permission(code = "DETAIL", name = "明细")
|
||||||
|
public ResponseBean detail(@PathVariable("reportCode") String reportCode) {
|
||||||
|
return ResponseBean.builder().data(reportDashboardService.getDetail(reportCode)).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存大屏设计
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping
|
||||||
|
@Permission(code = "INSERT", name = "新增")
|
||||||
|
@GaeaAuditLog(pageTitle = "新增")
|
||||||
|
public ResponseBean insert(@RequestBody ReportDashboardObjectDto dto) {
|
||||||
|
reportDashboardService.insertDashboard(dto);
|
||||||
|
return ResponseBean.builder().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取去单个图层数据
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/getData")
|
||||||
|
@Permission(code = "DETAIL", name = "明细图表数据")
|
||||||
|
public ResponseBean getData(@RequestBody ChartDto dto) {
|
||||||
|
return ResponseBean.builder().data(reportDashboardService.getChartData(dto)).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @description 大屏设计 dto
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ChartDto implements Serializable {
|
||||||
|
|
||||||
|
private String chartType;
|
||||||
|
|
||||||
|
/**数据集编码*/
|
||||||
|
private String setCode;
|
||||||
|
|
||||||
|
/** 传入的自定义参数*/
|
||||||
|
private Map<String, Object> contextData;
|
||||||
|
|
||||||
|
/**图表属性*/
|
||||||
|
private Map<String, String> chartProperties;
|
||||||
|
|
||||||
|
/**时间字段*/
|
||||||
|
private String timeLineFiled;
|
||||||
|
|
||||||
|
/**时间颗粒度*/
|
||||||
|
private String particles;
|
||||||
|
|
||||||
|
/**时间格式化*/
|
||||||
|
private String dataTimeFormat;
|
||||||
|
|
||||||
|
/**时间展示层*/
|
||||||
|
private String timeLineFormat;
|
||||||
|
|
||||||
|
private int timeUnit;
|
||||||
|
|
||||||
|
/**时间区间*/
|
||||||
|
private String startTime;
|
||||||
|
|
||||||
|
/**时间区间*/
|
||||||
|
private String endTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.controller.dto.ReportDashboardWidgetDto;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @description 大屏设计 dto
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardObjectDto implements Serializable {
|
||||||
|
|
||||||
|
/** 报表编码 */
|
||||||
|
private String reportCode;
|
||||||
|
/**
|
||||||
|
* 报表编码
|
||||||
|
*/
|
||||||
|
private ReportDashboardDto dashboard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大屏画布中的组件
|
||||||
|
*/
|
||||||
|
private List<ReportDashboardWidgetDto> widgets;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.controller.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import com.anji.plus.gaea.annotation.Query;
|
||||||
|
import com.anji.plus.gaea.constant.QueryEnum;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc ReportDashboard 大屏设计查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardParam extends PageParam implements Serializable{
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.dao;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.dao.entity.ReportDashboard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ReportDashboard Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface ReportDashboardMapper extends GaeaBaseMapper<ReportDashboard> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/4/26.
|
||||||
|
*/
|
||||||
|
public interface ChartStrategy {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图表类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String type();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对每种图表类型做单独的数据转换解析
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Object transform(ChartDto dto, List<JSONObject> data);
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ReportDashboardObjectDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.param.ReportDashboardParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.dao.entity.ReportDashboard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc ReportDashboard 大屏设计服务接口
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 14:52:21.761
|
||||||
|
**/
|
||||||
|
public interface ReportDashboardService extends GaeaBaseService<ReportDashboardParam, ReportDashboard> {
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 查询详情
|
||||||
|
*
|
||||||
|
* @param reportCode
|
||||||
|
*/
|
||||||
|
ReportDashboardObjectDto getDetail(String reportCode);
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 保存大屏设计
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
void insertDashboard(ReportDashboardObjectDto dto);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取单个图表数据
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Object getChartData(ChartDto dto);
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.service.ChartStrategy;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 柱状体或者折线图
|
||||||
|
* Created by raodeming on 2021/4/26.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class BarChartServiceImpl implements ChartStrategy {
|
||||||
|
/**
|
||||||
|
* 图表类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "widget-barchart|widget-linechart";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对每种图表类型做单独的数据转换解析
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object transform(ChartDto dto, List<JSONObject> data) {
|
||||||
|
// JSONObject json = new JSONObject();
|
||||||
|
// List<Object> xAxis = new ArrayList<>();
|
||||||
|
// List<Object> series = new ArrayList<>();
|
||||||
|
// data.forEach(jsonObject -> {
|
||||||
|
// jsonObject.forEach((s, o) -> {
|
||||||
|
// if ("xAxis".equals(s)) {
|
||||||
|
// xAxis.add(o);
|
||||||
|
// } else {
|
||||||
|
// series.add(o);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// json.put("xAxis", xAxis);
|
||||||
|
// JSONArray objects = new JSONArray();
|
||||||
|
// JSONObject jsonObject = new JSONObject();
|
||||||
|
// jsonObject.put("data", series);
|
||||||
|
// objects.add(jsonObject);
|
||||||
|
// json.put("series", objects);
|
||||||
|
// return json.toJSONString();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* {
|
||||||
|
"xAxis": [
|
||||||
|
"哈哈",
|
||||||
|
"洗洗",
|
||||||
|
"来了",
|
||||||
|
"问问",
|
||||||
|
"天天"
|
||||||
|
],
|
||||||
|
"series": [
|
||||||
|
{
|
||||||
|
"data": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}*/
|
||||||
|
}
|
@ -0,0 +1,108 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.service.ChartStrategy;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 折柱图
|
||||||
|
* Created by raodeming on 2021/4/26.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class BarLineChartServiceImpl implements ChartStrategy {
|
||||||
|
/**
|
||||||
|
* 图表类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "widget-barlinechart";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对每种图表类型做单独的数据转换解析
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object transform(ChartDto dto, List<JSONObject> data) {
|
||||||
|
// JSONObject json = new JSONObject();
|
||||||
|
// List<Object> xAxis = new ArrayList<>();
|
||||||
|
// Map<String, List<Object>> series = new HashMap<>();
|
||||||
|
// data.forEach(jsonObject -> {
|
||||||
|
// jsonObject.forEach((s, o) -> {
|
||||||
|
// if ("xAxis".equals(s)) {
|
||||||
|
// xAxis.add(o);
|
||||||
|
// } else {
|
||||||
|
// List<Object> objects;
|
||||||
|
// if (series.containsKey(s)) {
|
||||||
|
// objects = series.get(s);
|
||||||
|
// } else {
|
||||||
|
// objects = new ArrayList<>();
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// objects.add(o);
|
||||||
|
// series.put(s, objects);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// json.put("xAxis", xAxis);
|
||||||
|
// List<JSONObject> result = new ArrayList<>();
|
||||||
|
// series.forEach((s, objects) -> {
|
||||||
|
// JSONObject jsonObject = new JSONObject();
|
||||||
|
// jsonObject.put("name", s);
|
||||||
|
// if (s.endsWith("bar")) {
|
||||||
|
// jsonObject.put("type", "bar");
|
||||||
|
// } else {
|
||||||
|
// jsonObject.put("type", "line");
|
||||||
|
// }
|
||||||
|
// jsonObject.put("data", objects);
|
||||||
|
// result.add(jsonObject);
|
||||||
|
// });
|
||||||
|
// json.put("series", result);
|
||||||
|
// return json.toJSONString();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*{
|
||||||
|
"xAxis": [
|
||||||
|
"1月",
|
||||||
|
"2月",
|
||||||
|
"3月"
|
||||||
|
],
|
||||||
|
"series": [
|
||||||
|
{
|
||||||
|
"name": "指标1", //暂时用不上
|
||||||
|
"type": "bar", //需要处理
|
||||||
|
"data": [
|
||||||
|
2,
|
||||||
|
49,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "指标2",
|
||||||
|
"type": "line",
|
||||||
|
"yAxisIndex": 1,
|
||||||
|
"data": [
|
||||||
|
2,
|
||||||
|
32,
|
||||||
|
4
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.service.ChartStrategy;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 饼图或者空心饼图或者漏斗图
|
||||||
|
* Created by raodeming on 2021/4/26.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class GaugeChartServiceImpl implements ChartStrategy {
|
||||||
|
/**
|
||||||
|
* 图表类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "widget-gauge";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对每种图表类型做单独的数据转换解析
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object transform(ChartDto dto, List<JSONObject> data) {
|
||||||
|
|
||||||
|
// return "{\"value\": 50, \"name\": \"名称1\", \"unit\": \"%\"}";
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.controller.dto.ChartDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboard.service.ChartStrategy;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 饼图或者空心饼图或者漏斗图
|
||||||
|
* Created by raodeming on 2021/4/26.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class PieChartServiceImpl implements ChartStrategy {
|
||||||
|
/**
|
||||||
|
* 图表类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "widget-piechart|widget-hollow-piechart|widget-funnel";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对每种图表类型做单独的数据转换解析
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object transform(ChartDto dto, List<JSONObject> data) {
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [
|
||||||
|
{
|
||||||
|
"value": 11,
|
||||||
|
"name": "指标1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 10,
|
||||||
|
"name": "指标2"
|
||||||
|
}
|
||||||
|
]*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboard.util;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/4/29.
|
||||||
|
*/
|
||||||
|
public class DateUtil {
|
||||||
|
|
||||||
|
private static String defaultDatePattern = "yyyy-MM-dd";
|
||||||
|
|
||||||
|
private static String defaultDateTimePattern = "yyyy-MM-dd HH:mm:ss.SSS";
|
||||||
|
|
||||||
|
private static String defaultyyyyMMddPattern = "yyyyMMdd";
|
||||||
|
|
||||||
|
private static String defaultYmdHmsPattern = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
|
||||||
|
private static String defaultHmsPattern = "HH:mm:ss";
|
||||||
|
/**字符串yyyy-MM-dd HH:mm:ss转日期
|
||||||
|
* @param dateStr yyyy-MM-dd HH:mm:ss
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Date parseHmsTime(String dateStr) {
|
||||||
|
return parse(dateStr, defaultYmdHmsPattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**字符串转日期
|
||||||
|
* @param dateStr
|
||||||
|
* @param pattern
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Date parse(String dateStr, String pattern) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
||||||
|
if (dateStr == null || "".equals(dateStr)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Date d = sdf.parse(dateStr);
|
||||||
|
return d;
|
||||||
|
} catch (ParseException e) {
|
||||||
|
System.out.println("日期转换错误: " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @description 大屏看板数据渲染 dto
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardWidgetDto implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组件类型参考字典DASHBOARD_PANEL_TYPE
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* value
|
||||||
|
*/
|
||||||
|
private ReportDashboardWidgetValueDto value;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.controller.dto;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @description 大屏看板数据渲染 dto
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardWidgetValueDto implements Serializable {
|
||||||
|
/** 报表编码 */
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
/** 组件的渲染属性json */
|
||||||
|
private JSONObject setup;
|
||||||
|
|
||||||
|
/** 组件的数据属性json */
|
||||||
|
private JSONObject data;
|
||||||
|
|
||||||
|
/** 组件的配置属性json */
|
||||||
|
private JSONObject collapse;
|
||||||
|
|
||||||
|
/** 组件的大小位置属性json */
|
||||||
|
private JSONObject position;
|
||||||
|
|
||||||
|
/** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
/** 0--未删除 1--已删除 DIC_NAME=DEL_FLAG */
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
/** 排序,图层的概念 */
|
||||||
|
private Long sort;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.controller.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import com.anji.plus.gaea.annotation.Query;
|
||||||
|
import com.anji.plus.gaea.constant.QueryEnum;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc ReportDashboardWidget 大屏看板数据渲染查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardWidgetParam extends PageParam implements Serializable{
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao.entity.ReportDashboardWidget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ReportDashboardWidget Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface ReportDashboardWidgetMapper extends GaeaBaseMapper<ReportDashboardWidget> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao.entity;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 大屏看板数据渲染 entity
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@TableName(value="gaea_report_dashboard_widget")
|
||||||
|
@Data
|
||||||
|
public class ReportDashboardWidget extends GaeaBaseEntity {
|
||||||
|
@ApiModelProperty(value = "报表编码")
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件类型参考字典DASHBOARD_PANEL_TYPE")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件的渲染属性json")
|
||||||
|
private String setup;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件的数据属性json")
|
||||||
|
private String data;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件的配置属性json")
|
||||||
|
private String collapse;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件的大小位置属性json")
|
||||||
|
private String position;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG")
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = " 0--未删除 1--已删除 DIC_NAME=DEL_FLAG")
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "排序,图层的概念")
|
||||||
|
private Long sort;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.service;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao.entity.ReportDashboardWidget;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.controller.param.ReportDashboardWidgetParam;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc ReportDashboardWidget 大屏看板数据渲染服务接口
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
public interface ReportDashboardWidgetService extends GaeaBaseService<ReportDashboardWidgetParam, ReportDashboardWidget> {
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 查询详情
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
ReportDashboardWidget getDetail(Long id);
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dashboardwidget.service.impl;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao.entity.ReportDashboardWidget;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.service.ReportDashboardWidgetService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dashboardwidget.dao.ReportDashboardWidgetMapper;
|
||||||
|
/**
|
||||||
|
* @desc ReportDashboardWidget 大屏看板数据渲染服务实现
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-04-12 15:12:43.724
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
//@RequiredArgsConstructor
|
||||||
|
public class ReportDashboardWidgetServiceImpl implements ReportDashboardWidgetService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportDashboardWidgetMapper reportDashboardWidgetMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseMapper<ReportDashboardWidget> getMapper() {
|
||||||
|
return reportDashboardWidgetMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportDashboardWidget getDetail(Long id) {
|
||||||
|
ReportDashboardWidget reportDashboardWidget = this.selectOne(id);
|
||||||
|
return reportDashboardWidget;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.dto.GaeaBaseDTO;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @description 数据集 dto
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataSetDto extends GaeaBaseDTO implements Serializable {
|
||||||
|
/** 数据集编码 */
|
||||||
|
private String setCode;
|
||||||
|
|
||||||
|
/** 数据集名称 */
|
||||||
|
private String setName;
|
||||||
|
|
||||||
|
/** 数据集描述 */
|
||||||
|
private String setDesc;
|
||||||
|
|
||||||
|
/** 数据源编码 */
|
||||||
|
private String sourceCode;
|
||||||
|
|
||||||
|
/** 动态查询sql或者接口中的请求体 */
|
||||||
|
private String dynSentence;
|
||||||
|
|
||||||
|
/** 结果案例 */
|
||||||
|
private String caseResult;
|
||||||
|
|
||||||
|
/** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
/** 0--未删除 1--已删除 DIC_NAME=DELETE_FLAG */
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
/** 请求参数集合 */
|
||||||
|
private List<DataSetParamDto> dataSetParamDtoList;
|
||||||
|
|
||||||
|
/** 数据转换集合 */
|
||||||
|
private List<DataSetTransformDto> dataSetTransformDtoList;
|
||||||
|
|
||||||
|
/** 传入的自定义参数*/
|
||||||
|
private Map<String, Object> contextData;
|
||||||
|
|
||||||
|
private Set<String> setParamList;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/26.
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OriginalDataDto implements Serializable {
|
||||||
|
|
||||||
|
/**总数*/
|
||||||
|
private long total;
|
||||||
|
|
||||||
|
/**获取的数据详情*/
|
||||||
|
private List<JSONObject> data;
|
||||||
|
|
||||||
|
public OriginalDataDto(List<JSONObject> data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OriginalDataDto(long total, List<JSONObject> data) {
|
||||||
|
this.total = total;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OriginalDataDto() {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.controller.param;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Query;
|
||||||
|
import com.anji.plus.gaea.constant.QueryEnum;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSet 数据集查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataSetParam extends PageParam implements Serializable{
|
||||||
|
/** 数据集编码 */
|
||||||
|
@Query(QueryEnum.LIKE)
|
||||||
|
private String setCode;
|
||||||
|
|
||||||
|
/** 数据集名称 */
|
||||||
|
@Query(QueryEnum.LIKE)
|
||||||
|
private String setName;
|
||||||
|
|
||||||
|
/** 数据源编码 */
|
||||||
|
@Query(QueryEnum.EQ)
|
||||||
|
private String sourceCode;
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.controller.param;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSet 数据集查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataSetTestTransformParam implements Serializable{
|
||||||
|
|
||||||
|
/** 数据源编码 */
|
||||||
|
@NotBlank(message = "sourceCode not empty")
|
||||||
|
private String sourceCode;
|
||||||
|
|
||||||
|
/** 动态查询sql或者接口中的请求体 */
|
||||||
|
private String dynSentence;
|
||||||
|
|
||||||
|
/** 请求参数集合 */
|
||||||
|
private List<DataSetParamDto> dataSetParamDtoList;
|
||||||
|
|
||||||
|
/** 数据转换集合 */
|
||||||
|
private List<DataSetTransformDto> dataSetTransformDtoList;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.dao;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.dao.entity.DataSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DataSet Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface DataSetMapper extends GaeaBaseMapper<DataSet> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.dao.entity;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Unique;
|
||||||
|
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
|
||||||
|
import com.anjiplus.template.gaea.common.RespCommonCode;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 数据集 entity
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@TableName(value="gaea_report_data_set")
|
||||||
|
@Data
|
||||||
|
public class DataSet extends GaeaBaseEntity {
|
||||||
|
@ApiModelProperty(value = "数据集编码")
|
||||||
|
@Unique(code = RespCommonCode.SET_CODE_ISEXIST)
|
||||||
|
private String setCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据集名称")
|
||||||
|
private String setName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据集描述")
|
||||||
|
private String setDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据源编码")
|
||||||
|
private String sourceCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "动态查询sql或者接口中的请求体")
|
||||||
|
private String dynSentence;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "结果案例")
|
||||||
|
private String caseResult;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG")
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG")
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.service;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.DataSetDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.OriginalDataDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.param.DataSetParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.dao.entity.DataSet;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSet 数据集服务接口
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
public interface DataSetService extends GaeaBaseService<DataSetParam, DataSet> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单条详情
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
DataSetDto detailSet(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单条详情
|
||||||
|
* @param setCode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
DataSetDto detailSet(String setCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增数据集、添加查询参数、数据转换
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
DataSetDto insertSet(DataSetDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新数据集、添加查询参数、数据转换
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
void updateSet(DataSetDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据集、添加查询参数、数据转换
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void deleteSet(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
OriginalDataDto getData(DataSetDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
OriginalDataDto testTransform(DataSetDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有数据集
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DataSet> queryAllDataSet();
|
||||||
|
}
|
@ -0,0 +1,343 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSet.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anji.plus.gaea.constant.Enabled;
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
|
||||||
|
import com.anji.plus.gaea.utils.GaeaBeanUtils;
|
||||||
|
import com.anjiplus.template.gaea.business.code.ResponseCode;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.OriginalDataDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.DataSetDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.dao.DataSetMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.dao.entity.DataSet;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.service.DataSetService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.DataSetParamService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.DataSetTransformService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.dto.DataSourceDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.dao.entity.DataSource;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.service.DataSourceService;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSet 数据集服务实现
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:11:31.150755900
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
//@RequiredArgsConstructor
|
||||||
|
public class DataSetServiceImpl implements DataSetService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetMapper dataSetMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetParamService dataSetParamService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetTransformService dataSetTransformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSourceService dataSourceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseMapper<DataSet> getMapper() {
|
||||||
|
return dataSetMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单条详情
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DataSetDto detailSet(Long id) {
|
||||||
|
DataSetDto dto = new DataSetDto();
|
||||||
|
DataSet result = selectOne(id);
|
||||||
|
String setCode = result.getSetCode();
|
||||||
|
GaeaBeanUtils.copyAndFormatter(result, dto);
|
||||||
|
return getDetailSet(dto, setCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单条详情
|
||||||
|
*
|
||||||
|
* @param setCode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DataSetDto detailSet(String setCode) {
|
||||||
|
DataSetDto dto = new DataSetDto();
|
||||||
|
DataSet result = selectOne("set_code", setCode);
|
||||||
|
GaeaBeanUtils.copyAndFormatter(result, dto);
|
||||||
|
return getDetailSet(dto, setCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataSetDto getDetailSet(DataSetDto dto, String setCode) {
|
||||||
|
//查询参数
|
||||||
|
List<DataSetParam> dataSetParamList = dataSetParamService.list(
|
||||||
|
new QueryWrapper<DataSetParam>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetParam::getSetCode, setCode)
|
||||||
|
);
|
||||||
|
List<DataSetParamDto> dataSetParamDtoList = new ArrayList<>();
|
||||||
|
dataSetParamList.forEach(dataSetParam -> {
|
||||||
|
DataSetParamDto dataSetParamDto = new DataSetParamDto();
|
||||||
|
GaeaBeanUtils.copyAndFormatter(dataSetParam, dataSetParamDto);
|
||||||
|
dataSetParamDtoList.add(dataSetParamDto);
|
||||||
|
});
|
||||||
|
dto.setDataSetParamDtoList(dataSetParamDtoList);
|
||||||
|
|
||||||
|
//数据转换
|
||||||
|
|
||||||
|
List<DataSetTransform> dataSetTransformList = dataSetTransformService.list(
|
||||||
|
new QueryWrapper<DataSetTransform>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetTransform::getSetCode, setCode)
|
||||||
|
.orderByAsc(DataSetTransform::getOrderNum)
|
||||||
|
);
|
||||||
|
List<DataSetTransformDto> dataSetTransformDtoList = new ArrayList<>();
|
||||||
|
dataSetTransformList.forEach(dataSetTransform -> {
|
||||||
|
DataSetTransformDto dataSetTransformDto = new DataSetTransformDto();
|
||||||
|
GaeaBeanUtils.copyAndFormatter(dataSetTransform, dataSetTransformDto);
|
||||||
|
dataSetTransformDtoList.add(dataSetTransformDto);
|
||||||
|
});
|
||||||
|
dto.setDataSetTransformDtoList(dataSetTransformDtoList);
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(dto.getCaseResult())) {
|
||||||
|
try {
|
||||||
|
JSONArray jsonArray = JSONArray.parseArray(dto.getCaseResult());
|
||||||
|
JSONObject jsonObject = jsonArray.getJSONObject(0);
|
||||||
|
dto.setSetParamList(jsonObject.keySet());
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增数据集、添加查询参数、数据转换
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public DataSetDto insertSet(DataSetDto dto) {
|
||||||
|
List<DataSetParamDto> dataSetParamDtoList = dto.getDataSetParamDtoList();
|
||||||
|
List<DataSetTransformDto> dataSetTransformDtoList = dto.getDataSetTransformDtoList();
|
||||||
|
|
||||||
|
//1.新增数据集
|
||||||
|
DataSet dataSet = new DataSet();
|
||||||
|
BeanUtils.copyProperties(dto, dataSet);
|
||||||
|
insert(dataSet);
|
||||||
|
//2.更新查询参数
|
||||||
|
dataSetParamBatch(dataSetParamDtoList, dto.getSetCode());
|
||||||
|
|
||||||
|
//3.更新数据转换
|
||||||
|
dataSetTransformBatch(dataSetTransformDtoList, dto.getSetCode());
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新数据集、添加查询参数、数据转换
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void updateSet(DataSetDto dto) {
|
||||||
|
List<DataSetParamDto> dataSetParamDtoList = dto.getDataSetParamDtoList();
|
||||||
|
List<DataSetTransformDto> dataSetTransformDtoList = dto.getDataSetTransformDtoList();
|
||||||
|
//1.更新数据集
|
||||||
|
DataSet dataSet = new DataSet();
|
||||||
|
BeanUtils.copyProperties(dto, dataSet);
|
||||||
|
update(dataSet);
|
||||||
|
|
||||||
|
//2.更新查询参数
|
||||||
|
dataSetParamBatch(dataSetParamDtoList, dto.getSetCode());
|
||||||
|
|
||||||
|
//3.更新数据转换
|
||||||
|
dataSetTransformBatch(dataSetTransformDtoList, dto.getSetCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据集、添加查询参数、数据转换
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteSet(Long id) {
|
||||||
|
DataSet dataSet = selectOne(id);
|
||||||
|
String setCode = dataSet.getSetCode();
|
||||||
|
//1.删除数据集
|
||||||
|
deleteById(id);
|
||||||
|
|
||||||
|
//2.删除查询参数
|
||||||
|
dataSetParamService.delete(
|
||||||
|
new QueryWrapper<DataSetParam>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetParam::getSetCode, setCode)
|
||||||
|
);
|
||||||
|
|
||||||
|
//3.删除数据转换
|
||||||
|
dataSetTransformService.delete(
|
||||||
|
new QueryWrapper<DataSetTransform>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetTransform::getSetCode, setCode)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OriginalDataDto getData(DataSetDto dto) {
|
||||||
|
OriginalDataDto originalDataDto = new OriginalDataDto();
|
||||||
|
String setCode = dto.getSetCode();
|
||||||
|
//1.获取数据集、参数替换、数据转换
|
||||||
|
DataSetDto dataSetDto = detailSet(setCode);
|
||||||
|
//2.获取数据源
|
||||||
|
DataSource dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode());
|
||||||
|
//3.参数替换
|
||||||
|
//3.1参数校验
|
||||||
|
boolean verification = dataSetParamService.verification(dataSetDto.getDataSetParamDtoList(), dto.getContextData());
|
||||||
|
if (!verification) {
|
||||||
|
throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR);
|
||||||
|
}
|
||||||
|
String dynSentence = dataSetParamService.transform(dto.getContextData(), dataSetDto.getDynSentence());
|
||||||
|
//4.获取数据
|
||||||
|
DataSourceDto dataSourceDto = new DataSourceDto();
|
||||||
|
BeanUtils.copyProperties(dataSource, dataSourceDto);
|
||||||
|
dataSourceDto.setDynSentence(dynSentence);
|
||||||
|
dataSourceDto.setContextData(dto.getContextData());
|
||||||
|
//获取total,判断contextData中是否传入分页参数
|
||||||
|
if (null != dto.getContextData()
|
||||||
|
&& dto.getContextData().containsKey("pageNumber")
|
||||||
|
&& dto.getContextData().containsKey("pageSize")) {
|
||||||
|
long total = dataSourceService.total(dataSourceDto, dto);
|
||||||
|
originalDataDto.setTotal(total);
|
||||||
|
}
|
||||||
|
List<JSONObject> data = dataSourceService.execute(dataSourceDto);
|
||||||
|
//5.数据转换
|
||||||
|
List<JSONObject> transform = dataSetTransformService.transform(dataSetDto.getDataSetTransformDtoList(), data);
|
||||||
|
originalDataDto.setData(transform);
|
||||||
|
return originalDataDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OriginalDataDto testTransform(DataSetDto dto) {
|
||||||
|
OriginalDataDto originalDataDto = new OriginalDataDto();
|
||||||
|
String sourceCode = dto.getSourceCode();
|
||||||
|
//1.获取数据源
|
||||||
|
DataSource dataSource = dataSourceService.selectOne("source_code", sourceCode);
|
||||||
|
//3.参数替换
|
||||||
|
//3.1参数校验
|
||||||
|
boolean verification = dataSetParamService.verification(dto.getDataSetParamDtoList(), null);
|
||||||
|
if (!verification) {
|
||||||
|
throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
String dynSentence = dataSetParamService.transform(dto.getDataSetParamDtoList(), dto.getDynSentence());
|
||||||
|
//4.获取数据
|
||||||
|
DataSourceDto dataSourceDto = new DataSourceDto();
|
||||||
|
BeanUtils.copyProperties(dataSource, dataSourceDto);
|
||||||
|
dataSourceDto.setDynSentence(dynSentence);
|
||||||
|
dataSourceDto.setContextData(dto.getContextData());
|
||||||
|
|
||||||
|
//获取total,判断DataSetParamDtoList中是否传入分页参数
|
||||||
|
Map<String, Object> collect = dto.getDataSetParamDtoList().stream().collect(Collectors.toMap(DataSetParamDto::getParamName, DataSetParamDto::getSampleItem));
|
||||||
|
if (collect.containsKey("pageNumber") && collect.containsKey("pageSize")) {
|
||||||
|
dto.setContextData(collect);
|
||||||
|
long total = dataSourceService.total(dataSourceDto, dto);
|
||||||
|
originalDataDto.setTotal(total);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<JSONObject> data = dataSourceService.execute(dataSourceDto);
|
||||||
|
//5.数据转换
|
||||||
|
List<JSONObject> transform = dataSetTransformService.transform(dto.getDataSetTransformDtoList(), data);
|
||||||
|
originalDataDto.setData(transform);
|
||||||
|
return originalDataDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有数据集
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<DataSet> queryAllDataSet() {
|
||||||
|
LambdaQueryWrapper<DataSet> wrapper = Wrappers.lambdaQuery();
|
||||||
|
wrapper.select(DataSet::getSetCode, DataSet::getSetName, DataSet::getSetDesc, DataSet::getId)
|
||||||
|
.eq(DataSet::getEnableFlag, Enabled.YES.getValue());
|
||||||
|
return dataSetMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dataSetParamBatch(List<DataSetParamDto> dataSetParamDtoList,String setCode){
|
||||||
|
dataSetParamService.delete(
|
||||||
|
new QueryWrapper<DataSetParam>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetParam::getSetCode, setCode)
|
||||||
|
);
|
||||||
|
if (null == dataSetParamDtoList || dataSetParamDtoList.size() <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<DataSetParam> dataSetParamList = new ArrayList<>();
|
||||||
|
dataSetParamDtoList.forEach(dataSetParamDto -> {
|
||||||
|
DataSetParam dataSetParam = new DataSetParam();
|
||||||
|
BeanUtils.copyProperties(dataSetParamDto, dataSetParam);
|
||||||
|
dataSetParam.setSetCode(setCode);
|
||||||
|
dataSetParamList.add(dataSetParam);
|
||||||
|
});
|
||||||
|
dataSetParamService.insertBatch(dataSetParamList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dataSetTransformBatch(List<DataSetTransformDto> dataSetTransformDtoList,String setCode){
|
||||||
|
dataSetTransformService.delete(
|
||||||
|
new QueryWrapper<DataSetTransform>()
|
||||||
|
.lambda()
|
||||||
|
.eq(DataSetTransform::getSetCode, setCode)
|
||||||
|
);
|
||||||
|
if (null == dataSetTransformDtoList || dataSetTransformDtoList.size() <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<DataSetTransform> dataSetTransformList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataSetTransformDtoList.size(); i++) {
|
||||||
|
DataSetTransform dataSetTransform = new DataSetTransform();
|
||||||
|
BeanUtils.copyProperties(dataSetTransformDtoList.get(i), dataSetTransform);
|
||||||
|
dataSetTransform.setOrderNum(i + 1);
|
||||||
|
dataSetTransform.setSetCode(setCode);
|
||||||
|
dataSetTransformList.add(dataSetTransform);
|
||||||
|
}
|
||||||
|
dataSetTransformService.insertBatch(dataSetTransformList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamValidationParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.DataSetParamService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.ConnectionParam;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc 数据集动态参数 controller
|
||||||
|
* @website https://gitee.com/anji-plus/gaea
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:12:33.108033200
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "数据集动态参数管理")
|
||||||
|
@RequestMapping("/dataSetParam")
|
||||||
|
public class DataSetParamController extends GaeaBaseController<DataSetParamParam, DataSetParam, DataSetParamDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetParamService dataSetParamService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<DataSetParamParam, DataSetParam> getService() {
|
||||||
|
return dataSetParamService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSetParam getEntity() {
|
||||||
|
return new DataSetParam();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSetParamDto getDTO() {
|
||||||
|
return new DataSetParamDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 查询参数是否正确
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/verification")
|
||||||
|
public ResponseBean verification(@Validated @RequestBody DataSetParamValidationParam param) {
|
||||||
|
DataSetParamDto dto = new DataSetParamDto();
|
||||||
|
dto.setSampleItem(param.getSampleItem());
|
||||||
|
dto.setValidationRules(param.getValidationRules());
|
||||||
|
return responseSuccessWithData(dataSetParamService.verification(dto));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSetParam 数据集动态参数查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:12:33.108033200
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataSetParamParam extends PageParam implements Serializable{
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DataSetParam Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:12:33.108033200
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface DataSetParamMapper extends GaeaBaseMapper<DataSetParam> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.service;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.DataSetDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Raod
|
||||||
|
* @desc DataSetParam 数据集动态参数服务接口
|
||||||
|
* @date 2021-03-18 12:12:33.108033200
|
||||||
|
**/
|
||||||
|
public interface DataSetParamService extends GaeaBaseService<DataSetParamParam, DataSetParam> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数替换
|
||||||
|
*
|
||||||
|
* @param contextData
|
||||||
|
* @param dynSentence
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String transform(Map<String, Object> contextData, String dynSentence);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数替换
|
||||||
|
*
|
||||||
|
* @param dataSetParamDtoList
|
||||||
|
* @param dynSentence
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String transform(List<DataSetParamDto> dataSetParamDtoList, String dynSentence);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数校验 js脚本
|
||||||
|
* @param dataSetParamDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean verification(DataSetParamDto dataSetParamDto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数校验 js脚本
|
||||||
|
*
|
||||||
|
* @param dataSetParamDtoList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean verification(List<DataSetParamDto> dataSetParamDtoList, Map<String, Object> contextData);
|
||||||
|
}
|
@ -0,0 +1,136 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.impl;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.DataSetParamMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.DataSetParamService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetParam.util.ParamsResolverHelper;
|
||||||
|
import com.anjiplus.template.gaea.common.RespCommonCode;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.script.ScriptEngine;
|
||||||
|
import javax.script.ScriptEngineManager;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSetParam 数据集动态参数服务实现
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:12:33.108033200
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
//@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class DataSetParamServiceImpl implements DataSetParamService {
|
||||||
|
|
||||||
|
private ScriptEngine engine;
|
||||||
|
{
|
||||||
|
ScriptEngineManager manager = new ScriptEngineManager();
|
||||||
|
engine = manager.getEngineByName("JavaScript");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetParamMapper dataSetParamMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseMapper<DataSetParam> getMapper() {
|
||||||
|
return dataSetParamMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数替换
|
||||||
|
*
|
||||||
|
* @param contextData
|
||||||
|
* @param dynSentence
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String transform(Map<String, Object> contextData, String dynSentence) {
|
||||||
|
if (StringUtils.isBlank(dynSentence)) {
|
||||||
|
return dynSentence;
|
||||||
|
}
|
||||||
|
if (dynSentence.contains("${")) {
|
||||||
|
dynSentence = ParamsResolverHelper.resolveParams(contextData, dynSentence);
|
||||||
|
}
|
||||||
|
if (dynSentence.contains("${")) {
|
||||||
|
throw BusinessExceptionBuilder.build(RespCommonCode.INCOMPLETE_PARAMETER_REPLACEMENT_VALUES, dynSentence);
|
||||||
|
}
|
||||||
|
return dynSentence;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数替换
|
||||||
|
*
|
||||||
|
* @param dataSetParamDtoList
|
||||||
|
* @param dynSentence
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String transform(List<DataSetParamDto> dataSetParamDtoList, String dynSentence) {
|
||||||
|
Map<String, Object> contextData = new HashMap<>();
|
||||||
|
if (null == dataSetParamDtoList || dataSetParamDtoList.size() <= 0) {
|
||||||
|
return dynSentence;
|
||||||
|
}
|
||||||
|
dataSetParamDtoList.forEach(dataSetParamDto -> {
|
||||||
|
contextData.put(dataSetParamDto.getParamName(), dataSetParamDto.getSampleItem());
|
||||||
|
});
|
||||||
|
return transform(contextData, dynSentence);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数校验 js脚本
|
||||||
|
*
|
||||||
|
* @param dataSetParamDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean verification(DataSetParamDto dataSetParamDto) {
|
||||||
|
|
||||||
|
String sampleItem = dataSetParamDto.getSampleItem();
|
||||||
|
String validationRules = dataSetParamDto.getValidationRules();
|
||||||
|
if (StringUtils.isNotBlank(validationRules)) {
|
||||||
|
validationRules = validationRules + "\nvar result = verification('" + sampleItem + "');";
|
||||||
|
try {
|
||||||
|
engine.eval(validationRules);
|
||||||
|
return Boolean.parseBoolean(engine.get("result").toString());
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw BusinessExceptionBuilder.build(RespCommonCode.EXECUTE_JS_ERROR, ex.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数校验 js脚本
|
||||||
|
*
|
||||||
|
* @param dataSetParamDtoList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean verification(List<DataSetParamDto> dataSetParamDtoList, Map<String, Object> contextData) {
|
||||||
|
if (null == dataSetParamDtoList || dataSetParamDtoList.size() == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DataSetParamDto dataSetParamDto : dataSetParamDtoList) {
|
||||||
|
if (null != contextData) {
|
||||||
|
String value = contextData.getOrDefault(dataSetParamDto.getParamName(), "").toString();
|
||||||
|
dataSetParamDto.setSampleItem(value);
|
||||||
|
}
|
||||||
|
if (!verification(dataSetParamDto)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetParam.util;
|
||||||
|
|
||||||
|
import org.springframework.util.PropertyPlaceholderHelper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/23.
|
||||||
|
*/
|
||||||
|
public class ParamsResolverHelper {
|
||||||
|
private static String placeholderPrefix = "${";
|
||||||
|
private static String placeholderSuffix = "}";
|
||||||
|
private static PropertyPlaceholderHelper helper =
|
||||||
|
new PropertyPlaceholderHelper(placeholderPrefix, placeholderSuffix);
|
||||||
|
|
||||||
|
public static String resolveParams(final Map<String, Object> param, String con) {
|
||||||
|
con = helper.replacePlaceholders(con, (key -> param.get(key) + ""));
|
||||||
|
return con;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Pattern key = Pattern.compile("\\$\\{(.*?)\\}");
|
||||||
|
|
||||||
|
public static List<String> findParamKeys(String con) {
|
||||||
|
Matcher m = key.matcher(con);
|
||||||
|
List ret = new ArrayList();
|
||||||
|
while (m.find()) {
|
||||||
|
ret.add(m.group(1));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param.DataSetTransformParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.DataSetTransformService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc 数据集数据转换 controller
|
||||||
|
* @website https://gitee.com/anji-plus/gaea
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:13:15.591309400
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "数据集数据转换管理")
|
||||||
|
@RequestMapping("/dataSetTransform")
|
||||||
|
public class DataSetTransformController extends GaeaBaseController<DataSetTransformParam, DataSetTransform, DataSetTransformDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSetTransformService dataSetTransformService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<DataSetTransformParam, DataSetTransform> getService() {
|
||||||
|
return dataSetTransformService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSetTransform getEntity() {
|
||||||
|
return new DataSetTransform();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSetTransformDto getDTO() {
|
||||||
|
return new DataSetTransformDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
/**/
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSetTransform 数据集数据转换查询输入类
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:13:15.591309400
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataSetTransformParam extends PageParam implements Serializable{
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DataSetTransform Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:13:15.591309400
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface DataSetTransformMapper extends GaeaBaseMapper<DataSetTransform> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param.DataSetTransformParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSetTransform 数据集数据转换服务接口
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:13:15.591309400
|
||||||
|
**/
|
||||||
|
public interface DataSetTransformService extends GaeaBaseService<DataSetTransformParam, DataSetTransform> {
|
||||||
|
|
||||||
|
List<JSONObject> transform(List<DataSetTransformDto> dataSetTransformDtoList, List<JSONObject> data);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/23.
|
||||||
|
*/
|
||||||
|
public interface TransformStrategy {
|
||||||
|
/**
|
||||||
|
* 数据清洗转换 类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String type();
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 清洗转换算法接口
|
||||||
|
* @param def
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<JSONObject> transform(DataSetTransformDto def, List<JSONObject> data);
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.TransformStrategy;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典转换
|
||||||
|
* Created by raodeming on 2021/3/29.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class DictTransformServiceImpl implements TransformStrategy {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据清洗转换 类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "dict";
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 清洗转换算法接口
|
||||||
|
* @param def
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<JSONObject> transform(DataSetTransformDto def, List<JSONObject> data) {
|
||||||
|
String transformScript = def.getTransformScript();
|
||||||
|
if (StringUtils.isBlank(transformScript)) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(transformScript);
|
||||||
|
Set<String> keys = jsonObject.keySet();
|
||||||
|
|
||||||
|
data.forEach(dataDetail -> dataDetail.forEach((key, value) -> {
|
||||||
|
if (keys.contains(key)) {
|
||||||
|
String string = jsonObject.getJSONObject(key).getString(value.toString());
|
||||||
|
if (StringUtils.isNotBlank(string)) {
|
||||||
|
dataDetail.put(key, string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.TransformStrategy;
|
||||||
|
import com.anjiplus.template.gaea.common.RespCommonCode;
|
||||||
|
import jdk.nashorn.api.scripting.ScriptObjectMirror;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.script.ScriptEngine;
|
||||||
|
import javax.script.ScriptEngineManager;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/23.
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class JsTransformServiceImpl implements TransformStrategy {
|
||||||
|
|
||||||
|
private ScriptEngine engine;
|
||||||
|
{
|
||||||
|
ScriptEngineManager manager = new ScriptEngineManager();
|
||||||
|
engine = manager.getEngineByName("JavaScript");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据清洗转换 类型
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String type() {
|
||||||
|
return "js";
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 清洗转换算法接口
|
||||||
|
* @param def
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<JSONObject> transform(DataSetTransformDto def, List<JSONObject> data) {
|
||||||
|
return getValueFromJS(def,data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JSONObject> getValueFromJS(DataSetTransformDto def, List<JSONObject> data) {
|
||||||
|
String js = def.getTransformScript();
|
||||||
|
js = js + "\nvar result = dataTransform(eval(" + data.toString() + "));";
|
||||||
|
try {
|
||||||
|
engine.eval(js);
|
||||||
|
ScriptObjectMirror result = (ScriptObjectMirror) engine.get("result");
|
||||||
|
return result.values().stream().map(o -> JSONObject.parseObject(JSONObject.toJSONString(o))).collect(Collectors.toList());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw BusinessExceptionBuilder.build(RespCommonCode.EXECUTE_JS_ERROR, ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.dto.DataSourceDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.ConnectionParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.DataSourceParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.dao.entity.DataSource;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.service.DataSourceService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc 数据源 controller
|
||||||
|
* @website https://gitee.com/anji-plus/gaea
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:09:57.728203200
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "数据源管理")
|
||||||
|
@RequestMapping("/dataSource")
|
||||||
|
public class DataSourceController extends GaeaBaseController<DataSourceParam, DataSource, DataSourceDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSourceService dataSourceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<DataSourceParam, DataSource> getService() {
|
||||||
|
return dataSourceService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSource getEntity() {
|
||||||
|
return new DataSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceDto getDTO() {
|
||||||
|
return new DataSourceDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有数据源
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/queryAllDataSource")
|
||||||
|
public ResponseBean queryAllDataSource() {
|
||||||
|
return responseSuccessWithData(dataSourceService.queryAllDataSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 连接
|
||||||
|
* @param connectionParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/testConnection")
|
||||||
|
public ResponseBean testConnection(@Validated @RequestBody ConnectionParam connectionParam) {
|
||||||
|
return responseSuccessWithData(dataSourceService.testConnection(connectionParam));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.dao;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.dao.entity.DataSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DataSource Mapper
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:09:57.728203200
|
||||||
|
**/
|
||||||
|
@Mapper
|
||||||
|
public interface DataSourceMapper extends GaeaBaseMapper<DataSource> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配置接口
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public interface IConfig {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置驱动类
|
||||||
|
*
|
||||||
|
* @param driverClass 驱动类
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
void setDriverClass(final String driverClass);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jdbc url
|
||||||
|
* @param jdbcUrl url
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
void setJdbcUrl(final String jdbcUrl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置用户信息
|
||||||
|
* @param user 用户信息
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
void setUser(final String user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置密码
|
||||||
|
* @param password 密码
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
void setPassword(final String password);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配置接口
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public interface IDataSourceConfig extends IConfig, DataSource {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命周期管理
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
public interface ILifeCycle {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命的初始化
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
void init();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生命的销毁
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
void destroy();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.connection;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api.IPooledDataSourceConfig;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 池化的连接池
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
public interface IPooledConnection extends Connection {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否繁忙
|
||||||
|
* @since 1.1.0
|
||||||
|
* @return 状态
|
||||||
|
*/
|
||||||
|
boolean isBusy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置状态
|
||||||
|
* @param busy 状态
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
void setBusy(boolean busy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取真正的连接
|
||||||
|
* @return 连接
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
Connection getConnection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置连接信息
|
||||||
|
* @param connection 连接信息
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
void setConnection(Connection connection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置对应的数据源
|
||||||
|
* @param dataSource 数据源
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
void setDataSource(final IPooledDataSourceConfig dataSource);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取对应的数据源信息
|
||||||
|
* @return 数据源
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
IPooledDataSourceConfig getDataSource();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/19.
|
||||||
|
*/
|
||||||
|
public class JdbcConstants {
|
||||||
|
public final static String JTDS = "jtds";
|
||||||
|
public final static String MOCK = "mock";
|
||||||
|
public final static String HSQL = "hsql";
|
||||||
|
public final static String DB2 = "db2";
|
||||||
|
public final static String DB2_DRIVER = "COM.ibm.db2.jdbc.app.DB2Driver";
|
||||||
|
public final static String POSTGRESQL = "postgresql";
|
||||||
|
public final static String POSTGRESQL_DRIVER = "org.postgresql.Driver";
|
||||||
|
public final static String SYBASE = "sybase";
|
||||||
|
public final static String SQL_SERVER = "sqlserver";
|
||||||
|
public final static String SQL_SERVER_DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
|
||||||
|
public final static String SQL_SERVER_DRIVER_SQLJDBC4 = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
||||||
|
public final static String SQL_SERVER_DRIVER_JTDS = "net.sourceforge.jtds.jdbc.Driver";
|
||||||
|
public final static String ORACLE = "oracle";
|
||||||
|
public final static String ORACLE_DRIVER = "oracle.jdbc.OracleDriver";
|
||||||
|
public final static String ORACLE_DRIVER2 = "oracle.jdbc.driver.OracleDriver";
|
||||||
|
public final static String ALI_ORACLE = "AliOracle";
|
||||||
|
public final static String ALI_ORACLE_DRIVER = "com.alibaba.jdbc.AlibabaDriver";
|
||||||
|
public final static String MYSQL = "mysql";
|
||||||
|
public final static String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
|
||||||
|
public final static String MYSQL_DRIVER_6 = "com.mysql.cj.jdbc.Driver";
|
||||||
|
public final static String MYSQL_DRIVER_REPLICATE = "com.mysql.jdbc.";
|
||||||
|
public final static String MARIADB = "mariadb";
|
||||||
|
public final static String MARIADB_DRIVER = "org.mariadb.jdbc.Driver";
|
||||||
|
public final static String DERBY = "derby";
|
||||||
|
public final static String HBASE = "hbase";
|
||||||
|
public final static String HIVE = "hive";
|
||||||
|
public final static String HIVE_DRIVER = "org.apache.hive.jdbc.HiveDriver";
|
||||||
|
public final static String H2 = "h2";
|
||||||
|
public final static String H2_DRIVER = "org.h2.Driver";
|
||||||
|
public final static String DM = "dm";
|
||||||
|
public final static String DM_DRIVER = "dm.jdbc.driver.DmDriver";
|
||||||
|
public final static String KINGBASE = "kingbase";
|
||||||
|
public final static String KINGBASE_DRIVER = "com.kingbase.Driver";
|
||||||
|
public final static String GBASE = "gbase";
|
||||||
|
public final static String GBASE_DRIVER = "com.gbase.jdbc.Driver";
|
||||||
|
public final static String XUGU = "xugu";
|
||||||
|
public final static String XUGU_DRIVER = "com.xugu.cloudjdbc.Driver";
|
||||||
|
public final static String OCEANBASE = "oceanbase";
|
||||||
|
public final static String OCEANBASE_DRIVER = "com.mysql.jdbc.Driver";
|
||||||
|
public final static String INFORMIX = "informix";
|
||||||
|
public final static String ODPS = "odps";
|
||||||
|
public final static String ODPS_DRIVER = "com.aliyun.odps.jdbc.OdpsDriver";
|
||||||
|
public final static String TERADATA = "teradata";
|
||||||
|
public final static String TERADATA_DRIVER = "com.teradata.jdbc.TeraDriver";
|
||||||
|
public final static String LOG4JDBC = "log4jdbc";
|
||||||
|
public final static String LOG4JDBC_DRIVER = "net.sf.log4jdbc.DriverSpy";
|
||||||
|
public final static String PHOENIX = "phoenix";
|
||||||
|
public final static String PHOENIX_DRIVER = "org.apache.phoenix.jdbc.PhoenixDriver";
|
||||||
|
public final static String ENTERPRISEDB = "edb";
|
||||||
|
public final static String ENTERPRISEDB_DRIVER = "com.edb.Driver";
|
||||||
|
public final static String KYLIN = "kylin";
|
||||||
|
public final static String KYLIN_DRIVER = "org.apache.kylin.jdbc.Driver";
|
||||||
|
public final static String SQLITE = "sqlite";
|
||||||
|
public final static String SQLITE_DRIVER = "org.sqlite.JDBC";
|
||||||
|
public final static String ALIYUN_ADS = "aliyun_ads";
|
||||||
|
public final static String ALIYUN_DRDS = "aliyun_drds";
|
||||||
|
public final static String PRESTO = "presto";
|
||||||
|
public final static String ELASTIC_SEARCH = "elasticsearch";
|
||||||
|
public final static String ELASTIC_SEARCH_SQL = "elasticsearch_sql";
|
||||||
|
public final static String ELASTIC_SEARCH_DRIVER = "com.alibaba.xdriver.elastic.jdbc.ElasticDriver";
|
||||||
|
public final static String CLICKHOUSE = "clickhouse";
|
||||||
|
public final static String CLICKHOUSE_DRIVER = "ru.yandex.clickhouse.ClickHouseDriver";
|
||||||
|
public final static String KUDU_IMAPLA = "kudu_impala";
|
||||||
|
public final static String HTTP = "http";
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public class AbstractDataSourceConfig extends DataSourceConfigAdaptor {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 驱动类
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected String driverClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jdbc url
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected String jdbcUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected String user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
protected String password;
|
||||||
|
|
||||||
|
public String getDriverClass() {
|
||||||
|
return driverClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDriverClass(String driverClass) {
|
||||||
|
this.driverClass = driverClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJdbcUrl() {
|
||||||
|
return jdbcUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setJdbcUrl(String jdbcUrl) {
|
||||||
|
this.jdbcUrl = jdbcUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUser(String user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,159 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api.ILifeCycle;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api.IPooledDataSourceConfig;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.constant.PooledConst;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
public abstract class AbstractPooledDataSourceConfig extends AbstractDataSourceConfig
|
||||||
|
implements IPooledDataSourceConfig, ILifeCycle {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最小尺寸
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
protected int minSize = PooledConst.DEFAULT_MIN_SIZE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大尺寸
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
protected int maxSize = PooledConst.DEFAULT_MAX_SIZE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大的等待时间
|
||||||
|
* @since 1.3.0
|
||||||
|
*/
|
||||||
|
protected long maxWaitMills = PooledConst.DEFAULT_MAX_WAIT_MILLS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证查询
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected String validQuery = PooledConst.DEFAULT_VALID_QUERY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证的超时时间
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected int validTimeOutSeconds = PooledConst.DEFAULT_VALID_TIME_OUT_SECONDS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取时验证
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected boolean testOnBorrow = PooledConst.DEFAULT_TEST_ON_BORROW;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归还时验证
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected boolean testOnReturn = PooledConst.DEFAULT_TEST_ON_RETURN;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闲暇时验证
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected boolean testOnIdle = PooledConst.DEFAULT_TEST_ON_IDLE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闲暇时验证的时间间隔
|
||||||
|
* @since 1.5.0
|
||||||
|
*/
|
||||||
|
protected long testOnIdleIntervalSeconds = PooledConst.DEFAULT_TEST_ON_IDLE_INTERVAL_SECONDS;
|
||||||
|
|
||||||
|
public int getMinSize() {
|
||||||
|
return minSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMinSize(int minSize) {
|
||||||
|
this.minSize = minSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxSize() {
|
||||||
|
return maxSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxSize(int maxSize) {
|
||||||
|
this.maxSize = maxSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMaxWaitMills() {
|
||||||
|
return maxWaitMills;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxWaitMills(long maxWaitMills) {
|
||||||
|
this.maxWaitMills = maxWaitMills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValidQuery() {
|
||||||
|
return validQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValidQuery(String validQuery) {
|
||||||
|
this.validQuery = validQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValidTimeOutSeconds() {
|
||||||
|
return validTimeOutSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValidTimeOutSeconds(int validTimeOutSeconds) {
|
||||||
|
this.validTimeOutSeconds = validTimeOutSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isTestOnBorrow() {
|
||||||
|
return testOnBorrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTestOnBorrow(boolean testOnBorrow) {
|
||||||
|
this.testOnBorrow = testOnBorrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isTestOnReturn() {
|
||||||
|
return testOnReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTestOnReturn(boolean testOnReturn) {
|
||||||
|
this.testOnReturn = testOnReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isTestOnIdle() {
|
||||||
|
return testOnIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTestOnIdle(boolean testOnIdle) {
|
||||||
|
this.testOnIdle = testOnIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTestOnIdleIntervalSeconds() {
|
||||||
|
return testOnIdleIntervalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTestOnIdleIntervalSeconds(long testOnIdleIntervalSeconds) {
|
||||||
|
this.testOnIdleIntervalSeconds = testOnIdleIntervalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.api.IDataSourceConfig;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.SQLFeatureNotSupportedException;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public class DataSourceConfigAdaptor implements IDataSourceConfig {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getConnection() throws SQLException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getConnection(String username, String password) throws SQLException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T unwrap(Class<T> iface) throws SQLException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isWrapperFor(Class<?> iface) throws SQLException {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PrintWriter getLogWriter() throws SQLException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLogWriter(PrintWriter out) throws SQLException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLoginTimeout(int seconds) throws SQLException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLoginTimeout() throws SQLException {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDriverClass(String driverClass) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setJdbcUrl(String jdbcUrl) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUser(String user) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPassword(String password) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.util.DriverClassUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public class UnPooledDataSource extends AbstractDataSourceConfig {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getConnection() throws SQLException {
|
||||||
|
DriverClassUtil.loadDriverClass(super.driverClass, super.jdbcUrl);
|
||||||
|
if (StringUtils.isBlank(super.getUser()) && StringUtils.isBlank(super.getPassword())) {
|
||||||
|
return DriverManager.getConnection(super.jdbcUrl);
|
||||||
|
}
|
||||||
|
return DriverManager.getConnection(super.getJdbcUrl(),
|
||||||
|
super.getUser(), super.getPassword());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author binbin.hou
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public class JdbcPoolException extends RuntimeException {
|
||||||
|
|
||||||
|
public JdbcPoolException() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcPoolException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcPoolException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcPoolException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcPoolException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
||||||
|
super(message, cause, enableSuppression, writableStackTrace);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/19.
|
||||||
|
*/
|
||||||
|
public class DataSourceHandleUtil {
|
||||||
|
|
||||||
|
|
||||||
|
public static void mysqlConnection() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,100 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.pool.util;
|
||||||
|
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.dto.DataSourceDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource.PooledDataSource;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.pool.datasource.UnPooledDataSource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by raodeming on 2021/3/18.
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class JdbcUtil {
|
||||||
|
|
||||||
|
private static Lock lock = new ReentrantLock();
|
||||||
|
|
||||||
|
private static Lock deleteLock = new ReentrantLock();
|
||||||
|
|
||||||
|
//所有数据源的连接池存在map里
|
||||||
|
static Map<Long, PooledDataSource> map = new HashMap<>();
|
||||||
|
|
||||||
|
public static PooledDataSource getJdbcConnectionPool(DataSourceDto dataSource) {
|
||||||
|
if (map.containsKey(dataSource.getId())) {
|
||||||
|
return map.get(dataSource.getId());
|
||||||
|
} else {
|
||||||
|
lock.lock();
|
||||||
|
try {
|
||||||
|
log.debug(Thread.currentThread().getName() + "获取锁");
|
||||||
|
if (!map.containsKey(dataSource.getId())) {
|
||||||
|
PooledDataSource pool = new PooledDataSource();
|
||||||
|
pool.setJdbcUrl(dataSource.getJdbcUrl());
|
||||||
|
pool.setUser(dataSource.getUsername());
|
||||||
|
pool.setPassword(dataSource.getPassword());
|
||||||
|
pool.setDriverClass(dataSource.getDriverName());
|
||||||
|
pool.init();
|
||||||
|
map.put(dataSource.getId(), pool);
|
||||||
|
log.info("创建连接池成功:{}", dataSource.getJdbcUrl());
|
||||||
|
}
|
||||||
|
return map.get(dataSource.getId());
|
||||||
|
} finally {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据库连接池
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
public static void removeJdbcConnectionPool(Long id) {
|
||||||
|
deleteLock.lock();
|
||||||
|
try {
|
||||||
|
PooledDataSource pool = map.get(id);
|
||||||
|
if (pool != null) {
|
||||||
|
map.remove(id);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.toString());
|
||||||
|
} finally {
|
||||||
|
deleteLock.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取连接
|
||||||
|
* @param dataSource
|
||||||
|
* @return
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public static Connection getPooledConnection(DataSourceDto dataSource) throws SQLException {
|
||||||
|
PooledDataSource pool = getJdbcConnectionPool(dataSource);
|
||||||
|
return pool.getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试数据库连接 获取一个连接
|
||||||
|
* @param dataSource
|
||||||
|
* @return
|
||||||
|
* @throws ClassNotFoundException driverName不正确
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public static Connection getUnPooledConnection(DataSourceDto dataSource) throws SQLException {
|
||||||
|
UnPooledDataSource source = new UnPooledDataSource();
|
||||||
|
source.setJdbcUrl(dataSource.getJdbcUrl());
|
||||||
|
source.setDriverClass(dataSource.getDriverName());
|
||||||
|
source.setUser(dataSource.getUsername());
|
||||||
|
source.setPassword(dataSource.getPassword());
|
||||||
|
return source.getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.dataSource.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.DataSetDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.dto.DataSourceDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.ConnectionParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.DataSourceParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.dataSource.dao.entity.DataSource;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc DataSource 数据集服务接口
|
||||||
|
* @author Raod
|
||||||
|
* @date 2021-03-18 12:09:57.728203200
|
||||||
|
**/
|
||||||
|
public interface DataSourceService extends GaeaBaseService<DataSourceParam, DataSource> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有数据源
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DataSource> queryAllDataSource();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 连接
|
||||||
|
* @param connectionParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean testConnection(ConnectionParam connectionParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行sql
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<JSONObject> execute(DataSourceDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行sql,统计数据total
|
||||||
|
* @param dataSourceDto
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
long total(DataSourceDto dataSourceDto, DataSetDto dto);
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.constant;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExpConstant {
|
||||||
|
|
||||||
|
public static final String[] FUNCTION = new String[]{"=SUM(", "=AVERAGE(", "=MAX(", "=MIN(", "=IF(", "=AND(", "=OR(", "=CONCAT("};
|
||||||
|
|
||||||
|
public static List<Integer> getExpFunction(String e) {
|
||||||
|
List<Integer> counts = new ArrayList<>();
|
||||||
|
for (int i = 0; i < FUNCTION.length; i++) {
|
||||||
|
if(e.contains(FUNCTION[i])){
|
||||||
|
counts.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return counts;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Permission;
|
||||||
|
import com.anji.plus.gaea.annotation.log.GaeaAuditLog;
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.controller.dto.ReportDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.controller.param.ReportParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.dao.entity.Report;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.service.ReportService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:19
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "报表数据管理")
|
||||||
|
@RequestMapping("/report")
|
||||||
|
public class ReportController extends GaeaBaseController<ReportParam, Report, ReportDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportService reportService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<ReportParam, Report> getService() {
|
||||||
|
return reportService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Report getEntity() {
|
||||||
|
return new Report();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportDto getDTO() {
|
||||||
|
return new ReportDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delReport")
|
||||||
|
@Permission(
|
||||||
|
code = "DELETE",
|
||||||
|
name = "删除"
|
||||||
|
)
|
||||||
|
@GaeaAuditLog(
|
||||||
|
pageTitle = "删除"
|
||||||
|
)
|
||||||
|
public ResponseBean delReport(@RequestBody ReportDto reportDto) {
|
||||||
|
reportService.delReport(reportDto);
|
||||||
|
return ResponseBean.builder().build();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.controller.dto;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.dto.GaeaBaseDTO;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:34
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ReportDto extends GaeaBaseDTO implements Serializable {
|
||||||
|
|
||||||
|
/** 报表名称 */
|
||||||
|
private String reportName;
|
||||||
|
|
||||||
|
/** 报表编码 */
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
/**数据集编码,以|分割*/
|
||||||
|
private String setCodes;
|
||||||
|
|
||||||
|
/** 分组 */
|
||||||
|
private String reportGroup;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private String reportDesc;
|
||||||
|
|
||||||
|
/** 数据集查询参数 */
|
||||||
|
private String setParam;
|
||||||
|
|
||||||
|
/** 报表json字符串 */
|
||||||
|
private String jsonStr;
|
||||||
|
|
||||||
|
/** 报表类型 */
|
||||||
|
private String reportType;
|
||||||
|
|
||||||
|
/** 数据总计 */
|
||||||
|
private long total;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.controller.param;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Query;
|
||||||
|
import com.anji.plus.gaea.constant.QueryEnum;
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:40
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ReportParam extends PageParam implements Serializable{
|
||||||
|
|
||||||
|
/** 报表名称 */
|
||||||
|
@Query(QueryEnum.LIKE)
|
||||||
|
private String reportName;
|
||||||
|
|
||||||
|
/** 报表编码 */
|
||||||
|
@Query(QueryEnum.LIKE)
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
/** 报表类型 */
|
||||||
|
@Query(QueryEnum.EQ)
|
||||||
|
private String reportType;
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.dao;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.dao.entity.Report;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:19
|
||||||
|
*/
|
||||||
|
public interface ReportMapper extends GaeaBaseMapper<Report> {
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.dao.entity;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Unique;
|
||||||
|
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
|
||||||
|
import com.anjiplus.template.gaea.common.RespCommonCode;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:20
|
||||||
|
*/
|
||||||
|
@TableName(value="gaea_report")
|
||||||
|
@Data
|
||||||
|
public class Report extends GaeaBaseEntity {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "名称")
|
||||||
|
private String reportName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "报表编码")
|
||||||
|
@Unique(code = RespCommonCode.REPORT_CODE_ISEXIST)
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "分组")
|
||||||
|
private String reportGroup;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "报表描述")
|
||||||
|
private String reportDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "报表类型")
|
||||||
|
private String reportType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG")
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG")
|
||||||
|
private Integer deleteFlag;
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.service;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.controller.dto.ReportDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.controller.param.ReportParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.dao.entity.Report;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:35
|
||||||
|
*/
|
||||||
|
public interface ReportService extends GaeaBaseService<ReportParam, Report> {
|
||||||
|
|
||||||
|
void delReport(ReportDto reportDto);
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.report.service.impl;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.controller.dto.ReportDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.dao.ReportMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.dao.entity.Report;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.report.service.ReportService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.ReportExcelMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.entity.ReportExcel;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/3/26 10:35
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ReportServiceImpl implements ReportService {
|
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
@Autowired
|
||||||
|
private ReportMapper reportMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportExcelMapper reportExcelMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseMapper<Report> getMapper() {
|
||||||
|
return reportMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delReport(ReportDto reportDto) {
|
||||||
|
deleteById(reportDto.getId());
|
||||||
|
QueryWrapper<ReportExcel> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("report_code" , reportDto.getReportCode());
|
||||||
|
reportExcelMapper.delete(queryWrapper);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.reportexcel.controller;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.annotation.Permission;
|
||||||
|
import com.anji.plus.gaea.annotation.log.GaeaAuditLog;
|
||||||
|
import com.anji.plus.gaea.bean.ResponseBean;
|
||||||
|
import com.anji.plus.gaea.code.ResponseCode;
|
||||||
|
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
|
||||||
|
import com.anji.plus.gaea.curd.service.GaeaBaseService;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.controller.dto.ReportExcelDto;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.controller.param.ReportExcelParam;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.entity.ReportExcel;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.service.ReportExcelService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/4/13 15:12
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "报表表格管理")
|
||||||
|
@RequestMapping("/reportExcel")
|
||||||
|
public class ReportExcelController extends GaeaBaseController<ReportExcelParam, ReportExcel, ReportExcelDto> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportExcelService reportExcelService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GaeaBaseService<ReportExcelParam, ReportExcel> getService() {
|
||||||
|
return reportExcelService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportExcel getEntity() {
|
||||||
|
return new ReportExcel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportExcelDto getDTO() {
|
||||||
|
return new ReportExcelDto();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/detailByReportCode/{reportCode}")
|
||||||
|
@Permission(
|
||||||
|
code = "DETAIL",
|
||||||
|
name = "详情"
|
||||||
|
)
|
||||||
|
@GaeaAuditLog(
|
||||||
|
pageTitle = "详情"
|
||||||
|
)
|
||||||
|
public ResponseBean detailByReportCode(@PathVariable String reportCode) {
|
||||||
|
ReportExcelDto reportExcelDto = reportExcelService.detailByReportCode(reportCode);
|
||||||
|
return ResponseBean.builder().data(reportExcelDto).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/preview")
|
||||||
|
@Permission(
|
||||||
|
code = "DETAIL",
|
||||||
|
name = "预览"
|
||||||
|
)
|
||||||
|
@GaeaAuditLog(
|
||||||
|
pageTitle = "预览"
|
||||||
|
)
|
||||||
|
public ResponseBean preview(@RequestBody ReportExcelDto reportExcelDto) {
|
||||||
|
ReportExcelDto result = reportExcelService.preview(reportExcelDto);
|
||||||
|
return ResponseBean.builder().data(result).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/exportExcel")
|
||||||
|
@Permission(
|
||||||
|
code = "IMPORT",
|
||||||
|
name = "导出"
|
||||||
|
)
|
||||||
|
@GaeaAuditLog(
|
||||||
|
pageTitle = "报表导出"
|
||||||
|
)
|
||||||
|
public ResponseBean exportExcel(@RequestBody ReportExcelDto reportExcelDto) {
|
||||||
|
|
||||||
|
return ResponseBean.builder().code(ResponseCode.SUCCESS_CODE)
|
||||||
|
.data(reportExcelService.exportExcel(reportExcelDto))
|
||||||
|
.message("导出成功,请稍后在下载中心查看").build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// @PostMapping("/exportPdf")
|
||||||
|
// public ResponseBean exportPdf(@RequestBody ReportExcelDto reportExcelDto) {
|
||||||
|
// reportExcelService.exportPdf(reportExcelDto);
|
||||||
|
// return ResponseBean.builder().code(ResponseCode.SUCCESS_CODE)
|
||||||
|
// .build();
|
||||||
|
// }
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.reportexcel.controller.dto;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.dto.GaeaBaseDTO;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/4/13 15:12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ReportExcelDto extends GaeaBaseDTO implements Serializable {
|
||||||
|
/** 报表名称 */
|
||||||
|
private String reportName;
|
||||||
|
|
||||||
|
/** 报表编码 */
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
/**数据集编码,以|分割*/
|
||||||
|
private String setCodes;
|
||||||
|
|
||||||
|
/** 分组 */
|
||||||
|
private String reportGroup;
|
||||||
|
|
||||||
|
/** 数据集查询参数 */
|
||||||
|
private String setParam;
|
||||||
|
|
||||||
|
/** 报表json字符串 */
|
||||||
|
private String jsonStr;
|
||||||
|
|
||||||
|
/** 报表类型 */
|
||||||
|
private String reportType;
|
||||||
|
|
||||||
|
/** 数据总计 */
|
||||||
|
private long total;
|
||||||
|
|
||||||
|
/**导出类型*/
|
||||||
|
private String exportType;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
package com.anjiplus.template.gaea.business.modules.data.reportexcel.controller.param;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.params.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/4/13 15:12
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ReportExcelParam extends PageParam implements Serializable{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.reportexcel.dao;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
|
||||||
|
import com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.entity.ReportExcel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/4/13 15:11
|
||||||
|
*/
|
||||||
|
public interface ReportExcelMapper extends GaeaBaseMapper<ReportExcel> {
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.entity;
|
||||||
|
|
||||||
|
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenkening
|
||||||
|
* @date 2021/4/13 15:11
|
||||||
|
*/
|
||||||
|
@TableName(value="gaea_report_excel")
|
||||||
|
@Data
|
||||||
|
public class ReportExcel extends GaeaBaseEntity {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "报表编码")
|
||||||
|
private String reportCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据集编码,以|分割")
|
||||||
|
private String setCodes;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据集查询参数")
|
||||||
|
private String setParam;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "报表json字符串")
|
||||||
|
private String jsonStr;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG")
|
||||||
|
private Integer enableFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG")
|
||||||
|
private Integer deleteFlag;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue