Compare commits

...

No commits in common. "main" and "master" have entirely different histories.
main ... master

3908 changed files with 435520 additions and 28 deletions

26
.gitignore vendored
View File

@ -1,26 +0,0 @@
# ---> Java
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

4
.idea/misc.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

1
.version Normal file
View File

@ -0,0 +1 @@
V2.6.0

View File

@ -1,2 +1 @@
# hz
统一自动化平台后端

38
cctp-atu/.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
# Compiled class file
*.class
# Log file
*.log
*.log.gz
logs/
*/logs/
*/*/logs/
# Temp file
*.temp
temp
*/temp
# IDEA profile dir
.idea/
*/.idea/
*/*/.idea/
# IDEA project file
*.iml
*/*.iml
*/*/*.iml
*/*/*/*.iml
target/
*/target/
*/*/target/
*.zip
Junit test
*/src/test/java/
*/src/test/resources/
dist/
*.jar

0
cctp-atu/README.md Normal file
View File

View File

@ -0,0 +1,40 @@
# This is spring boot config server
# Version 2.1
FROM openjdk:8u212-jdk-alpine
MAINTAINER xiusong.xie@northking.net
EXPOSE 8250
ENV APP_NAME=atu-data-mgr
ENV APP_VERSION=1.0.1-RELEASE
ENV CCTP_HOME /home/cctp
ARG SPACE
ARG URL
ARG SIZE
ARG PROFILE
ENV NACOS_SPACE=$SPACE
ENV NACOS_URL=$URL
ENV XMX=$SIZE
ENV APP_PROFILE=$PROFILE
ENV JAR_FILE=${CCTP_HOME}/${APP_NAME}-${APP_VERSION}.ms.jar
#ENV TRACE_JAVAAGENT_OPTS='-javaagent:/home/cctp/trace-otel/hzb-otel-javaagent.jar -Dotel.javaagent.configuration-file=/home/cctp/trace-otel/trace-otel.properties'
#ENV JACOCO_AGENT_OPTS='-javaagent:/home/cctp/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8040,address=0.0.0.0,append=true'
VOLUME ${CCTP_HOME}
ADD dist ${CCTP_HOME}/
RUN chmod a+x ${CCTP_HOME}/nk-ms.sh
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
#CMD [""]

View File

@ -0,0 +1,40 @@
# This is spring boot config server
# Version 2.1
FROM openjdk:8u212-jdk-alpine
MAINTAINER xiusong.xie@northking.net
EXPOSE 8250
ENV APP_NAME=atu-data-mgr
ENV APP_VERSION=1.0.1-RELEASE
ENV CCTP_HOME /home/cctp
ARG SPACE
ARG URL
ARG SIZE
ARG PROFILE
ENV NACOS_SPACE=$SPACE
ENV NACOS_URL=$URL
ENV XMX=$SIZE
ENV APP_PROFILE=$PROFILE
ENV JAR_FILE=${CCTP_HOME}/${APP_NAME}-${APP_VERSION}.ms.jar
ENV TRACE_JAVAAGENT_OPTS='-javaagent:/home/cctp/trace-otel/hzb-otel-javaagent.jar -Dotel.javaagent.configuration-file=/home/cctp/trace-otel/trace-otel.properties'
#ENV JACOCO_AGENT_OPTS='-javaagent:/home/cctp/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8040,address=0.0.0.0,append=true'
VOLUME ${CCTP_HOME}
ADD dist ${CCTP_HOME}/
RUN chmod a+x ${CCTP_HOME}/nk-ms.sh
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
#CMD [""]

View File

@ -0,0 +1,40 @@
# This is spring boot config server
# Version 2.1
FROM openjdk:8u212-jdk-alpine
MAINTAINER xiusong.xie@northking.net
EXPOSE 8250
ENV APP_NAME=atu-data-mgr
ENV APP_VERSION=1.0.1-RELEASE
ENV CCTP_HOME /home/cctp
ARG SPACE
ARG URL
ARG SIZE
ARG PROFILE
ENV NACOS_SPACE=$SPACE
ENV NACOS_URL=$URL
ENV XMX=$SIZE
ENV APP_PROFILE=$PROFILE
ENV JAR_FILE=${CCTP_HOME}/${APP_NAME}-${APP_VERSION}.ms.jar
#ENV TRACE_JAVAAGENT_OPTS='-javaagent:/home/cctp/trace-otel/hzb-otel-javaagent.jar -Dotel.javaagent.configuration-file=/home/cctp/trace-otel/trace-otel.properties'
#ENV JACOCO_AGENT_OPTS='-javaagent:/home/cctp/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8040,address=0.0.0.0,append=true'
VOLUME ${CCTP_HOME}
ADD dist ${CCTP_HOME}/
RUN chmod a+x ${CCTP_HOME}/nk-ms.sh
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
#CMD [""]

View File

@ -0,0 +1,40 @@
# This is spring boot config server
# Version 2.1
FROM openjdk:8u212-jdk-alpine
MAINTAINER xiusong.xie@northking.net
EXPOSE 8250
ENV APP_NAME=atu-data-mgr
ENV APP_VERSION=1.0.1-RELEASE
ENV CCTP_HOME /home/cctp
ARG SPACE
ARG URL
ARG SIZE
ARG PROFILE
ENV NACOS_SPACE=$SPACE
ENV NACOS_URL=$URL
ENV XMX=$SIZE
ENV APP_PROFILE=$PROFILE
ENV JAR_FILE=${CCTP_HOME}/${APP_NAME}-${APP_VERSION}.ms.jar
#ENV TRACE_JAVAAGENT_OPTS='-javaagent:/home/cctp/trace-otel/hzb-otel-javaagent.jar -Dotel.javaagent.configuration-file=/home/cctp/trace-otel/trace-otel.properties'
ENV JACOCO_AGENT_OPTS='-javaagent:/home/cctp/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8040,address=0.0.0.0,append=true'
VOLUME ${CCTP_HOME}
ADD dist ${CCTP_HOME}/
RUN chmod a+x ${CCTP_HOME}/nk-ms.sh
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR ${CCTP_HOME}
ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${JACOCO_AGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"]
#CMD [""]

View File

@ -0,0 +1,178 @@
#!/bin/sh
source /etc/profile
## 应用名称
APP_NAME=atu-data-mgr
## 镜像版本
VERSION=3.0-SNAPSHOT
## 公司名称
corporation=gzrdc
NACOS_SPACE=UI-DEV
NACOS_URL=158.1.12.237:8848
JVM=256M
PROFILE=dev
## 镜像仓库配置
DOCKER_REGISTRY=harbor.hzbtest:8443
##dockerfile 文件名配置
FILE_NAME=Dockerfile
while getopts "a:v:d:f:n:u:s:p:" arg
do
case $arg in
a)
echo "set APP_NAME=$OPTARG"
APP_NAME=$OPTARG
;;
v)
echo "VERSION=$OPTARG"
VERSION=$OPTARG
;;
d)
echo "set DOCKER_REGISTRY=$OPTARG"
DOCKER_REGISTRY=$OPTARG
;;
f)
echo "set FILE_NAME=$OPTARG"
FILE_NAME=$OPTARG
;;
n)
echo "set NACOS_SPACE=$OPTARG"
NACOS_SPACE=$OPTARG
;;
u)
echo "set NACOS_URL=$OPTARG"
NACOS_URL=$OPTARG
;;
s)
echo "set JVM=$OPTARG"
JVM=$OPTARG
;;
p)
echo "set PROFILE=$OPTARG"
PROFILE=$OPTARG
;;
?)
echo "unkown argument: $? $OPTARG "
exit 1
;;
esac
done
TAG_NAME=${DOCKER_REGISTRY}/${corporation}/${APP_NAME}
## deployment yaml
DEPLOYMENT_YAML=${APP_NAME}.deployment.yaml
shift $((OPTIND-1))
clean_Container() {
## 获取运行 容器ID
RUN_ID=$(docker ps |grep ${APP_NAME}|awk '{print $1}')
## 先停止容器
if [ "${RUN_ID}" = "" ]; then
echo "Container ${APP_NAME} is not starting "
else
## 停止 docker容器
docker stop ${RUN_ID}
echo "Container ${APP_NAME} , ID: ${RUN_ID} is stopped "
fi
## 获取已停止 容器ID
STOP_ID=$(docker ps -a |grep ${APP_NAME}|awk '{print $1}')
## 删除容器
if [ "${STOP_ID}" = "" ]; then
echo "Container ${APP_NAME} is not exist"
else
## 移除 docker容器
docker rm -v ${STOP_ID}
echo "Remove container ${APP_NAME} , ID: ${STOP_ID} "
fi
}
clean_Image() {
## 获取 镜像ID
IMG_ID=$(docker images |grep ${APP_NAME}|awk '{print $3}')
if [ "${IMG_ID}" = "" ]; then
echo "Image ${TAG_NAME} is not exist "
else
## 移除 docker镜像
docker rmi ${TAG_NAME}
echo "Remove image ${TAG_NAME} , ID: ${IMG_ID} "
fi
}
get_agent(){
## 获取agent 文件
mkdir -p target/dist/trace-otel/
wget -P target/dist/trace-otel/ http://devops.hzbtest:38081/repository/raw-distribution/rdc/uts/core/hzb-otel-javaagent.jar
wget -P target/dist/trace-otel/ http://158.1.0.78:8081/repository/raw-distribution/rdc/uts/core/trace-otel.properties
sed -i "s?SUBSYS_ZZZ?SUBSYS_ATU_DATAM?g" target/dist/trace-otel/trace-otel.properties
## 添加jacoco的agent
cp -r /home/northking/agent/jacoco-0.8.7 target/dist/
}
for command in $*
do
echo "execute : ${command}"
case "${command}" in
clean)
clean_Container
clean_Image
;;
build)
$0 clean
mvn --update-snapshots clean package
get_agent
## 创建镜像
docker build --build-arg SIZE=${JVM} --build-arg PROFILE=${PROFILE} --build-arg SPACE=${NACOS_SPACE} --build-arg URL=${NACOS_URL} -f ${FILE_NAME} -t ${TAG_NAME} target/
;;
debug)
clean_Container
docker run -itd --net=host --privileged=true --name ${APP_NAME} ${TAG_NAME}
sleep 2
## 输出容器日志
RUN_ID=$(docker ps -a |grep ${APP_NAME}|awk '{print $1}')
docker logs -f -t ${RUN_ID}
;;
push)
docker push ${TAG_NAME}
docker tag ${TAG_NAME} ${TAG_NAME}:${VERSION}
docker push ${TAG_NAME}:${VERSION}
docker rmi -f ${TAG_NAME}
docker rmi -f ${TAG_NAME}:${VERSION}
;;
pull)
$0 clean
docker pull ${TAG_NAME}
;;
deploy)
kubectl delete -f ${DEPLOYMENT_YAML}
sleep 2
kubectl apply -f ${DEPLOYMENT_YAML}
sleep 2
;;
logs)
for pod in $(kubectl -n cctp get pod |grep ${APP_NAME}|awk '{print $1}')
do
echo "get logs by pod=${pod}"
kubectl -n cctp logs -f --tail=200 --follow=false ${pod}
done
;;
*)
echo "Usage: $0 {clean|build|debug|push|deploy|logs}"
exit 1
esac
done
exit 0

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log_path" value="logs"/>
<!-- 参数 -->
<springProperty name="app_name" source="spring.application.name"/>
<springProperty name="app_instance_id" source="eureka.instance.instance-id"/>
<springProperty name="rabbitmq_host" source="spring.rabbitmq.host"/>
<springProperty name="rabbitmq_vhost" source="spring.rabbitmq.virtual-host"/>
<springProperty name="rabbitmq_username" source="spring.rabbitmq.username"/>
<springProperty name="rabbitmq_password" source="spring.rabbitmq.password"/>
<!-- 控制台日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level | %X{trace_id} | %X{span_id} | [%thread] %-5level %logger{36} : %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 本地日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_path}/${app_name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log_path}/${app_name}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>10</maxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level | %X{trace_id} | %X{span_id} | [%thread] %-5level %logger{36} : %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志发送到消息队列RabbitMQ 接入ELK-->
<appender name="RabbitMQ" class="org.springframework.amqp.rabbit.logback.AmqpAppender">
<!--Layout纯文本而不是格式化的JSON -->
<layout>
<pattern>
{
"appName":"${app_name}",
"appInstance":"${app_instance_id}",
"date":"%d{yyyy-MM-dd HH:mm:ss.SSS}",
"thread":"[%thread]",
"level":"%-5level",
"logger":"%logger{36}",
"msg":"%msg"
}
</pattern>
</layout>
<host>${rabbitmq_host}</host>
<port>5672</port>
<username>${rabbitmq_username}</username>
<password>${rabbitmq_password}</password>
<virtualHost>${rabbitmq_vhost}</virtualHost>
<!-- 消息队列配置 -->
<declareExchange>false</declareExchange>
<exchangeType>direct</exchangeType>
<exchangeName>logs.direct</exchangeName>
<routingKeyPattern>logback</routingKeyPattern>
<generateId>true</generateId>
<durable>false</durable>
<charset>UTF-8</charset>
<deliveryMode>NON_PERSISTENT</deliveryMode>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="org.hibernate.engine.spi.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.spi.HQLQueryPlan" level="DEBUG"/>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<!-- <logger name="com.zaxxer.hikari.pool.HikariPool" level="DEBUG"/>-->
<logger name="net.northking" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<!-- <appender-ref ref="RabbitMQ"/>-->
</root>
</configuration>

View File

@ -0,0 +1,171 @@
<?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>net.northking.cctp</groupId>
<artifactId>cctp-parent</artifactId>
<version>1.0.1-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>atu-data-mgr</artifactId>
<packaging>jar</packaging>
<properties>
<!-- The main class to start by executing java -jar -->
<start-class>net.northking.cctp.dataPool.DataPoolApplication</start-class>
<quartz.version>2.3.2</quartz.version>
<json.version>1.2.62</json.version>
<es.version>7.4.0</es.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
<!-- maven plugin: code generator -->
<plugin>
<groupId>net.northking.cctp</groupId>
<artifactId>cctp-maven-plugin</artifactId>
<version>0.0.141-RELEASE</version>
<configuration>
<jdbcDriver>com.mysql.cj.jdbc.Driver</jdbcDriver>
<jdbcUrl>jdbc:mysql://192.168.77.26:3306/atu_data_mgr?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false</jdbcUrl>
<jdbcUsername>northking</jdbcUsername>
<jdbcPassword>northking@002987</jdbcPassword>
<database>atu_data_mgr</database>
<schema>atu_data_mgr</schema>
<tableNames>data_sets,data_set_tree,data_rule,data_resource_package</tableNames>
<basePackage>net.northking.cctp.dataPool</basePackage>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.github.mifmif</groupId>
<artifactId>generex</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>net.northking.cctp</groupId>
<artifactId>cctp-commons</artifactId>
<version>${cctp-commons.version}</version>
</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>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.5</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.minio</groupId>-->
<!-- <artifactId>minio</artifactId>-->
<!-- <version>8.1.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.plist</groupId>
<artifactId>dd-plist</artifactId>
<version>1.23</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache-extras.beanshell</groupId>
<artifactId>bsh</artifactId>
<version>2.0b6</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,116 @@
#!/bin/sh
SERVER_IP=192.168.77.22
SERVER_PORT=9090
NK_HOME_DEFAULT=/home/northking
PRODUCTION_NAME=cctp
APP_NAME=atu-data-mgr
APP_VERSION=3.0-SNAPSHOT
JAR_FILE=${APP_NAME}-${APP_VERSION}.ms.jar
APP_PORT=8911
JAVA_OPTIONS="-Xmx256M -Dfile.encoding=UTF-8 -Dloader.path=.,lib"
PORT_OPTIONS="--server.port=${APP_PORT}"
if [ 0"$NK_HOME" = "0" ]; then
echo "NK_HOME unset, use default value : $NK_HOME_DEFAULT"
NK_HOME=${NK_HOME_DEFAULT}
fi
PID=$(ps aux | grep ${JAR_FILE} | grep -v grep | awk '{print $2}' )
check_if_process_is_running() {
if [ "$PID" = "" ]; then
return 1
fi
ps -p $PID | grep "java"
return $?
}
install_upgrade() {
upgrade_url="http://${SERVER_IP}:${SERVER_PORT}/${PRODUCTION_NAME}/${APP_VERSION}/${APP_NAME}"
rm -rf ${JAR_FILE}
wget ${upgrade_url}/${JAR_FILE}
rm -rf install.list
wget ${upgrade_url}/install.list
mkdir -p config
mkdir -p lib
cd config
rm -rf application.yml
wget ${upgrade_url}/config/application.yml
cd ../lib
rm -rf *
for filename in `cat ../install.list`
do
echo ${filename}
wget http://${SERVER_IP}:${SERVER_PORT}/lib/${filename}
done
cd ..
}
case "$1" in
upgrade)
$0 stop
install_upgrade
;;
status)
if check_if_process_is_running
then
echo -e "\033[32m $APP_NAME is running \033[0m"
else
echo -e "\033[32m $APP_NAME not running \033[0m"
fi
;;
stop)
if ! check_if_process_is_running
then
echo -e "\033[32m $APP_NAME already stopped \033[0m"
exit 0
fi
kill -9 $PID
echo -e "\033[32m $APP_NAME already stopped \033[0m"
;;
start)
if [ "$PID" != "" ] && check_if_process_is_running
then
echo -e "\033[32m $APP_NAME already running \033[0m"
exit 1
fi
nohup java -jar ${JAVA_OPTIONS} ${JAR_FILE} ${PORT_OPTIONS} > /dev/null 2>&1 &
echo -ne "\033[32m Starting \033[0m"
if check_if_process_is_running
then
echo -e "\033[32m $APP_NAME fail \033[0m"
else
echo -e "\033[32m $APP_NAME started \033[0m"
fi
;;
debug)
java -jar ${JAVA_OPTIONS} ${JAR_FILE} ${PORT_OPTIONS}
;;
restart)
$0 stop
if [ $? = 1 ]
then
exit 1
fi
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status|upgrade|debug}"
exit 1
esac
exit 0

View File

@ -0,0 +1,36 @@
package net.northking.cctp.dataPool;
import cn.gjing.tools.auth.config.EnableAuthorization;
import net.northking.cctp.common.config.EnableNKCloud;
import net.northking.cctp.common.config.EnableNKWebMvc;
import net.northking.cctp.common.s3.EnableS3;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan({"net.northking.cctp.dataPool.db.mapper", "net.northking.cctp.dataPool.db.dao"})
@EnableNKCloud
@EnableNKWebMvc
@EnableS3
@EnableAuthorization
@EnableTransactionManagement // 开启事务
@EnableFeignClients(basePackages = {"net.northking.cctp.dataPool.feign", "net.northking.cctp.common.feign", "com.hzbank.testteam.autotest"})
@ComponentScan(basePackages = {"net.northking.cctp.dataPool","com.hzbank.testteam.autotest"})
public class DataPoolApplication {
private static final Logger logger = LoggerFactory.getLogger(DataPoolApplication.class);
public static void main(String[] args) {
logger.info("微服务启动----开始 .................");
SpringApplication.run(DataPoolApplication.class, args);
logger.info("微服务启动----完成 .................");
}
}

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.api.dataRule.service.DataResourcePackageApiService;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageUpdateDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* => Restful HTTP/HTTPS
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Api(tags = "资源包")
@RequestMapping("/v1")
@RestController
public class DataResourcePackageRestfulCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataResourcePackageRestfulCtrl.class);
@Autowired
private DataResourcePackageApiService apiService;
@ApiOperation("上传资源包")
@PostMapping("/dataResourcePackage/uploadResource")
public ResultWrapper<DataResourcePackage> uploadResource(@RequestParam("file") MultipartFile file,
@RequestParam("proId") String proId,@RequestParam(name = "memo",required = false) String memo) {
ResultWrapper<DataResourcePackage> wrapper = new ResultWrapper<>();
DataResourcePackage result = apiService.uploadResource(file,proId,memo);
return wrapper.success(result);
}
@ApiOperation(value = "分页查询列表:公共资源表")
@PostMapping(value = "/paging/query/dataResourcePackages",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Pagination<DataResourcePackageDetailDto>> pagingQuery(
@RequestBody @Validated QueryByPage<DataResourcePackageQueryDto> queryByPage)
{
ResultWrapper<Pagination<DataResourcePackageDetailDto>> wrapper = new ResultWrapper<>();
Pagination<DataResourcePackageDetailDto> page = apiService.pagingQuery(queryByPage);
return wrapper.success(page);
}
@ApiOperation("修改资源包说明")
@PostMapping("/dataResourcePackage/updateResource")
public ResultWrapper<Integer> updateResource(@RequestBody @Validated DataResourcePackageUpdateDto update) throws IllegalAccessException {
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer result = apiService.updateByPK(update);
return wrapper.success(result);
}
@ApiOperation("删除资源包")
@DeleteMapping("/dataResourcePackage/deleteResource")
public ResultWrapper<Integer> deleteResource(@RequestParam("resourceId") String resourceId){
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer result = apiService.deleteByPK(resourceId);
return wrapper.success(result);
}
}

View File

@ -0,0 +1,45 @@
package net.northking.cctp.dataPool.api.dataRule;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.api.dataRule.service.DataRuleApiService;
import net.northking.cctp.dataPool.enums.DataPoolError;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/pub")
@Api(tags = "数据集管理无token请求")
public class DataRulePubCtrl {
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataRulePubCtrl.class);
@Autowired
private DataRuleApiService apiService;
@ApiOperation(value = "执行计划根据规则名称取值")
@GetMapping(value = "/dataRule/getRuleDataByName")
public ResultWrapper<String> getRuleDataByName(@RequestParam String ruleName,@RequestParam String proId) throws Exception
{
if (StringUtils.isBlank(ruleName) || StringUtils.isBlank(proId)) {
throw new PlatformRuntimeException(DataPoolError.PARAM_IS_MISSING);
}
ResultWrapper<String> wrapper = new ResultWrapper<>();
String decodeRuleName = URLDecoder.decode(ruleName, StandardCharsets.UTF_8.name());
String result = apiService.getRuleDataByName(decodeRuleName,proId);
return wrapper.success(result);
}
}

View File

@ -0,0 +1,171 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule;
import com.alibaba.fastjson.JSON;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.dto.dataRule.*;
import net.northking.cctp.dataPool.api.dataRule.service.DataRuleApiService;
import net.northking.cctp.dataPool.dto.dataSets.AtuDataSetFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* => Restful HTTP/HTTPS
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Api(tags = "数据规则表")
@RequestMapping("/v1/DataRules")
@RestController
public class DataRuleRestfulCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataRuleRestfulCtrl.class);
@Autowired
private DataRuleApiService apiService;
/**
* Restful-post
*
* @param inputDto
* @return
*/
@ApiOperation(value = "新增:数据规则表")
@RequiredPermissions("ui-saveDataRules")
@PostMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<String> add(
@RequestBody @Validated DataRuleAddDto inputDto)
{
ResultWrapper<String> wrapper = new ResultWrapper<>();
String uuid = apiService.add(inputDto);
return wrapper.success(uuid);
}
/**
* Restful-put
*
* @param inputDto
* @return
*/
@ApiOperation(value = "更新:数据规则表")
@RequiredPermissions("ui-updateDataRules")
@PutMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> update(
@RequestBody @Validated DataRuleUpdateDto inputDto) throws IllegalAccessException
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.updateByPK(inputDto);
return wrapper.success(count);
}
/**
* Restful-get
*
* @param uuid
* @return
*/
@ApiOperation(value = "获取:数据规则表")
@GetMapping(
value = "/{uuid}",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<DataRuleDetailDto> findByPK(
@PathVariable("uuid") String uuid)
{
ResultWrapper<DataRuleDetailDto> wrapper = new ResultWrapper<>();
DataRuleDetailDto dto = apiService.findByPK(uuid);
return wrapper.success(dto);
}
/**
* Restful-delete
*
* @param uuid
* @return
*/
@ApiOperation(value = "删除:数据规则表")
@RequiredPermissions("ui-deleteDataRules")
@DeleteMapping(
value = "/{uuid}",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> deleteByPK(
@PathVariable("uuid") String uuid)
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.deleteByPK(uuid);
return wrapper.success(count);
}
/**
*
*
* @param queryByPage
* @return
*/
@ApiOperation(value = "分页查询列表:数据规则表")
@RequiredPermissions("testData")
@PostMapping(value = "/paging/query/DataRules",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Pagination<DataRuleDetailDto>> pagingQuery(
@RequestBody @Validated QueryByPage<DataRuleQueryDto> queryByPage)
{
ResultWrapper<Pagination<DataRuleDetailDto>> wrapper = new ResultWrapper<>();
Pagination<DataRuleDetailDto> page = apiService.pagingQuery(queryByPage);
return wrapper.success(page);
}
@ApiOperation("测试规则")
@PostMapping("/executeRule")
public ResultWrapper<List<String>> executeRule(@RequestBody DataRuleExecuteDto dto){
ResultWrapper<List<String>> wrapper = new ResultWrapper<>();
List<String> result = apiService.executeRule(dto);
return wrapper.success(result);
}
@ApiOperation(value = "查询模糊数据集名称集合")
@PostMapping(value = "/query/queryFuzzyDataNameMap",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Map<String, String> queryFuzzyDataNameMap(@RequestBody AtuDataSetFeignDto setFeignDto){
return apiService.queryFuzzyDataNameMap(setFeignDto);
}
@ApiOperation(value = "查询模糊数据引用信息")
@PostMapping(value = "/query/queryFuzzyDataQuoteInfo")
public ResultWrapper<AtuScriptInputSetQuoteFieldDto> queryFuzzyDataQuoteInfo(@RequestBody AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto){
logger.debug(" start queryFuzzyDataQuoteInfo parmas => {}", JSON.toJSONString(atuScriptInputSetQuoteFieldDto));
ResultWrapper<AtuScriptInputSetQuoteFieldDto> wrapper = new ResultWrapper<>();
AtuScriptInputSetQuoteFieldDto result = apiService.queryFuzzyDataQuoteInfo(atuScriptInputSetQuoteFieldDto);
logger.debug(" end queryFuzzyDataQuoteInfo result => {}", JSON.toJSONString(result));
return wrapper.success(result);
}
}

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule.service;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageUpdateDto;
import org.springframework.web.multipart.MultipartFile;
/**
* Restful
* @author maven-cctp-plugin
* @since 1.0
*/
public interface DataResourcePackageApiService extends ExcelService
{
/**
*
*
* @param queryByPage
* @return
*/
Pagination<DataResourcePackageDetailDto> pagingQuery(QueryByPage<DataResourcePackageQueryDto> queryByPage);
/**
*
*
* @param dto
* @return
*/
Integer updateByPK(DataResourcePackageUpdateDto dto) throws IllegalAccessException;
/**
*
* @param uuid
* @return
*/
Integer deleteByPK(String uuid);
/**
*
* @return
*/
DataResourcePackage uploadResource(MultipartFile file,String proId,String memo);
}

View File

@ -0,0 +1,283 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule.service;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import net.northking.cctp.common.cache.EntityNameCache;
import net.northking.cctp.common.cache.EntityNameCatalog;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.db.DefaultPagination;
import net.northking.cctp.common.db.OrderBy;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.annotation.DatabaseReadOnly;
import net.northking.cctp.common.db.excel.AbstractExcelService;
import net.northking.cctp.common.db.excel.ExcelHeader;
import net.northking.cctp.common.enums.FileBusinessTypeEnum;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.s3.NKFile;
import net.northking.cctp.common.s3.SimpleStorageService;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.util.UUIDUtil;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.db.service.DataResourcePackageService;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageUpdateDto;
import net.northking.cctp.dataPool.enums.DataPoolError;
import net.northking.cctp.dataPool.utils.MinioPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.List;
/**
*
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Service
@ConditionalOnMissingBean(name = "DataResourcePackageApiServiceImpl")
public class DataResourcePackageApiServiceImpl extends AbstractExcelService<DataResourcePackage> implements DataResourcePackageApiService
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataResourcePackageApiServiceImpl.class);
@Autowired
private DataResourcePackageService dataResourcePackageService;
@Autowired
private MinioPathUtils pathUtils;
@Autowired
private SimpleStorageService simpleStorageService;
@Autowired
private EntityNameCache entityNameCache;
@Override
public BasicService<DataResourcePackage> getService()
{
return this.dataResourcePackageService;
}
@Override
public ExcelHeader[] excelHeaders()
{
ExcelHeader id = new ExcelHeader("id", "id", String.class);
ExcelHeader name = new ExcelHeader("资源包名称", "name", String.class);
ExcelHeader memo = new ExcelHeader("资源包描述", "memo", String.class);
ExcelHeader packageAddr = new ExcelHeader("资源包存放地址", "packageAddr", String.class);
ExcelHeader proId = new ExcelHeader("系统id", "proId", String.class);
ExcelHeader tenantId = new ExcelHeader("租户id", "tenantId", String.class);
ExcelHeader createdBy = new ExcelHeader("创建人", "createdBy", String.class);
ExcelHeader updatedBy = new ExcelHeader("更新人", "updatedBy", String.class);
ExcelHeader createdTime = new ExcelHeader("创建时间", "createdTime", Date.class);
ExcelHeader updatedTime = new ExcelHeader("更新时间", "updatedTime", Date.class);
return new ExcelHeader[]{};
}
/**
* Excel
* @param records Excel
* @return
*/
@Override
protected List<DataResourcePackage> beforeInsertBatch(List<DataResourcePackage> records)
{
for (DataResourcePackage record : records)
{
record.setId(UUIDUtil.create32UUID());
}
return records;
}
/**
* Excel<br>
*
*
* @param record
* @return Excel
*/
@Override
protected DataResourcePackage beforeWriteExcel(DataResourcePackage record)
{
return record;
}
//= Excel 导入导出相关代码 end =======================//
//= 增删改查 相关代码 start ==================//
@Override
@DatabaseReadOnly
public Pagination<DataResourcePackageDetailDto> pagingQuery(QueryByPage<DataResourcePackageQueryDto> queryByPage)
{
DefaultPagination<DataResourcePackageDetailDto> pagination = new DefaultPagination<>();
handlePageParam(queryByPage); //处理分页、排序参数
//租户隔离
queryByPage.getQuery().setTenantId(NKSecurityContext.getTenantId());
pagination.setPageSize(queryByPage.getPageSize());
pagination.setPageNo(queryByPage.getPageNo());
Page<DataResourcePackageDetailDto> page = PageMethod.startPage(queryByPage.getPageNo(), queryByPage.getPageSize());
List<DataResourcePackageDetailDto> result = dataResourcePackageService.getDataResourcePackages(queryByPage);
if (!CollectionUtils.isEmpty(result)) {
for (DataResourcePackageDetailDto data : result) {
data.setCreator(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER,data.getCreatedBy()));
}
}
pagination.setRecords(result);
pagination.setRecordCount(page.getTotal());
return pagination;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public Integer updateByPK(DataResourcePackageUpdateDto dto) throws IllegalAccessException
{
DataResourcePackage oldData = dataResourcePackageService.findByPrimaryKey(dto.getId());
if (oldData == null) {
throw new PlatformRuntimeException(DataPoolError.DATA_RESOURCE_PACKAGE_IS_NULL);
}
DataResourcePackage entity = new DataResourcePackage();
BeanUtils.copyProperties(oldData, entity);
entity.setUpdatedTime(new Date());
entity.setUpdatedBy(NKSecurityContext.getUserId());
entity.setMemo(dto.getMemo());
return this.dataResourcePackageService.updateByPrimaryKey(entity);
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public Integer deleteByPK(String uuid)
{
DataResourcePackage oldData = dataResourcePackageService.findByPrimaryKey(uuid);
if (oldData == null) {
throw new PlatformRuntimeException(DataPoolError.DATA_RESOURCE_PACKAGE_IS_NULL);
}
String oldPath = oldData.getPackageAddr();
//删除数据
DataResourcePackage entity = new DataResourcePackage();
BeanUtils.copyProperties(oldData, entity);
int res = this.dataResourcePackageService.deleteByPrimaryKey(entity);
//删除文件
deleteFile(oldPath);
return res;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public DataResourcePackage uploadResource(MultipartFile file,String proId,String memo) {
logger.info("上传资源包,资源包名称:{},资源包大小:{}B", file.getOriginalFilename(), file.getSize());
//1.获取前端传过来的文件 判断是否为空
if (file.isEmpty()) {
//判断文件的大小是否为空 如果为空 给出提示信息提示
throw new PlatformRuntimeException(DataPoolError.IMPORT_FILE_IS_NULL);
}
//读取文件名
String fileName = file.getOriginalFilename();
//获取文件名的后缀 并判断
String suffix = fileName.substring(fileName.lastIndexOf("."));
if (!suffix.endsWith(".jar")) {
throw new PlatformRuntimeException(DataPoolError.IMPORT_FILE_FORMART_IS_ERROR);
}
try {
DataResourcePackage query = new DataResourcePackage();
query.setName(fileName);
List<DataResourcePackage> list = this.dataResourcePackageService.query(query);
boolean add = true;
DataResourcePackage dataResourcePackage = null;
String oldPath = "";
if (!CollectionUtils.isEmpty(list)) {
//存在同名资源包则做覆盖
dataResourcePackage = list.get(0);
oldPath = dataResourcePackage.getPackageAddr();
add = false;
} else {
DataResourcePackage resource = new DataResourcePackage();
resource.setId(UUIDUtil.create32UUID());
resource.setName(fileName);
dataResourcePackage = resource;
}
try {
NKFile nkFile = simpleStorageService.upload(NKSecurityContext.getTenantId(), file, dataResourcePackage.getId(), FileBusinessTypeEnum.DATA_RUL_RESOURCE_PACKAGE);
String filePath = nkFile.getId();
String fileId = MinioPathUtils.pathToId(NKSecurityContext.getTenantId(),filePath);
dataResourcePackage.setPackageAddr(fileId);
} catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.FILE_UPLOAD_ERROR);
}
dataResourcePackage.setProId(proId);
dataResourcePackage.setMemo(memo);
dataResourcePackage.setCreatedBy(NKSecurityContext.getUserId());
dataResourcePackage.setTenantId(NKSecurityContext.getTenantId());
dataResourcePackage.setUpdatedBy(dataResourcePackage.getCreatedBy());
dataResourcePackage.setCreatedTime(new Date());
dataResourcePackage.setUpdatedTime(dataResourcePackage.getCreatedTime());
if (add) {
this.dataResourcePackageService.insert(dataResourcePackage);
} else {
this.dataResourcePackageService.updateByPrimaryKey(dataResourcePackage);
//删除原文件
if (StringUtils.hasText(oldPath)) {
deleteFile(oldPath);
}
}
logger.info("资源包上传完成,路径:{}",dataResourcePackage.getPackageAddr());
return dataResourcePackage;
} catch (Exception e) {
logger.error("上传资源包失败:",e);
throw new PlatformRuntimeException(DataPoolError.DATA_RESOURCE_PACKAGE_UPLOAD_FAIL);
}
}
/**
*
*
* @param query
*/
private void handlePageParam(QueryByPage<DataResourcePackageQueryDto> query) {
if (query.getPageNo() <= 0) {
query.setPageNo(1);
}
if (query.getPageSize() <= 0 || query.getPageSize() > 500) {
query.setPageSize(500);
}
OrderBy sort = query.toSqlOrderBy();
if (sort != null && sort.isNotEmpty() && StringUtils.hasText(sort.toString())) {
PageMethod.orderBy(sort.toString());
}
}
/**
* url
* @param url
*/
private void deleteFile(String url) {
String[] pathData = pathUtils.idToPath(url);
try {
simpleStorageService.delete(pathData[0], "/" + pathData[1]);
} catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.FILE_DEL_ERROR);
}
}
}

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule.service;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.dto.dataRule.*;
import net.northking.cctp.dataPool.dto.dataSets.AtuDataSetFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import java.util.List;
import java.util.Map;
/**
* Restful
* @author maven-cctp-plugin
* @since 1.0
*/
public interface DataRuleApiService extends ExcelService
{
/**
*
*
* @param queryByPage
* @return
*/
Pagination<DataRuleDetailDto> pagingQuery(QueryByPage<DataRuleQueryDto> queryByPage);
/**
*
*
* @param dto
* @return
*/
String add(DataRuleAddDto dto);
/**
*
*
* @param dto
* @return
*/
Integer updateByPK(DataRuleUpdateDto dto) throws IllegalAccessException;
/**
*
* @param uuid
* @return
*/
DataRuleDetailDto findByPK(String uuid);
/**
*
* @param uuid
* @return
*/
Integer deleteByPK(String uuid);
/**
*
* @param dto
* @return
*/
List<String> executeRule(DataRuleExecuteDto dto);
/**
*
* @param ruleName
* @param proId
* @return
*/
String getRuleDataByName(String ruleName, String proId);
Map<String, String> queryFuzzyDataNameMap(AtuDataSetFeignDto setFeignDto);
AtuScriptInputSetQuoteFieldDto queryFuzzyDataQuoteInfo(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto);
}

View File

@ -0,0 +1,595 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataRule.service;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import com.mifmif.common.regex.Generex;
import net.northking.cctp.common.cache.EntityNameCache;
import net.northking.cctp.common.cache.EntityNameCatalog;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.db.DefaultPagination;
import net.northking.cctp.common.db.OrderBy;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.annotation.DatabaseReadOnly;
import net.northking.cctp.common.db.excel.AbstractExcelService;
import net.northking.cctp.common.db.excel.ExcelHeader;
import net.northking.cctp.common.dto.CpLogAddDto;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.feign.MonsterLogServer;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.s3.SimpleStorageService;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.util.UUIDUtil;
import net.northking.cctp.dataPool.bus.LogRabbitMQPublisher;
import net.northking.cctp.dataPool.constants.DataPoolConstant;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.db.entity.DataRule;
import net.northking.cctp.dataPool.db.service.DataResourcePackageService;
import net.northking.cctp.dataPool.db.service.DataRuleService;
import net.northking.cctp.dataPool.dto.dataRule.*;
import net.northking.cctp.dataPool.dto.dataSets.AtuDataSetFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import net.northking.cctp.dataPool.enums.DataPoolError;
import net.northking.cctp.dataPool.feign.ScriptFeignClient;
import net.northking.cctp.dataPool.feign.dto.AtuInputDataSetResultDto;
import net.northking.cctp.dataPool.utils.MinioPathUtils;
import net.northking.cctp.dataPool.utils.MyUrlClassLoader;
import net.northking.cctp.dataPool.utils.ScriptUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
/**
*
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Service
@ConditionalOnMissingBean(name = "DataRuleApiServiceImpl")
public class DataRuleApiServiceImpl extends AbstractExcelService<DataRule> implements DataRuleApiService
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataRuleApiServiceImpl.class);
@Autowired
private DataRuleService dataRuleService;
@Autowired
private DataResourcePackageService dataResourcePackageService;
@Autowired
private MinioPathUtils pathUtils;
@Autowired
private EntityNameCache entityNameCache;
@Autowired
private SimpleStorageService simpleStorageService;
@Autowired
private LogRabbitMQPublisher logPublisher;
@Autowired
private ScriptFeignClient scriptFeignClient;
@Override
public BasicService<DataRule> getService()
{
return this.dataRuleService;
}
@Override
public ExcelHeader[] excelHeaders()
{
ExcelHeader ruleId = new ExcelHeader("规则id", "ruleId", String.class);
ExcelHeader name = new ExcelHeader("规则名称", "name", String.class);
ExcelHeader type = new ExcelHeader("规则类型", "type", String.class);
ExcelHeader contentExpression = new ExcelHeader("正则表达式、脚本编码", "contentExpression", String.class);
ExcelHeader jarIds = new ExcelHeader("资源包集合", "jarIds", String.class);
ExcelHeader proId = new ExcelHeader("系统id", "proId", String.class);
ExcelHeader tenantId = new ExcelHeader("租户id", "tenantId", String.class);
ExcelHeader createdBy = new ExcelHeader("创建人", "createdBy", String.class);
ExcelHeader createdTime = new ExcelHeader("创建时间", "createdTime", Date.class);
ExcelHeader updatedBy = new ExcelHeader("更新人", "updatedBy", String.class);
ExcelHeader updatedTime = new ExcelHeader("更新时间", "updatedTime", Date.class);
return new ExcelHeader[]{};
}
/**
* Excel
* @param records Excel
* @return
*/
@Override
protected List<DataRule> beforeInsertBatch(List<DataRule> records)
{
return records;
}
/**
* Excel<br>
*
*
* @param record
* @return Excel
*/
@Override
protected DataRule beforeWriteExcel(DataRule record)
{
return record;
}
//= Excel 导入导出相关代码 end =======================//
//= 增删改查 相关代码 start ==================//
@Override
@DatabaseReadOnly
public Pagination<DataRuleDetailDto> pagingQuery(QueryByPage<DataRuleQueryDto> queryByPage)
{
DefaultPagination<DataRuleDetailDto> pagination = new DefaultPagination<>();
DataRuleQueryDto queryDto = queryByPage.getQuery();
//处理查询参数
if (null != queryDto) {
DataRuleQueryDto dataRuleQueryDto = handleQueryParam(queryDto);
//无符合条件创建人
if (null == dataRuleQueryDto) {
return pagination;
}
queryByPage.setQuery(dataRuleQueryDto);
}
//数据租户隔离
queryByPage.getQuery().setTenantId(NKSecurityContext.getTenantId());
handlePageParam(queryByPage); //处理分页、排序参数
pagination.setPageSize(queryByPage.getPageSize());
pagination.setPageNo(queryByPage.getPageNo());
Page<DataRuleDetailDto> page = PageMethod.startPage(queryByPage.getPageNo(), queryByPage.getPageSize());
List<DataRuleDetailDto> result = dataRuleService.getDataRules(queryByPage);
if (!CollectionUtils.isEmpty(result)) {
for (DataRuleDetailDto data : result) {
data.setProjectName(entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(),data.getProId()));
data.setCreator(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER,data.getCreatedBy()));
data.setModifier(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER,data.getUpdatedBy()));
}
}
pagination.setRecords(result);
pagination.setRecordCount(page.getTotal());
return pagination;
}
@Override
public String add(DataRuleAddDto dto)
{
logger.debug("规则重名校验");
long startTime = System.currentTimeMillis();
DataRule dataRule = new DataRule();
dataRule.setName(dto.getName());
dataRule.setProId(dto.getProId());
List<DataRule> dataRuleList = dataRuleService.query(dataRule);
if (!CollectionUtils.isEmpty(dataRuleList)) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_NAME_IS_EXSIT);
}
logger.debug("规则类型校验");
String type = dto.getType();
String contentExpression = dto.getContentExpression();
if (!StringUtils.hasText(contentExpression)) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXP_IS_NULL);
}
//校验是否为正确表达式
if ("1".equals(type)) {
try {
Pattern.compile(contentExpression);
//特殊符号前反斜杠校验 @#
char[] chars = contentExpression.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '@' || chars[i] == '#') {
if (i == 0 || chars[i-1] != '\\') {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}
}
//生成随机字符串
Generex generex = new Generex(contentExpression);
String genValue = generex.random();
logger.debug("Rexp:{}, res: {}",contentExpression,genValue);
}catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}
logger.debug("保存数据库数据");
String uuid = UUIDUtil.create32UUID();
DataRule entity = new DataRule();
BeanUtils.copyProperties(dto, entity);
entity.setRuleId(uuid);
entity.setCreatedBy(NKSecurityContext.getUserId());
entity.setCreatedTime(new Date());
entity.setUpdatedBy(entity.getCreatedBy());
entity.setUpdatedTime(entity.getCreatedTime());
entity.setTenantId(NKSecurityContext.getTenantId());
this.dataRuleService.insert(entity);
logger.debug("新增模糊数据完成,耗时: {}", System.currentTimeMillis() - startTime);
return uuid;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public Integer updateByPK(DataRuleUpdateDto dto) throws IllegalAccessException
{
//规则存在校验
DataRule oldRule = dataRuleService.findByPrimaryKey(dto.getRuleId());
if (null == oldRule) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_IS_NULL);
}
//规则同名校验
if (!StringUtils.hasText(dto.getProId())) {
dto.setProId(oldRule.getProId());
}
Integer count = dataRuleService.queryRuleByName(dto);
if (count > 0) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_NAME_IS_EXSIT);
}
//规则类型校验
String type = dto.getType();
String contentExpression = dto.getContentExpression();
if (!StringUtils.hasText(contentExpression)) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXP_IS_NULL);
}
//校验是否为正确表达式
if ("1".equals(type)) {
try {
Pattern.compile(contentExpression);
//特殊符号前反斜杠校验 @#
char[] chars = contentExpression.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '@' || chars[i] == '#') {
if (i == 0 || chars[i-1] != '\\') {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}
}
//生成随机字符串
Generex generex = new Generex(contentExpression);
String genValue = generex.random();
logger.debug("Rexp:{}, res: {}",contentExpression,genValue);
}catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}
//修改数据规则
DataRule entity = new DataRule();
BeanUtils.copyProperties(oldRule, entity);
entity.setName(dto.getName());
entity.setContentExpression(dto.getContentExpression());
entity.setJarIds(dto.getJarIds());
entity.setType(dto.getType());
entity.setUpdatedBy(NKSecurityContext.getUserId());
entity.setUpdatedTime(new Date());
int res = this.dataRuleService.updateByPrimaryKey(entity);
return res;
}
@Override
@DatabaseReadOnly
public DataRuleDetailDto findByPK(String uuid)
{
DataRule rule = dataRuleService.findByPrimaryKey(uuid);
if (null == rule) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_IS_NULL);
}
DataRuleDetailDto dto = new DataRuleDetailDto();
BeanUtils.copyProperties(rule, dto);
//封装资源包信息列表
String jarIds = rule.getJarIds();
if (StringUtils.hasText(jarIds)) {
String[] jarIdList = jarIds.split(",");
List<String> idList = Arrays.asList(jarIdList);
List<DataResourcePackage> jarInfos = dataResourcePackageService.queryByIds(idList);
List<DataResourcePackageInfoDto> jars = new ArrayList<>();
for (DataResourcePackage jarInfo : jarInfos) {
DataResourcePackageInfoDto infoDto = new DataResourcePackageInfoDto();
infoDto.setJarId(jarInfo.getId());
infoDto.setName(jarInfo.getName());
jars.add(infoDto);
}
dto.setJarInfoList(jars);
}
return dto;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public Integer deleteByPK(String uuid)
{
DataRule rule = dataRuleService.findByPrimaryKey(uuid);
if (null == rule) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_IS_NULL);
}
// 校验是否被引用
//校验数据是否存在关联
List<String> list = new ArrayList<>();
list.add(uuid);
List<AtuInputDataSetResultDto> dtos = scriptFeignClient.selectLinkBySetId(list);
for (AtuInputDataSetResultDto dto : dtos) {
if (dto.getCountNum() > 0){
throw new PlatformRuntimeException(DataPoolError.FUZZY_DATA_SET_HAS_LINK);
}
}
//删除数据规则
int num = dataRuleService.deleteByPrimaryKey(uuid);
//记录平台日志
CpLogAddDto cpLogAddDto = new CpLogAddDto();
String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(), rule.getProId());
cpLogAddDto.setContent("【" + DataPoolConstant.CPLOGADDDTO_CONTENT_DELETE+"模糊测试数据】系统:" + projectName + ",规则名称:" + rule.getName());
cpLogAddDto.setModule(DataPoolConstant.CPLOGADDDTO_DATA_POOL_MANAGEMENT);
cpLogAddDto.setType(DataPoolConstant.CPLOGADDDTO_LOG_TYPE_DELETE);
MonsterLogServer.sendLogToMonster(cpLogAddDto);
logPublisher.deployLogContent(cpLogAddDto);
return num;
}
@Override
public List<String> executeRule(DataRuleExecuteDto dto) {
List<String> res = new ArrayList<>();
//规则类型校验
String type = dto.getType();
String contentExpression = dto.getContentExpression();
MyUrlClassLoader loader = null;
if (!StringUtils.hasText(contentExpression)) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXP_IS_NULL);
}
//正则表达式类型
if ("1".equals(type)) {
//校验是否为正确表达式
try {
Pattern.compile(contentExpression);
//特殊符号前反斜杠校验 @#
char[] chars = contentExpression.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '@' || chars[i] == '#') {
if (i == 0 || chars[i-1] != '\\') {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}
}
//表达式含Unicode需解码
String exp = decodeExpression(chars);
Pattern.compile(exp);
//生成随机字符串
Generex generex = new Generex(exp);
String genValue = generex.random();
logger.debug("Rexp:{}, exp:{}, res: {}",contentExpression,exp,genValue);
res.add(genValue);
}catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_REXP_IS_VALID);
}
}else if ("0".equals(type)) {
//beanshell脚本类型
String jarIds = dto.getJarIds();
loader = new MyUrlClassLoader();
if (StringUtils.hasText(jarIds)) {
//有jar包依赖
String[] jars = jarIds.split(",");
//查询jar包路径
for (String jar : jars) {
//跳过空串
if (!StringUtils.hasText(jar)) {
continue;
}
//根据jar包id获取路径同一jar包被删除后重新上传jar包id会改变
DataResourcePackage resourcePackage = dataResourcePackageService.findByPrimaryKey(jar);
//下载jar包并进行加载
try {
if (Objects.nonNull(resourcePackage)) {//资源包记录存在
if (StringUtils.hasText(resourcePackage.getPackageAddr())) {
//路径存在
String path = resourcePackage.getPackageAddr();
String[] result = pathUtils.idToPath(path);
File file = simpleStorageService.downloadAsFile(result[0], "/" + result[1]);
loader.addURLFile(file);
}
}
} catch (Exception e) {
logger.error("资源包加载异常", e);
throw new PlatformRuntimeException(DataPoolError.DATA_RESOURCE_PACKAGE_LOAD_FAIL);
}
}
}
try {
//执行脚本1次
res = ScriptUtil.executesBeanShell(contentExpression,1);
if (res.contains(null)) {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXECUTE_RESULT_IS_NULL);
}
} catch (Exception e) {
logger.error("脚本执行异常", e);
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXECUTE_RESULT_IS_EXCEPTION);
}finally {
if (loader != null){
//删除文件夹下文件
loader.unloadJarFiles();
try {
loader.close();
} catch (IOException e) {
logger.error("",e);
}
}
}
}else {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_NOT_SUPPORT_TYPE);
}
return res;
}
/**
* Unicode
* @param chars
* @return
*/
private String decodeExpression(char[] chars) {
//存储解码后的字符串
StringBuilder tempSb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
//查找unicode前缀
if (chars[i] == '\\' && i != chars.length-1 && chars[i+1] == 'u') {
StringBuilder hexSb = new StringBuilder(); //unicode中十六进制部分
StringBuilder zeroSb = new StringBuilder(); //unicode中左位补零部分
StringBuilder otherSb = new StringBuilder(); //不满足unicode十六进制部分
//从第二位开始,跳过前缀直接处理十六进制(后四位)
for (int j = 2; j <= 5; j++) {
char tmpChar = chars[i + j];
//判断当前符号是否满足十六进制条件 0-9a-f
if (checkHex(tmpChar)) {
hexSb.append(tmpChar);
}else {
//后四位中不满足条件,则左位补零凑齐四位,同时记录后续不满足字符
zeroSb.append("0");
otherSb.append(tmpChar);
}
}
//补零位加上十六进制位凑齐四位完整unicode码
zeroSb.append(hexSb);
//十六进制转换成字符
char ch = (char) Integer.parseInt(zeroSb.toString(),16);
tempSb.append(ch);
tempSb.append(otherSb);
//直接从转换后的字符开始处理
i = i+5;
continue;
}
//非unicode编码部分则直接记录
tempSb.append(chars[i]);
}
return tempSb.toString();
}
/**
* 0-9a-fA-F
* @param c
* @return
*/
private boolean checkHex(char c) {
boolean res = false;
if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || (c >= '0' && c <= '9')) {
res = true;
}
return res;
}
@Override
public String getRuleDataByName(String ruleName, String proId) {
DataRule dataRule = new DataRule();
dataRule.setName(ruleName);
dataRule.setProId(proId);
List<DataRule> dataRules = dataRuleService.query(dataRule);
if (!CollectionUtils.isEmpty(dataRules)) {
DataRule tempRule = dataRules.get(0);
if (null != tempRule) {
DataRuleExecuteDto execRule = new DataRuleExecuteDto();
BeanUtils.copyProperties(tempRule,execRule);
try {
List<String> resultList = executeRule(execRule);
if (!CollectionUtils.isEmpty(resultList)) {
return resultList.get(0);
}else {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_EXECUTE_RESULT_IS_NULL);
}
}catch (PlatformRuntimeException e) {
throw e;
}
}
}else {
throw new PlatformRuntimeException(DataPoolError.DATA_RULE_IS_NULL);
}
return null;
}
@Override
public Map<String, String> queryFuzzyDataNameMap(AtuDataSetFeignDto setFeignDto) {
Map<String, String> dataRuleNameMap = new HashMap<>();
Set<String> dataSetList = setFeignDto.getDataSetList();
if (dataSetList == null || dataSetList.size() <= 0){
logger.debug("查询的id集合为空");
return dataRuleNameMap;
}
List<DataRule> dataRuleList = dataRuleService.queryByIdSet(dataSetList);
if (dataRuleList == null || dataRuleList.size() <= 0){
logger.debug("查询的数据规则为空");
return dataRuleNameMap;
}
for (DataRule dataRule : dataRuleList) {
dataRuleNameMap.put(dataRule.getRuleId(), dataRule.getName());
}
return dataRuleNameMap;
}
@Override
public AtuScriptInputSetQuoteFieldDto queryFuzzyDataQuoteInfo(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto) {
AtuScriptInputSetQuoteFieldDto quoteFieldDto = new AtuScriptInputSetQuoteFieldDto();
if (atuScriptInputSetQuoteFieldDto.getSetId() == null){
throw new PlatformRuntimeException(DataPoolError.PARAM_IS_MISSING);
}
DataRule dataRule = dataRuleService.findByPrimaryKey(atuScriptInputSetQuoteFieldDto.getSetId());
if (dataRule == null){
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
quoteFieldDto.setFullName(dataRule.getName());
quoteFieldDto.setName(dataRule.getName());
quoteFieldDto.setPath(dataRule.getName());
quoteFieldDto.setType(DataPoolConstant.INPUT_SET_QUOTE_TYPE_FUZZY);
quoteFieldDto.setValue(DataPoolConstant.FUZZY_DATA_QUOTE_PREFIX + dataRule.getName() + DataPoolConstant.FUZZY_DATA_QUOTE_SUFFIX);
return quoteFieldDto;
}
/**
*
*
* @param query
*/
private void handlePageParam(QueryByPage<DataRuleQueryDto> query) {
if (query.getPageNo() <= 0) {
query.setPageNo(1);
}
if (query.getPageSize() <= 0 || query.getPageSize() > 500) {
query.setPageSize(500);
}
OrderBy sort = query.toSqlOrderBy();
if (sort != null && sort.isNotEmpty() && StringUtils.hasText(sort.toString())) {
PageMethod.orderBy(sort.toString());
}
}
/**
*
*
* @param query
* @return
*/
private DataRuleQueryDto handleQueryParam(DataRuleQueryDto query) {
DataRuleQueryDto res = new DataRuleQueryDto();
BeanUtils.copyProperties(query, res);
//创建人查询参数修改
String creatorName = query.getCreator();
if (StringUtils.hasText(creatorName)) {
List<String> creatorIds = new ArrayList<>();
creatorIds.add(creatorName);
res.setCreatorIds(creatorIds);
}
return res;
}
}

View File

@ -0,0 +1,134 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.api.dataSets.service.DataSetEnvRelApiService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@Api(tags = "数据集环境关联表")
@RequestMapping("/v1")
@RestController
public class DataSetEnvRelCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetEnvRelCtrl.class);
@Autowired
private DataSetEnvRelApiService apiService;
/**
*
* @param dataSetEnvRelQueryDto
* @param response
*/
@ApiOperation(value = "导出Excel数据集环境关联表")
@RequiredPermissions("ui-exportDataSetEnvRels")
@PostMapping(value = "/excel/export/DataSetEnvRels",
produces = MediaType.APPLICATION_OCTET_STREAM_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public void exportExcel(
@RequestBody @Validated DataSetEnvRelQueryDto dataSetEnvRelQueryDto,
HttpServletResponse response)
{
apiService.exportExcel(response, dataSetEnvRelQueryDto);
}
/**
*
* @param file
* @param dataSetId
* @param envId
* @return
*/
@ApiOperation(value = "导入Excel单环境数据导入")
@PostMapping(value = "/excel/import/DataSetEnvRels",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResultWrapper<DataSetsSaveDto> importExcel(
@RequestParam("file") MultipartFile file,@RequestParam("dataSetId") String dataSetId,@RequestParam("envId") String envId,@RequestParam("tableHeaders") String tableHeaders)
{
long startTime = System.currentTimeMillis();
ResultWrapper<DataSetsSaveDto> resultWrapper = new ResultWrapper<>();
DataSetsSaveDto result = apiService.importExcel(file, dataSetId, envId, tableHeaders);
long endTime = System.currentTimeMillis();
logger.info("单环境数据导入静态数据集耗时:"+(endTime - startTime));
return resultWrapper.success(result);
}
/**
*
*
* @param queryDto
* @return DataSetsDetailDto
*/
@ApiOperation(value = "获取:数据集环境关联表")
@PostMapping(
value = "/query/list",
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<List<DataSetsSaveDto>> queryList(
@RequestBody DataSetEnvRelQueryDto queryDto)
{
ResultWrapper<List<DataSetsSaveDto>> wrapper = new ResultWrapper<>();
List<DataSetsSaveDto> dto = apiService.queryList(queryDto);
return wrapper.success(dto);
}
/**
*
*
* @param addDto
* @return
*/
@ApiOperation(value = "保持:数据集内多环境数据同时保存")
@RequiredPermissions("ui-saveDataSetBatch")
@PostMapping(
value = "/save/batch",
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<List<String>> saveBatch(
@RequestBody DataSetEnvRelAddDto addDto)
{
return apiService.saveBatch(addDto);
}
@ApiOperation(value = "查询Interface")
@PostMapping(value = "/query/selectDataUrlAndTreeNameInterface",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<AtuScriptInputSetQuoteFieldDto> selectDataUrlAndTreeNameInterface(@RequestBody AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto){
ResultWrapper<AtuScriptInputSetQuoteFieldDto> wrapper = new ResultWrapper<>();
return wrapper.success(apiService.selectDataUrlAndTreeName(atuScriptInputSetQuoteFieldDto));
}
@ApiOperation(value = "查询静态数据集对应的文件")
@PostMapping(value = "/query/getDataSetFile",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Map<String,AtuScriptInputSetQuoteFeignDto> queryDataSetFile(@RequestBody AtuDataSetFeignDto dto){
return apiService.getDataSetFile(dto);
}
}

View File

@ -0,0 +1,143 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.api.dataSets.service.DataSetTreeApiService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* => Restful HTTP/HTTPS
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Api(tags = "数据集树目录管理")
@RequestMapping("/v1/dataSetTree")
@RestController
public class DataSetTreeRestfulCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetTreeRestfulCtrl.class);
@Autowired
private DataSetTreeApiService apiService;
/**
* Restful-post
*
* @param inputDto
* @return
*/
@ApiOperation(value = "新增:数据集树目录表")
@RequiredPermissions("ui-saveDataSetTree")
@PostMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<String> add(
@RequestBody @Validated DataSetTreeAddDto inputDto)
{
ResultWrapper<String> wrapper = new ResultWrapper<>();
String uuid = apiService.add(inputDto);
return wrapper.success(uuid);
}
/**
* Restful-put
*
* @param inputDto
* @return
*/
@ApiOperation(value = "更新:数据集树目录表")
@RequiredPermissions("ui-updateDataSetTree")
@PutMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> update(
@RequestBody @Validated DataSetTreeUpdateDto inputDto) throws IllegalAccessException
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.updateByPK(inputDto);
return wrapper.success(count);
}
/**
* Restful-delete
*
* @param uuid
* @return
*/
@ApiOperation(value = "删除:数据集树目录表")
@RequiredPermissions("ui-deleteDataSetTree")
@DeleteMapping(
value = "/{uuid}",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> delete(
@PathVariable("uuid") String uuid)
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.deleteByPK(uuid);
return wrapper.success(count);
}
@ApiOperation(value = "根据层级查询数据集目录节点")
@PostMapping(
value = "/queryDataSetTreeByParentId",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<List<DataSetTreeDetailDto>> queryDataSetTreeByParentId(
@RequestBody @Validated DataSetTreeQueryDto dto)
{
logger.debug("start queryDataSetTreeByParentId, param:{}", JSONObject.toJSONString(dto));
ResultWrapper<List<DataSetTreeDetailDto>> wrapper = new ResultWrapper<>();
List<DataSetTreeDetailDto> res = apiService.queryDataSetTreeByParentId(dto);
logger.debug("end queryDataSetTreeByParentId");
return wrapper.success(res);
}
@ApiOperation(value = "根据名字模糊查询数据集目录节点")
@PostMapping(
value = "/queryDataSetTreeByName",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<List<DataSetTreeDetailDto>> queryDataSetTreeByName(
@RequestBody @Validated DataSetTreeQueryDto dto)
{
logger.debug("start queryDataSetTreeByName, param:{}", JSONObject.toJSONString(dto));
ResultWrapper<List<DataSetTreeDetailDto>> wrapper = new ResultWrapper<>();
List<DataSetTreeDetailDto> res = apiService.queryDataSetTreeByName(dto);
logger.debug("end queryDataSetTreeByName");
return wrapper.success(res);
}
@ApiOperation(value = "拖拽树目录")
@PostMapping(
value = "/moveDataSetTree",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> moveDataSetTree(
@RequestBody @Validated DataSetTreeMoveDto dto)
{
logger.debug("start moveDataSetTree, param:{}", JSONObject.toJSONString(dto));
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer num = apiService.moveDataSetTree(dto);
logger.debug("end moveDataSetTree");
return wrapper.success(num);
}
}

View File

@ -0,0 +1,29 @@
package net.northking.cctp.dataPool.api.dataSets;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.dataPool.api.dataSets.service.DataSetEnvRelApiService;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
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;
@RestController
@RequestMapping("/pub")
@Api(tags = "数据集管理无token请求")
public class DataSetsPubCtrl {
@Autowired
private DataSetEnvRelApiService setEnvRelApiService;
@ApiOperation(value = "查询单元格的引用pub")
@PostMapping(value = "/query/selectDataUrlAndTreeName",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(@RequestBody AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto){
return setEnvRelApiService.selectDataUrlAndTreeName(atuScriptInputSetQuoteFieldDto);
}
}

View File

@ -0,0 +1,219 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets;
import cn.gjing.tools.auth.annotation.RequiredPermissions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.api.dataSets.service.DataSetsApiService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
* => Restful HTTP/HTTPS
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Api(tags = "数据集管理")
@RequestMapping("/v1/dataSets")
@RestController
public class DataSetsRestfulCtrl
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetsRestfulCtrl.class);
@Autowired
private DataSetsApiService apiService;
@ApiOperation(value = "数据库配置保存数据集")
@PostMapping(value = "/createDataSet",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<String> createDataSet(
@RequestBody @Validated DataSetsAddDto inputDto)
{
ResultWrapper<String> wrapper = new ResultWrapper<>();
String uuid = apiService.createDataSet(inputDto);
return wrapper.success(uuid);
}
/**
* Restful-post
*
* @param inputDto
* @return
*/
@ApiOperation(value = "新增:数据集")
@RequiredPermissions("ui-saveDataSets")
@PostMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<String> add(
@RequestBody @Validated DataSetsAddDto inputDto)
{
ResultWrapper<String> wrapper = new ResultWrapper<>();
String uuid = apiService.add(inputDto);
return wrapper.success(uuid);
}
/**
* Restful-put
*
* @param inputDto
* @return
*/
@ApiOperation(value = "更新:数据集")
@RequiredPermissions("ui-updateDataSets")
@PutMapping(
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> update(
@RequestBody @Validated DataSetsUpdateDto inputDto) throws IllegalAccessException
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.updateByPK(inputDto);
return wrapper.success(count);
}
/**
* Restful-get
*
* @param uuid
* @return
*/
@ApiOperation(value = "获取:数据集详情")
@GetMapping(
value = "getDataSetDetail/{uuid}",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<DataSetsDetailDto> getDataSetDetail(
@PathVariable("uuid") String uuid)
{
ResultWrapper<DataSetsDetailDto> wrapper = new ResultWrapper<>();
DataSetsDetailDto dto = apiService.findByPK(uuid);
return wrapper.success(dto);
}
/**
* Restful-delete
*
* @param uuid
* @return
*/
@ApiOperation(value = "删除:数据集")
@RequiredPermissions("ui-deleteDataSet")
@DeleteMapping(
value = "/{uuid}",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> delete(
@PathVariable("uuid") String uuid)
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = apiService.deleteByPK(uuid);
return wrapper.success(count);
}
/**
* Restful-post
*
* @param dto
* @return
*/
@ApiOperation(value = "批量删除:数据集")
@RequiredPermissions("ui-deleteDataSetList")
@PostMapping(
value = "/deleteDataSets",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Integer> deleteBatch(
@RequestBody @Validated DataSetsDeleteDto dto)
{
ResultWrapper<Integer> wrapper = new ResultWrapper<>();
Integer count = this.apiService.deleteBatch(dto);
return wrapper.success(count);
}
/**
*
*
* @param queryByPage
* @return
*/
@ApiOperation(value = "分页查询列表:数据集")
@RequiredPermissions("staticData")
@PostMapping(value = "/paging/query/DataSets",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Pagination<DataSetsDetailDto>> pagingQuery(
@RequestBody @Validated QueryByPage<DataSetsQueryDto> queryByPage)
{
ResultWrapper<Pagination<DataSetsDetailDto>> wrapper = new ResultWrapper<>();
Pagination<DataSetsDetailDto> page = apiService.pagingQuery(queryByPage);
return wrapper.success(page);
}
@ApiOperation(value = "保存数据集数据")
@PostMapping(value = "/save",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Boolean> save(@RequestBody @Validated DataSetsSaveDto dto)
{
ResultWrapper<Boolean> wrapper = new ResultWrapper<>();
Boolean count = this.apiService.save(dto);
return wrapper.success(count);
}
@ApiOperation(value = "新增列校验数据集表头")
@PostMapping(value = "/checkTableHeader",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<Boolean> checkTableHeader(@RequestBody @Validated ColumnCheckDto dto)
{
ResultWrapper<Boolean> wrapper = new ResultWrapper<>();
Boolean count = this.apiService.checkTableHeader(dto);
return wrapper.success(count);
}
@ApiOperation(value = "导出Excel数据集")
@GetMapping(value = "/export/{dataSetId}",
produces = MediaType.APPLICATION_OCTET_STREAM_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public void export(@PathVariable("dataSetId") String dataSetId, HttpServletResponse response)
{
// 定义导出的Excel在客户端浏览器上提示下载的文件名不写后缀
logger.debug("start exportDataSet");
String fileName = "数据集";
apiService.exportDataSet(response, dataSetId, fileName);
logger.debug("end exportDataSet");
}
@ApiOperation(value = "下载Excel模板数据集")
@PostMapping(value = "/downloadTemplate",
produces = MediaType.APPLICATION_OCTET_STREAM_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public void downloadTemplate(@RequestBody DataSetsSaveDto dto,
HttpServletResponse response)
{
logger.debug("start downloadTemplate");
String fileName = "数据集模版";
apiService.downloadTemplate(response, fileName, dto);
logger.debug("end downloadTemplate");
}
}

View File

@ -0,0 +1,34 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.dataPool.dto.dataSets.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* Restful
* @author maven-cctp-plugin
* @since 1.0
*/
public interface DataSetEnvRelApiService
{
List<DataSetsSaveDto> queryList(DataSetEnvRelQueryDto queryDto);
ResultWrapper<List<String>> saveBatch(DataSetEnvRelAddDto addDto);
DataSetsSaveDto importExcel(MultipartFile file, String dataSetId, String envId,String tableHeaders);
void exportExcel(HttpServletResponse response, DataSetEnvRelQueryDto dataSetEnvRelQueryDto);
AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto);
Map<String,AtuScriptInputSetQuoteFeignDto> getDataSetFile(AtuDataSetFeignDto dto);
}

View File

@ -0,0 +1,739 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import com.alibaba.fastjson.JSONObject;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.entity.Environment;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.exception.InvalidException;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import net.northking.cctp.common.db.SqlOrderBy;
import net.northking.cctp.common.enums.FileBusinessTypeEnum;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.feign.ApiAtsEnviromentFeign;
import net.northking.cctp.common.http.ResultWrapper;
import net.northking.cctp.common.s3.FileDownloadException;
import net.northking.cctp.common.s3.FileUploadException;
import net.northking.cctp.common.s3.NKFile;
import net.northking.cctp.common.s3.SimpleStorageService;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.util.UUIDUtil;
import net.northking.cctp.dataPool.constants.DataPoolConstant;
import net.northking.cctp.dataPool.db.entity.DataSetEnvRel;
import net.northking.cctp.dataPool.db.service.DataSetEnvRelService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import net.northking.cctp.dataPool.enums.DataPoolError;
import net.northking.cctp.dataPool.feign.AttachmentFeignClient;
import net.northking.cctp.dataPool.feign.ProjectFeignClient;
import net.northking.cctp.dataPool.utils.EnvNameUtils;
import net.northking.cctp.dataPool.utils.MinioPathUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
*
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Service
@ConditionalOnMissingBean(name = "DataSetEnvRelApiServiceImpl")
public class DataSetEnvRelApiServiceImpl implements DataSetEnvRelApiService
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetEnvRelApiServiceImpl.class);
@Autowired
private DataSetEnvRelService dataSetEnvRelService;
@Autowired
private ProjectFeignClient projectFeignClient;
@Autowired
private MinioPathUtils pathUtils;
@Autowired
private SimpleStorageService simpleStorageService;
@Autowired
private EnvNameUtils envNameUtils;
@Autowired
private ApiAtsEnviromentFeign apiAtsEnviromentFeign;
@Autowired
private AttachmentFeignClient attachmentFeignClient;
@Override
@Transactional(rollbackFor = Exception.class)
public List<DataSetsSaveDto> queryList(DataSetEnvRelQueryDto queryDto) {
//返回结果集
List<DataSetsSaveDto> dataSetsSaveDtos=new ArrayList<>();
//根据数据集id查关联表 1
DataSetEnvRel dataSetEnvRel=new DataSetEnvRel();
dataSetEnvRel.setDataSetId(queryDto.getDataSetId());
SqlOrderBy sqlOrderBy=new SqlOrderBy();
sqlOrderBy.asc("env_id");
List<DataSetEnvRel> query = dataSetEnvRelService.query(dataSetEnvRel,sqlOrderBy);
//跟据系统id查关联环境 调project的feign 2
//去project服务写feign
Long projectId = null;
try {
projectId = Long.valueOf(queryDto.getProId());
} catch (NumberFormatException e) {
logger.error("系统Id类型转换异常");
throw new InvalidException("系统Id类型转换异常");
}
ResponseVO<List<Environment>> listResponseVO = apiAtsEnviromentFeign.listByProject(projectId);
List<Environment> environmentList = listResponseVO.getData();
Map<String, Environment> environmentMap = environmentList.stream().collect(Collectors.toMap(e -> e.getId().toString(), e -> e));
List<String> envIds = environmentList.stream().map(e -> e.getId().toString()).collect(Collectors.toList());
if (environmentList.size()==0){
//删除当前数据集全部环境关联记录
if (query.size()!=0){
List<Object> ids = query.stream().map(DataSetEnvRel::getId).collect(Collectors.toList());
dataSetEnvRelService.deleteByPrimaryKeys(ids);
//是否删除文件服务器上的数据
}
return dataSetsSaveDtos;
}
if (query.size()!=0) {
List<Object> delDsIds = new ArrayList<>();
List<DataSetEnvRel> noDelDs = new ArrayList<>();
//比较1和2
for (DataSetEnvRel d : query) {
if (!envIds.contains(d.getEnvId())) {
delDsIds.add(d.getId());
} else {
noDelDs.add(d);
}
}
// 如果1中存在2不存的环境的话删除1中相关信息
if (delDsIds.size() != 0) {
dataSetEnvRelService.deleteByPrimaryKeys(delDsIds);
//是否删除对应的文件服务器中的json文件
}
// 筛选出2中存在1中不存在
List<String> addEnvIds = new ArrayList<>();
if (noDelDs.size() != 0) {
List<String> noDelEnvIds = noDelDs.stream().map(DataSetEnvRel::getEnvId).collect(Collectors.toList());
for (String envId : envIds) {
if (!noDelEnvIds.contains(envId)) {
addEnvIds.add(envId);
}
}
if (addEnvIds.size() != 0) {//如果2中存在1中不存在的环境给1的file_addr加上赋值为与其他记录相同的头信息
DataSetEnvRel dataSetEnvRelAdd = null;
Integer seq = noDelDs.get(noDelDs.size() - 1).getSeq();
String fileAddr = noDelDs.get(0).getFileAddr();
String fileAddrAdd = "";
//获取文件数据
JSONObject data = downloadFile(fileAddr);
DataSetsSaveDto dataSetsSaveDto = new DataSetsSaveDto();
if (!ObjectUtils.isEmpty(data)) {
dataSetsSaveDto = data.toJavaObject(DataSetsSaveDto.class);
dataSetsSaveDto.setTableContent(null);
}
for (int i = 0; i < addEnvIds.size(); i++) {
dataSetsSaveDto.setEnvId(addEnvIds.get(i));
if(environmentMap.containsKey(addEnvIds.get(i))){
dataSetsSaveDto.setEnvName(environmentMap.get(addEnvIds.get(i)).getName());
}
dataSetsSaveDtos.add(dataSetsSaveDto);
dataSetEnvRelAdd = new DataSetEnvRel();
dataSetEnvRelAdd.setDataSetId(queryDto.getDataSetId());
dataSetEnvRelAdd.setEnvId(addEnvIds.get(i));
dataSetEnvRelAdd.setId(UUIDUtil.create32UUID());
dataSetEnvRelAdd.setCreatedBy(NKSecurityContext.getUserId());
dataSetEnvRelAdd.setCreatedTime(new Date());
dataSetEnvRelAdd.setTenantId(NKSecurityContext.getTenantId());
dataSetEnvRelAdd.setSeq(seq + i + 1);
//存储文件数据
fileAddrAdd = uploadFile(dataSetsSaveDto, dataSetEnvRelAdd.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
dataSetEnvRelAdd.setFileAddr(fileAddrAdd);
dataSetEnvRelService.insert(dataSetEnvRelAdd);
}
}
//封装反显数据
DataSetsSaveDto dataSetsSaveVo = null;
for (int i = 0; i < noDelDs.size(); i++) {
if (StringUtils.hasText(noDelDs.get(i).getFileAddr())) {
JSONObject data1 = downloadFile(noDelDs.get(i).getFileAddr());
if (!ObjectUtils.isEmpty(data1)) {
dataSetsSaveVo = data1.toJavaObject(DataSetsSaveDto.class);
dataSetsSaveVo.setEnvId(noDelDs.get(i).getEnvId());
if(environmentMap.containsKey(noDelDs.get(i).getEnvId())){
dataSetsSaveVo.setEnvName(environmentMap.get(noDelDs.get(i).getEnvId()).getName());
}
dataSetsSaveDtos.add(dataSetsSaveVo);
}
}
}
}
}
else{
//反显系统关联的环境名以及环境id
DataSetsSaveDto dataSetsSaveDto = null;
for (String envId:envIds){
dataSetsSaveDto = new DataSetsSaveDto();
dataSetsSaveDto.setEnvId(envId);
if(environmentMap.containsKey(envId)){
dataSetsSaveDto.setEnvName(environmentMap.get(envId).getName());
}
dataSetsSaveDtos.add(dataSetsSaveDto);
}
}
return dataSetListSeq(envIds,dataSetsSaveDtos);
}
@Override
public ResultWrapper<List<String>> saveBatch(DataSetEnvRelAddDto addDto) {
ResultWrapper<List<String>> resultWrapper=new ResultWrapper<>();
//用projectId调project服务的feign查系统关联的环境集合 1
List<String> envIds = projectFeignClient.selectEnvIds(addDto.getProId());
List<String> resultId = saveDataEnv(envIds, addDto);
return resultWrapper.success(resultId);
}
@Transactional(rollbackFor = Exception.class)
private List<String> saveDataEnv(List<String> envIds,DataSetEnvRelAddDto addDto){
List<String> resultId=new ArrayList<>();
//用dataSetId查数据集环境关联表获取相关关联记录 2
DataSetEnvRel dataSetEnvRel=new DataSetEnvRel();
dataSetEnvRel.setDataSetId(addDto.getDataSetId());
SqlOrderBy sqlOrderBy=new SqlOrderBy();
sqlOrderBy.asc("seq");
List<DataSetEnvRel> query = dataSetEnvRelService.query(dataSetEnvRel,sqlOrderBy);
//系统未关联环境,删除当前数据集关联环境的所有记录
if (envIds.size()==0){
if (query.size()!=0) {
List<Object> ids = query.stream().map(DataSetEnvRel::getId).collect(Collectors.toList());
dataSetEnvRelService.deleteByPrimaryKeys(ids);
}
throw new PlatformRuntimeException(DataPoolError.PROJECT_NO_REFER_ENV);
}
if (query.size()!=0) {
//比较1和2
List<DataSetEnvRel> delIds=new ArrayList<>();//系统已删除关联的环境id集合
List<DataSetEnvRel> noDelQuery=new ArrayList<>();//1和2中均存在的
for (int i = 0; i <query.size() ; i++) {
if (!envIds.contains(query.get(i).getEnvId())){
delIds.add(query.get(i));
}else {
noDelQuery.add(query.get(i));
}
}
//2中存在1不存在的 删
if (delIds.size()!=0){
delIds.forEach(item -> {
if (StringUtils.hasText(dataSetEnvRel.getFileAddr())) {
deleteFile(dataSetEnvRel.getFileAddr());
}
});
List<Object> collect = delIds.stream().map(DataSetEnvRel::getId).collect(Collectors.toList());
dataSetEnvRelService.deleteByPrimaryKeys(collect);
//是否需要补充删除文件服务器上的json文件
}
//2和1中都存在的 改
if (noDelQuery.size()!=0){
Map<String, DataSetEnvRel> noDelMap = noDelQuery.stream().collect(Collectors.toMap(DataSetEnvRel::getEnvId, e -> e));
Set<String> noDelEnvIds = noDelMap.keySet();
Map<String, List<DataSetEnvRel>> map = noDelQuery.stream().collect(Collectors.groupingBy(DataSetEnvRel::getEnvId));
DataSetEnvRel update=null;
DataSetsSaveDto updateSaveDto=null;
for (DataSetEnvRelAddTmpDto d:addDto.getDataSetEnvRelAddTmpDto()) {
if (noDelEnvIds.contains(d.getEnvId())){
update=new DataSetEnvRel();
update.setId(map.get(d.getEnvId()).get(0).getId());
update.setUpdatedBy(NKSecurityContext.getUserId());
update.setUpdatedTime(new Date());
updateSaveDto=new DataSetsSaveDto();
updateSaveDto.setDataSetId(addDto.getDataSetId());
updateSaveDto.setTableContent(d.getTableContent());
updateSaveDto.setTableHeader(d.getTableHeader());
//更新到文件服务器
DataSetEnvRel envRel = noDelMap.get(d.getEnvId());
if (StringUtils.hasText(envRel.getFileAddr())) {
deleteFile(envRel.getFileAddr());
}
String path = uploadFile(updateSaveDto, update.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
update.setFileAddr(path);
//更新到表
resultId.add(map.get(d.getEnvId()).get(0).getId());
dataSetEnvRelService.updateByPrimaryKey(update);
}
}
}
//筛选出1中存在2不存在的
List<String> addEnvIds=new ArrayList<>();
List<String> foundIds = query.stream().map(DataSetEnvRel::getEnvId).collect(Collectors.toList());
for (String envId:envIds) {
if (!foundIds.contains(envId)){
addEnvIds.add(envId);
}
}
//1中存在2不存在的 加
if (addEnvIds.size()!=0){
Integer seq=0;
if (noDelQuery.size()!=0) {
seq = noDelQuery.get(query.size() - 1).getSeq();
}
DataSetEnvRel dataSetEnvRelAdd=null;
DataSetsSaveDto dataSetsSaveDto=null;
for (DataSetEnvRelAddTmpDto d:addDto.getDataSetEnvRelAddTmpDto()) {
if (addEnvIds.contains(d.getEnvId())) {
dataSetEnvRelAdd = new DataSetEnvRel();
dataSetEnvRelAdd.setEnvId(d.getEnvId());
dataSetEnvRelAdd.setDataSetId(addDto.getDataSetId());
dataSetEnvRelAdd.setTenantId(NKSecurityContext.getTenantId());
dataSetEnvRelAdd.setCreatedTime(new Date());
dataSetEnvRelAdd.setCreatedBy(NKSecurityContext.getUserId());
String uuid = UUIDUtil.create32UUID();
dataSetEnvRelAdd.setId(uuid);
dataSetEnvRelAdd.setSeq(++seq);
//上传数据到文件服务器
dataSetsSaveDto = new DataSetsSaveDto();
dataSetsSaveDto.setTableHeader(d.getTableHeader());
dataSetsSaveDto.setTableContent(d.getTableContent());
dataSetsSaveDto.setDataSetId(addDto.getDataSetId());
String path = uploadFile(dataSetsSaveDto, dataSetEnvRelAdd.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
dataSetEnvRelAdd.setFileAddr(path);
//存记录到数据库
resultId.add(uuid);
dataSetEnvRelService.insert(dataSetEnvRelAdd);
}
}
}
}
else {
//直接新增
DataSetsSaveDto dataSetsSaveDto=null;
DataSetEnvRel dataSetEnvRelAdd=null;
Integer count=1;
for (DataSetEnvRelAddTmpDto d:addDto.getDataSetEnvRelAddTmpDto()) {
if (envIds.contains(d.getEnvId())) {
dataSetEnvRelAdd = new DataSetEnvRel();
dataSetEnvRelAdd.setEnvId(d.getEnvId());
dataSetEnvRelAdd.setDataSetId(addDto.getDataSetId());
dataSetEnvRelAdd.setTenantId(NKSecurityContext.getTenantId());
dataSetEnvRelAdd.setCreatedTime(new Date());
dataSetEnvRelAdd.setCreatedBy(NKSecurityContext.getUserId());
String uuid = UUIDUtil.create32UUID();
dataSetEnvRelAdd.setId(uuid);
dataSetEnvRelAdd.setSeq(count++);
//上传数据到文件服务器
dataSetsSaveDto = new DataSetsSaveDto();
dataSetsSaveDto.setTableHeader(d.getTableHeader());
dataSetsSaveDto.setTableContent(d.getTableContent());
dataSetsSaveDto.setDataSetId(addDto.getDataSetId());
String path = uploadFile(dataSetsSaveDto, dataSetEnvRelAdd.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
dataSetEnvRelAdd.setFileAddr(path);
//存记录到数据库
resultId.add(uuid);
dataSetEnvRelService.insert(dataSetEnvRelAdd);
}
}
}
return resultId;
}
private void deleteFile(String fileAddr) {
String[] pathData = MinioPathUtils.idToPath(fileAddr);
try {
simpleStorageService.delete(pathData[0], "/" + pathData[1]);
} catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.FILE_DEL_ERROR);
}
}
@Override
public void exportExcel(HttpServletResponse response, DataSetEnvRelQueryDto dataSetEnvRelQueryDto) {
try {
XSSFWorkbook hssfWorkbook = getXSSFWorkbook(dataSetEnvRelQueryDto);
setResponseHeader(response);
ServletOutputStream outputStream = response.getOutputStream();
hssfWorkbook.write(outputStream);
outputStream.flush();
outputStream.close();
}catch (IOException e){
logger.error(e.getMessage());
throw new PlatformRuntimeException(DataPoolError.FILE_DOWNLOAD_ERROR);
}
}
@Override
public AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(AtuScriptInputSetQuoteFieldDto fieldDto) {
AtuScriptInputSetQuoteFieldDto dto = dataSetEnvRelService.selectDataUrlAndTreeName(fieldDto);
if (null!=dto){
//拼接path
int row = fieldDto.getRow() + 1;
String path = dto.getFullName() + ":" + dto.getName() + "." + fieldDto.getColumn() + ".[" + row + "]";
//获取最新value
if (StringUtils.hasText(dto.getPath())){
JSONObject jsonObject = downloadFile(dto.getPath());
try{
logger.info("脚本文件内容jsonobject:{}",jsonObject.toJSONString());
DataSetsSaveDto dataSetsSaveDto = jsonObject.toJavaObject(DataSetsSaveDto.class);
Map<String, List<DataContentDto>> tableContent = dataSetsSaveDto.getTableContent();
dto.setValue(tableContent.get(fieldDto.getColumn()).get(fieldDto.getRow()).getValue());
}catch (Exception e){
dto.setValue(null);
logger.error("文件下载转换异常e,{}",e);
}
}
dto.setPath(path);
}
return dto;
}
@Override
public Map<String, AtuScriptInputSetQuoteFeignDto> getDataSetFile(AtuDataSetFeignDto dto) {
Map<String, AtuScriptInputSetQuoteFeignDto> resultMap = new HashMap<>();
List<String> list = new ArrayList<>(dto.getDataSetList());
List<AtuScriptInputSetQuoteFeignDto> dataSetList = dataSetEnvRelService.getDataSetFile(list, dto.getEnvId());
if (dataSetList != null && dataSetList.size()>0) {
for (AtuScriptInputSetQuoteFeignDto fieldDto : dataSetList) {
resultMap.put(fieldDto.getSetId(),fieldDto);
}
}
return resultMap;
}
private XSSFWorkbook getXSSFWorkbook(DataSetEnvRelQueryDto dataSetEnvRelQueryDto) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("sheet1");
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
XSSFCell cell = null;
List<String> tableHeaders = dataSetEnvRelQueryDto.getTableHeaders();
List<Map<String, Object>> tableContent = dataSetEnvRelQueryDto.getTableContent();
if (null != tableHeaders && tableHeaders.size() > 0) {
//表头填充
XSSFRow row = sheet.createRow(0);
for (int i = 0; i < tableHeaders.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(tableHeaders.get(i));
cell.setCellStyle(cellStyle);
}
if (null != tableContent && tableContent.size() > 0) {
//表体填充
for (int i = 1; i <= tableContent.size(); i++) {
XSSFRow xssfRow = sheet.createRow(i);
for (int j = 0; j < tableHeaders.size(); j++) {
cell = xssfRow.createCell(j);
Object obj = tableContent.get(i - 1).get(tableHeaders.get(j));
if (obj != null) {
cell.setCellValue(obj.toString());
} else {
cell.setCellValue("");
}
cell.setCellStyle(cellStyle);
}
}
}
}
return workbook;
}
private void setResponseHeader(HttpServletResponse response) {
try {
String fileName="导出数据集名称";
fileName= URLEncoder.encode(fileName,"utf8");
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
}catch (Exception e){
logger.error(e.getMessage());
}
}
/**
* url
* @param url
* @return
*/
private JSONObject downloadFile(String url) {
String[] resultPath = pathUtils.idToPath(url);
InputStream inputStream = null;
JSONObject scriptData = null;
try {
inputStream = simpleStorageService.downloadAsStream(resultPath[0], "/" + resultPath[1]);
scriptData = pathUtils.getFileContent(inputStream, JSONObject.class);
return scriptData;
} catch (FileDownloadException e) {
logger.error("读取原文件失败,失败原因:", e);
throw new PlatformRuntimeException(DataPoolError.FILE_DOWNLOAD_ERROR);
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
logger.error("",e);
}
}
}
}
/**
*
* @param scriptJsonStr
* @return
*/
private String uploadFile(Object scriptJsonStr, String objId, FileBusinessTypeEnum businessCode) {
File file = pathUtils.objectToJsonFile(scriptJsonStr);
try {
NKFile nkFile = simpleStorageService.upload(NKSecurityContext.getTenantId(), file, objId, businessCode);
String path = pathUtils.pathToId(NKSecurityContext.getTenantId(), nkFile.getId());
return path;
} catch (FileUploadException e) {
logger.error("上传文件出错", e);
throw new PlatformRuntimeException(DataPoolError.FILE_UPLOAD_ERROR);
} finally {
boolean delete = file.delete();
if (!delete) {
logger.error("删除文件失败");
}
}
}
private List<DataSetsSaveDto> dataSetListSeq(List<String> envList,List<DataSetsSaveDto> dtoList){
List<DataSetsSaveDto> resultList = new ArrayList<>();
for (String envId : envList) {
for (DataSetsSaveDto dataSetsSaveDto : dtoList) {
if (dataSetsSaveDto.getEnvId().equals(envId)){
resultList.add(dataSetsSaveDto);
}
}
}
return resultList;
}
@Override
public DataSetsSaveDto importExcel(MultipartFile file, String dataSetId, String envId, String tableHeader) {
DataSetsSaveDto dataSetsSaveDto = new DataSetsSaveDto();
if (file.isEmpty()) {
throw new PlatformRuntimeException(DataPoolError.FILE_IS_NULL);
}
String name = file.getOriginalFilename();
String[] tableHeaders = new String[0];
int length = 0;
if (tableHeader != null && !tableHeader.equals("")) {
tableHeaders = tableHeader.split(",");
length = tableHeaders.length;
}
if (name != null && !name.equals("")) {
//表头信息列表
String subStr = name.substring(name.lastIndexOf("."));
if (subStr.equals(DataPoolConstant.FILE_XLS)) {
dataSetsSaveDto = analysisExcelByXLS(file, length);
} else if (subStr.equals(DataPoolConstant.FILE_XLSX)) {
dataSetsSaveDto = analysisExcelByXLSX(file, length);
} else {
throw new PlatformRuntimeException(DataPoolError.FILE_IS_NOT_EXCEL);
}
} else {
throw new PlatformRuntimeException(DataPoolError.FILE_NAME_IS_NULL);
}
int excelSize = dataSetsSaveDto.getTableHeader().size();
if (length > excelSize) {
throw new PlatformRuntimeException(DataPoolError.TABLE_HEADER_SIZE_UNEQULE);
}
for (int i = 0; i < length; i++) {
//校验是否一致
String dto = tableHeaders[i];
DataHeaderDto headerDto = dataSetsSaveDto.getTableHeader().get(i);
if (!headerDto.getName().equals(dto)) {
throw new PlatformRuntimeException(DataPoolError.TABLE_HEADER_NAME_ERROR, i + 1, headerDto.getName(), dto);
}
}
dataSetsSaveDto.setEnvId(envId);
String envName = envNameUtils.getEnvName(envId);
dataSetsSaveDto.setEnvName(envName);
dataSetsSaveDto.setDataSetId(dataSetId);
return dataSetsSaveDto;
}
private DataSetsSaveDto analysisExcelByXLSX(MultipartFile file,Integer headerSize) {
DataSetsSaveDto resultDto = new DataSetsSaveDto();
List<DataHeaderDto> excelHeaders = new ArrayList<>();
Map<String, List<DataContentDto>> excelMap = new HashMap<>();
XSSFWorkbook sheets = null;
try {
sheets = new XSSFWorkbook(file.getInputStream());
} catch (IOException e) {
throw new PlatformRuntimeException(DataPoolError.EXCEL_FILE_READ_ERROR);
}
//获取表头信息
XSSFSheet sheet = sheets.getSheetAt(0);
if (sheet == null) {
throw new PlatformRuntimeException(DataPoolError.EXCEL_FISRT_SHEET_NULL);
}
XSSFRow rowHeader = sheet.getRow(0);
Boolean checkTableHeader = false;
if (rowHeader != null) {
if (headerSize.equals(0)) {
checkTableHeader = true;
headerSize = Integer.parseInt(String.valueOf(rowHeader.getLastCellNum()));
}
for (int i = 0; i < headerSize; i++) {
XSSFCell cell = rowHeader.getCell(i);
if (cell != null && cell.getCellType() != CellType.BLANK) {
cell.setCellType(CellType.STRING);
DataHeaderDto headerDto = new DataHeaderDto();
headerDto.setName(cell.getStringCellValue());
excelHeaders.add(headerDto);
} else {
throw new PlatformRuntimeException(DataPoolError.EXCEL_HEADER_IS_NULL);
}
}
if (checkTableHeader) {
if (excelHeaders.size() > 1) {
checkTableHeader(excelHeaders);
}
}
//组装表体数据
int rowNum = sheet.getLastRowNum() + 1;
for (int i = 1; i < rowNum; i++) {
XSSFRow row = sheet.getRow(i);
for (int j = 0; j < headerSize; j++) {
String headerName = excelHeaders.get(j).getName();
List<DataContentDto> dtoList = excelMap.get(headerName);
if (dtoList == null || dtoList.size() == 0) {
dtoList = new ArrayList<>();
}
XSSFCell cell = row.getCell(j);
DataContentDto contentDto = new DataContentDto();
if (cell == null) {
contentDto.setValue(null);
} else if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
contentDto.setValue(sdf.format(cell.getDateCellValue()));
} else {
cell.setCellType(CellType.STRING);
contentDto.setValue(cell.getStringCellValue());
}
dtoList.add(contentDto);
excelMap.put(headerName, dtoList);
}
}
}
resultDto.setTableHeader(excelHeaders);
resultDto.setTableContent(excelMap);
return resultDto;
}
private DataSetsSaveDto analysisExcelByXLS(MultipartFile file,Integer headerSize) {
DataSetsSaveDto resultDto = new DataSetsSaveDto();
List<DataHeaderDto> excelHeaders = new ArrayList<>();
Map<String, List<DataContentDto>> excelMap = new HashMap<>();
HSSFWorkbook sheets = null;
try {
sheets = new HSSFWorkbook(file.getInputStream());
} catch (IOException e) {
throw new PlatformRuntimeException(DataPoolError.EXCEL_FILE_READ_ERROR);
}
//获取表头信息
HSSFSheet sheet = sheets.getSheetAt(0);
if (sheet == null) {
throw new PlatformRuntimeException(DataPoolError.EXCEL_FISRT_SHEET_NULL);
}
HSSFRow rowHeader = sheet.getRow(0);
Boolean checkTableHeader = false;
if (rowHeader != null) {
if (headerSize.equals(0)) {
//校验表头是否存在重复数据
checkTableHeader = true;
headerSize = Integer.parseInt(String.valueOf(rowHeader.getLastCellNum()));
}
for (int i = 0; i < headerSize; i++) {
HSSFCell cell = rowHeader.getCell(i);
if (cell != null && cell.getStringCellValue() != null) {
cell.setCellType(CellType.STRING);
DataHeaderDto headerDto = new DataHeaderDto();
headerDto.setName(cell.getStringCellValue());
excelHeaders.add(headerDto);
} else {
throw new PlatformRuntimeException(DataPoolError.EXCEL_HEADER_IS_NULL);
}
}
if (checkTableHeader) {
if (excelHeaders.size() > 1) {
checkTableHeader(excelHeaders);
}
}
//组装表体数据
int rowNum = sheet.getLastRowNum() + 1;
for (int i = 1; i < rowNum; i++) {
HSSFRow row = sheet.getRow(i);
for (int j = 0; j < headerSize; j++) {
String headerName = excelHeaders.get(j).getName();
List<DataContentDto> dtoList = excelMap.get(headerName);
if (dtoList == null || dtoList.size() == 0) {
dtoList = new ArrayList<>();
}
HSSFCell cell = row.getCell(j);
DataContentDto contentDto = new DataContentDto();
if (cell == null) {
contentDto.setValue(null);
} else if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
contentDto.setValue(sdf.format(cell.getDateCellValue()));
} else {
cell.setCellType(CellType.STRING);
contentDto.setValue(cell.getStringCellValue());
}
dtoList.add(contentDto);
excelMap.put(headerName, dtoList);
}
}
}
resultDto.setTableHeader(excelHeaders);
resultDto.setTableContent(excelMap);
return resultDto;
}
private void checkTableHeader(List<DataHeaderDto> excelHeaders){
List<String> nameList = new ArrayList<>();
for (DataHeaderDto excelHeader : excelHeaders) {
String headerName = excelHeader.getName();
if (nameList.contains(headerName)){
throw new PlatformRuntimeException(DataPoolError.EXCEL_HEADER_HAS_SAME);
}
nameList.add(headerName);
}
}
}

View File

@ -0,0 +1,64 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import java.util.List;
/**
* Restful
* @author maven-cctp-plugin
* @since 1.0
*/
public interface DataSetTreeApiService extends ExcelService
{
/**
*
*
* @param dto
* @return
*/
String add(DataSetTreeAddDto dto);
/**
*
*
* @param dto
* @return
*/
Integer updateByPK(DataSetTreeUpdateDto dto) throws IllegalAccessException;
/**
*
* @param uuid
* @return
*/
Integer deleteByPK(String uuid);
/**
*
* @param dto
* @return
*/
List<DataSetTreeDetailDto> queryDataSetTreeByParentId(DataSetTreeQueryDto dto);
/**
*
* @param dto
* @return
*/
List<DataSetTreeDetailDto> queryDataSetTreeByName(DataSetTreeQueryDto dto);
/**
*
* @param dto
* @return
*/
Integer moveDataSetTree(DataSetTreeMoveDto dto);
}

View File

@ -0,0 +1,542 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import net.northking.cctp.common.cache.EntityNameCache;
import net.northking.cctp.common.cache.EntityNameCatalog;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.db.annotation.DatabaseReadOnly;
import net.northking.cctp.common.db.excel.AbstractExcelService;
import net.northking.cctp.common.db.excel.ExcelHeader;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.util.UUIDUtil;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import net.northking.cctp.dataPool.db.entity.DataSets;
import net.northking.cctp.dataPool.db.service.DataSetTreeService;
import net.northking.cctp.dataPool.db.service.DataSetsService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import net.northking.cctp.dataPool.enums.DataPoolError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
*
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Service
@ConditionalOnMissingBean(name = "DataSetTreeApiServiceImpl")
public class DataSetTreeApiServiceImpl extends AbstractExcelService<DataSetTree> implements DataSetTreeApiService
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetTreeApiServiceImpl.class);
@Autowired
private DataSetTreeService dataSetTreeService;
@Autowired
private DataSetsService dataSetService;
@Autowired
private TreeIndexNoApiService treeIndexNoApiService;
@Autowired
private EntityNameCache entityNameCache;
//= Excel 导入导出相关代码 start ==================//
@Override
public BasicService<DataSetTree> getService()
{
return this.dataSetTreeService;
}
@Override
public ExcelHeader[] excelHeaders()
{
ExcelHeader id = new ExcelHeader("id", "id", String.class);
ExcelHeader name = new ExcelHeader("节点名称", "name", String.class);
ExcelHeader parentId = new ExcelHeader("父节点id", "parentId", String.class);
ExcelHeader levelNo = new ExcelHeader("层级", "levelNo", Integer.class);
ExcelHeader indexNo = new ExcelHeader("序号", "indexNo", Integer.class);
ExcelHeader isLeaf = new ExcelHeader("是否叶子节点", "isLeaf", String.class);
ExcelHeader path = new ExcelHeader("路径", "path", String.class);
ExcelHeader fullName = new ExcelHeader("完整路径", "fullName", String.class);
ExcelHeader proId = new ExcelHeader("系统id", "proId", String.class);
ExcelHeader tenantId = new ExcelHeader("租户id", "tenantId", String.class);
ExcelHeader createdBy = new ExcelHeader("创建人", "createdBy", String.class);
ExcelHeader createdTime = new ExcelHeader("创建时间", "createdTime", Date.class);
ExcelHeader updatedBy = new ExcelHeader("更新人", "updatedBy", String.class);
ExcelHeader updatedTime = new ExcelHeader("更新时间", "updatedTime", Date.class);
return new ExcelHeader[]{};
}
/**
* Excel
* @param records Excel
* @return
*/
@Override
protected List<DataSetTree> beforeInsertBatch(List<DataSetTree> records)
{
for (DataSetTree record : records)
{
record.setId(UUIDUtil.create32UUID());
}
return records;
}
/**
* Excel<br>
*
*
* @param record
* @return Excel
*/
@Override
protected DataSetTree beforeWriteExcel(DataSetTree record)
{
return record;
}
//= Excel 导入导出相关代码 end =======================//
//= 增删改查 相关代码 start ==================//
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public String add(DataSetTreeAddDto dto)
{
//判断名字是否包括/或者\
if (dto.getName().contains("/") || dto.getName().contains("\\")) {
throw new PlatformRuntimeException(DataPoolError.TREE_NAME_VALID);
}
//设置根节点目录
if (dto.isAddRootNode() || !StringUtils.hasText(dto.getParentId())) {
dto.setParentId("0");
}
//获取父id,如果是根目录则父id为0
String pid = dto.getParentId();
//查询父节点信息
DataSetTree dataSetTree = new DataSetTree();
dataSetTree.setId(pid);
DataSetTree byPKParent = dataSetTreeService.findByPrimaryKey(dataSetTree);
//设置根节点的父节点
if (byPKParent == null) {
byPKParent = new DataSetTree();
byPKParent.setId("0");
byPKParent.setName("");
byPKParent.setLevelNo(0);
byPKParent.setPath("0");
byPKParent.setFullName("");
byPKParent.setParentId("-1");
byPKParent.setIsLeaf("0");
}
//非根目录创建
//1.判断父节点是否存在数据集
if (!"0".equals(pid)) {
DataSets tempSet = new DataSets();
tempSet.setTreeId(byPKParent.getId());
List<DataSets> existSets = dataSetService.query(tempSet);
if (!CollectionUtils.isEmpty(existSets)) {
throw new PlatformRuntimeException(DataPoolError.TREE_ADD_DATA_EXISTS);
}
}
//2.限制最多十级目录
if (byPKParent.getLevelNo() - 10 >= 0) {
throw new PlatformRuntimeException(DataPoolError.TREE_LEVEL_LIMIT);
}
//3.判断同级是否存在重名目录
DataSetTree setTree = new DataSetTree();
setTree.setParentId(pid);
setTree.setName(dto.getName());
setTree.setProId(dto.getProId());
List<DataSetTree> setTrees = dataSetTreeService.query(setTree);
if (!CollectionUtils.isEmpty(setTrees)) {
throw new PlatformRuntimeException(DataPoolError.TREE_NAME_EXISTS);
}
//5.插入节点至数据库
String uuid = UUIDUtil.create32UUID();
DataSetTree newTree = new DataSetTree();
BeanUtils.copyProperties(dto,newTree);
newTree.setId(uuid);
newTree.setIsLeaf("1");
newTree.setCreatedBy(NKSecurityContext.getUserId());
newTree.setCreatedTime(new Date());
newTree.setUpdatedBy(newTree.getCreatedBy());
newTree.setUpdatedTime(newTree.getCreatedTime());
//新增根节点目录
if ("0".equals(dto.getParentId())) {
newTree.setPath(uuid);
newTree.setFullName(dto.getName());
newTree.setLevelNo(1);
} else { //新增非根节点目录
newTree.setLevelNo(byPKParent.getLevelNo()+1);
newTree.setPath(byPKParent.getPath() + "/" + uuid);
newTree.setFullName(byPKParent.getFullName() + "/" + dto.getName());
//6.如果父节点是叶子节点更新父节点
if ("1".equals(byPKParent.getIsLeaf())) {
DataSetTree newParent = new DataSetTree();
newParent.setId(dto.getParentId());
newParent.setIsLeaf("0");
newParent.setUpdatedBy(NKSecurityContext.getUserId());
newParent.setUpdatedTime(newTree.getCreatedTime());
newParent.setTenantId(byPKParent.getTenantId());
dataSetTreeService.updateByPrimaryKey(newParent);
}
}
//获取排序值
Integer seq = treeIndexNoApiService.genIndexNo(dto.getProId(), "ATU_DATA_MGR", 1L).get(0);
newTree.setIndexNo(seq);
newTree.setTenantId(NKSecurityContext.getTenantId());
dataSetTreeService.insert(newTree);
return uuid;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer updateByPK(DataSetTreeUpdateDto dto) throws IllegalAccessException
{
String newName = dto.getName();
//判断目录名是否包括/或者\
if (newName.contains("/") || newName.contains("\\")) {
throw new PlatformRuntimeException(DataPoolError.TREE_NAME_VALID);
}
//获取待改目录节点信息
DataSetTree byPrimaryKey = dataSetTreeService.findByPrimaryKey(dto.getId());
if (null == byPrimaryKey) {
throw new PlatformRuntimeException(DataPoolError.TREE_NO_EXISTS);
}
//获取同级目录节点信息
DataSetTree tree = new DataSetTree();
tree.setParentId(byPrimaryKey.getParentId());
tree.setName(dto.getName());
tree.setProId(byPrimaryKey.getProId());
List<DataSetTree> broNodes = dataSetTreeService.query(tree);
if (!CollectionUtils.isEmpty(broNodes) && !broNodes.get(0).getId().equals(dto.getId())) {
throw new PlatformRuntimeException(DataPoolError.TREE_NAME_EXISTS);
}
//更新数据库数据
DataSetTree tempTree = new DataSetTree();
BeanUtils.copyProperties(dto,tempTree);
tempTree.setUpdatedBy(NKSecurityContext.getUserId());
tempTree.setUpdatedTime(new Date());
//更新namePath
String namePath = byPrimaryKey.getFullName();
String namePathNew = "";
DataSetTree childSetTrees = new DataSetTree();
childSetTrees.setProId(byPrimaryKey.getProId());
childSetTrees.setFullName(namePath);
//更新根节点名称路径
if ("0".equals(byPrimaryKey.getParentId())) {
namePathNew = dto.getName();
}else {
//更新非根节点名称路径
String[] nameArr = namePath.split("/");
namePathNew = nameArr[0];
for (int i = 1; i < nameArr.length - 1; i++) {
namePathNew = namePathNew + "/" + nameArr[i];
}
namePathNew = namePathNew + "/" + dto.getName();
}
tempTree.setFullName(namePathNew);
tempTree.setTenantId(byPrimaryKey.getTenantId());
int total = dataSetTreeService.updateByPrimaryKey(tempTree);
//同步修改所有子级节点
total+= dataSetTreeService.updateChildNamePath(childSetTrees,namePathNew);
return total;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer deleteByPK(String uuid)
{
DataSetTree byPrimaryKey = dataSetTreeService.findByPrimaryKey(uuid);
if (null == byPrimaryKey) {
return 0;
}
//判断节点是否为叶子结点
if ("0".equals(byPrimaryKey.getIsLeaf())) {
throw new PlatformRuntimeException(DataPoolError.TREE_DEL_DIR_EXISTS);
}
//判断所选目录是否有脚本
DataSets tempSet = new DataSets();
tempSet.setTreeId(uuid);
List<DataSets> sets = dataSetService.query(tempSet);
if (!CollectionUtils.isEmpty(sets)) {
throw new PlatformRuntimeException(DataPoolError.TREE_DEL_DATA_EXISTS);
}
//删除数据库数据
int res = dataSetTreeService.deleteByPrimaryKey(uuid);
//查询父目录是否含有其他子目录
DataSetTree setTree = new DataSetTree();
setTree.setParentId(byPrimaryKey.getParentId());
List<DataSetTree> childrenNodes = dataSetTreeService.query(setTree);
//无子目录时需改为叶子结点
if (CollectionUtils.isEmpty(childrenNodes)) {
DataSetTree newParent = new DataSetTree();
newParent.setId(byPrimaryKey.getParentId());
newParent.setIsLeaf("1");
newParent.setUpdatedBy(NKSecurityContext.getUserId());
newParent.setUpdatedTime(new Date());
dataSetTreeService.updateByPrimaryKey(newParent);
}
return res;
}
@Override
@DatabaseReadOnly
public List<DataSetTreeDetailDto> queryDataSetTreeByParentId(DataSetTreeQueryDto dto) {
List<DataSetTreeDetailDto> result = new ArrayList<>();
//根据父节点查询所有子级节点
if(!StringUtils.isEmpty(dto.getParentId())){
DataSetTreeQueryDto setTreeQueryDto = new DataSetTreeQueryDto();
setTreeQueryDto.setProIds(dto.getProIds());
setTreeQueryDto.setParentId(dto.getParentId());
//租户隔离
setTreeQueryDto.setTenantId(NKSecurityContext.getTenantId());
result = dataSetTreeService.selectDataSetTree(setTreeQueryDto);
for (DataSetTreeDetailDto dataSetTreeDetailDto : result) {
dataSetTreeDetailDto.setIdx(dataSetTreeDetailDto.getIndexNo());
}
}else{
//最外层为系统信息数组
for (String projectId : dto.getProIds()) {
DataSetTreeDetailDto detailDto = new DataSetTreeDetailDto();
detailDto.setId(projectId);
detailDto.setParentId("");
detailDto.setProId(projectId);
detailDto.setName(entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(),projectId));
detailDto.setIsLeaf("0");
detailDto.setLevelNo(0);
result.add(detailDto);
}
}
return result;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer moveDataSetTree(DataSetTreeMoveDto dto) {
DataSetTree oldNode = dataSetTreeService.findByPrimaryKey(dto.getId());
DataSetTree tempTree = new DataSetTree();
if("0".equals(dto.getTargetId())) {
tempTree.setId("0");
tempTree.setLevelNo(0);
tempTree.setIsLeaf("0");
tempTree.setFullName("");
}else {
tempTree = dataSetTreeService.findByPrimaryKey(dto.getTargetId());
}
//判断拖拽后是否层数超过10级
Integer targetLevel = tempTree.getLevelNo();
DataSetTree queryLevel = new DataSetTree();
queryLevel.setId(oldNode.getId());
queryLevel.setProId(oldNode.getProId());
int maxLevel = dataSetTreeService.countMaxLevelNo(queryLevel);
int myMaxLevel = maxLevel - oldNode.getLevelNo() + 1;
if ((targetLevel + myMaxLevel) > 10) {
throw new PlatformRuntimeException(DataPoolError.TREE_LEVEL_LIMIT);
}
int levelNo = tempTree.getLevelNo()-oldNode.getLevelNo()+1;
if(dto.getOrderSeq()==null) {
dto.setOrderSeq(0);
}
//校验是否同名
DataSetTree check = new DataSetTree();
check.setName(oldNode.getName());
check.setParentId(tempTree.getId());
check.setProId(dto.getProId());
List<DataSetTree> sameSets = dataSetTreeService.query(check);
if(!CollectionUtils.isEmpty(sameSets) && !oldNode.getParentId().equals(tempTree.getId())){
throw new PlatformRuntimeException(DataPoolError.TREE_NAME_EXISTS);
}
//校验是否目标节点为非叶子节点并存在用例
DataSets exitElement = new DataSets();
exitElement.setProId(dto.getProId());
exitElement.setTreeId(tempTree.getId());
if ("1".equals(tempTree.getIsLeaf()) && !CollectionUtils.isEmpty(dataSetService.query(exitElement))) {
throw new PlatformRuntimeException(DataPoolError.TREE_MOVE_DATA_EXISTS);
}
//更新节点以及子节点
DataSetTree treeUp = new DataSetTree();
treeUp.setId(oldNode.getId());
treeUp.setParentId(tempTree.getId());
treeUp.setTenantId(oldNode.getTenantId());
dataSetTreeService.updateByPrimaryKey(treeUp);
String targetIdPath = StringUtils.hasText(tempTree.getPath()) ? (tempTree.getPath()+"/") : "";
String targetNamePath = StringUtils.hasText(tempTree.getFullName()) ? (tempTree.getFullName()+"/") : "";
treeUp.setPath(targetIdPath+oldNode.getId());
treeUp.setFullName(targetNamePath+oldNode.getFullName());
//更改顺序号
DataSetTreeMoveDto childUp = new DataSetTreeMoveDto();
childUp.setOrderSeq(dto.getOrderSeq());
childUp.setProId(dto.getProId());
treeIndexNoApiService.genIndexNo(dto.getProId(), "ATU_DATA_MGR", 1L);
dataSetTreeService.updateSeqByMove(childUp);
//替换移动节点的排序号
DataSetTree treeUpOrder = new DataSetTree();
treeUpOrder.setId(oldNode.getId());
treeUpOrder.setIndexNo(dto.getOrderSeq()+1);
treeUpOrder.setTenantId(oldNode.getTenantId());
dataSetTreeService.updateByPrimaryKey(treeUpOrder);
//子节点更改路径
DataSetTree child = new DataSetTree();
BeanUtils.copyProperties(childUp,child);
child.setProId(oldNode.getProId());
child.setFullName(oldNode.getFullName());
child.setPath(oldNode.getPath());
child.setLevelNo(levelNo);
//不再维护namePath,长度不够
dataSetTreeService.updateChildIdPath(child,treeUp.getPath());
//修改原父节点以及现父节点的叶子节点标识
if("1".equals(tempTree.getIsLeaf())){
DataSetTree itemTreeUp = new DataSetTree();
itemTreeUp.setId(tempTree.getId());
itemTreeUp.setIsLeaf("0");
itemTreeUp.setTenantId(tempTree.getTenantId());
dataSetTreeService.updateByPrimaryKey(itemTreeUp);
}
DataSetTree oldFaCount = new DataSetTree();
oldFaCount.setParentId(oldNode.getParentId());
if(CollectionUtils.isEmpty(dataSetTreeService.query(oldFaCount))){
DataSetTree oldTreeUp = new DataSetTree();
oldTreeUp.setId(oldNode.getParentId());
oldTreeUp.setIsLeaf("1");
dataSetTreeService.updateByPrimaryKey(oldTreeUp);
}
return 1;
}
@Override
public List<DataSetTreeDetailDto> queryDataSetTreeByName(DataSetTreeQueryDto dto) {
DataSetTreeQueryDto queryDto = new DataSetTreeQueryDto();
queryDto.setName(dto.getName());
queryDto.setProIds(dto.getProIds());
List<DataSetTreeDetailDto> setTreeList = dataSetTreeService.selectDataSetTree(queryDto);
if (setTreeList.size()<1) {
//无数据时多系统也需再包装一层系统级信息
if(dto.isMoreProject()) {
return setProjectTop(setTreeList, dto.getProIds(), dto.getName());
}else {
return setTreeList;
}
}
Map<String, DataSetTreeDetailDto> treeMap = getTreeMap(setTreeList);
List<DataSetTreeDetailDto> detailDtos = new ArrayList<>();
for (String treeId : treeMap.keySet()) {
detailDtos.add(treeMap.get(treeId));
}
List<DataSetTreeDetailDto> treeList = getTreeList(detailDtos);
List<DataSetTreeDetailDto> resList = treeList.stream().sorted(Comparator.comparing(DataSetTreeDetailDto::getIndexNo)).collect(Collectors.toList());
//多系统包装最外层系统信息
if(dto.isMoreProject()){
return setProjectTop(resList,dto.getProIds(),dto.getName());
}
return resList;
}
private Map<String, DataSetTreeDetailDto> getTreeMap(List<DataSetTreeDetailDto> allList) {
Map<String, DataSetTreeDetailDto> treeMap = new HashMap<>();
List<String> list = new ArrayList<>();
//查询包含的树节点id
for (int i = 0; i < allList.size(); i++) {
DataSetTreeDetailDto detailDto = allList.get(i);
String[] paths = detailDto.getPath().split("/");
List<String> ids = new ArrayList<>(Arrays.asList(paths));
list.addAll(ids);
}
list = list.stream().distinct().collect(Collectors.toList());
List<DataSetTree> treeList = dataSetTreeService.queryByIds(list);
for (DataSetTree dataSetTree : treeList) {
DataSetTreeDetailDto detailDto = new DataSetTreeDetailDto();
BeanUtils.copyProperties(dataSetTree,detailDto);
detailDto.setIdx(dataSetTree.getIndexNo());
if (!treeMap.containsKey(dataSetTree.getId())) {
treeMap.put(dataSetTree.getId(),detailDto);
}
}
return treeMap;
}
private List<DataSetTreeDetailDto> getTreeList(List<DataSetTreeDetailDto> dtoList) {
List<DataSetTreeDetailDto> treeList = new ArrayList<>();
for (int i = 0; i < dtoList.size(); i++) {
DataSetTreeDetailDto tree = dtoList.get(i);
//根节点生成对应树列表
if("0".equals(tree.getParentId())){
getSonTree(tree,dtoList);
treeList.add(tree);
}
}
return treeList;
}
private void getSonTree(DataSetTreeDetailDto tree, List<DataSetTreeDetailDto> dtoList) {
List<DataSetTreeDetailDto> sonList = new ArrayList<>();
for (DataSetTreeDetailDto dto : dtoList) {
if(tree.getId().equals(dto.getParentId())){
getSonTree(dto,dtoList);
sonList.add(dto);
}
}
List<DataSetTreeDetailDto> reSonList = sonList.stream().sorted(Comparator.comparing(DataSetTreeDetailDto::getIndexNo)).collect(Collectors.toList());
tree.setChildren(reSonList);
}
private List<DataSetTreeDetailDto> setProjectTop(List<DataSetTreeDetailDto> reList,List<String> projectIds,String name){
List<DataSetTreeDetailDto> result = new ArrayList<>();
Map<String,List<DataSetTreeDetailDto>> tool = new HashMap<>();
for (DataSetTreeDetailDto oneTree : reList) {
if (tool.containsKey(oneTree.getProId())){
tool.get(oneTree.getProId()).add(oneTree);
}else{
List<DataSetTreeDetailDto> list = new ArrayList<>();
list.add(oneTree);
tool.put(oneTree.getProId(),list);
}
}
//无系统查全部
if (CollectionUtils.isEmpty(projectIds)) {
projectIds = new ArrayList<>();
projectIds.addAll(tool.keySet());
}
for (String projectId : projectIds) {
String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(), projectId);
//系统展示条件1.有符合条件目录 2.无关键字筛选则都需展示 3. 有关键字筛选名称含关键字系统
if(tool.containsKey(projectId) ||!StringUtils.hasText (name) || (StringUtils.hasText(name) && projectName.contains(name))){
DataSetTreeDetailDto one = new DataSetTreeDetailDto();
one.setId(projectId);
one.setIsLeaf("0");
one.setName(projectName);
one.setLevelNo(0);
one.setParentId("");
one.setProId(projectId);
one.setChildren(tool.get(projectId));
//无子树则为叶子结点
if (CollectionUtils.isEmpty(one.getChildren())) {
one.setIsLeaf("1");
}
result.add(one);
}
}
return result;
}
}

View File

@ -0,0 +1,105 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.dto.dataSets.*;
import javax.servlet.http.HttpServletResponse;
/**
* Restful
* @author maven-cctp-plugin
* @since 1.0
*/
public interface DataSetsApiService extends ExcelService
{
/**
*
*
* @param queryByPage
* @return
*/
Pagination<DataSetsDetailDto> pagingQuery(QueryByPage<DataSetsQueryDto> queryByPage);
/**
*
*
* @param dto
* @return
*/
String add(DataSetsAddDto dto);
/**
*
*
* @param dto
* @return
*/
Integer updateByPK(DataSetsUpdateDto dto) throws IllegalAccessException;
/**
*
* @param uuid
* @return
*/
DataSetsDetailDto findByPK(String uuid);
/**
*
* @param uuid
* @return
*/
Integer deleteByPK(String uuid);
/**
*
*
* @param dto
* @return
*/
Integer deleteBatch(DataSetsDeleteDto dto);
/**
*
* @param dto
* @return
*/
Boolean save(DataSetsSaveDto dto);
/**
*
* @param dto
* @return
*/
Boolean checkTableHeader(ColumnCheckDto dto);
/**
*
* @param response
* @param dataSetId
* @param fileName
*/
void exportDataSet(HttpServletResponse response, String dataSetId, String fileName);
/**
*
* @param response
* @param fileName
* @param saveDto
*/
void downloadTemplate(HttpServletResponse response, String fileName, DataSetsSaveDto saveDto);
/**
*
* @param inputDto
* @return
*/
String createDataSet(DataSetsAddDto inputDto);
}

View File

@ -0,0 +1,765 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.api.dataSets.service;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import net.northking.cctp.common.cache.EntityNameCache;
import net.northking.cctp.common.cache.EntityNameCatalog;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.db.DefaultPagination;
import net.northking.cctp.common.db.OrderBy;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.annotation.DatabaseReadOnly;
import net.northking.cctp.common.db.excel.AbstractExcelService;
import net.northking.cctp.common.db.excel.ExcelHeader;
import net.northking.cctp.common.dto.CpLogAddDto;
import net.northking.cctp.common.enums.FileBusinessTypeEnum;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.feign.MonsterLogServer;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.common.s3.FileDownloadException;
import net.northking.cctp.common.s3.FileUploadException;
import net.northking.cctp.common.s3.NKFile;
import net.northking.cctp.common.s3.SimpleStorageService;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.util.UUIDUtil;
import net.northking.cctp.dataPool.bus.LogRabbitMQPublisher;
import net.northking.cctp.dataPool.db.entity.DataSetEnvRel;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import net.northking.cctp.dataPool.db.entity.DataSets;
import net.northking.cctp.dataPool.db.service.DataSetEnvRelService;
import net.northking.cctp.dataPool.db.service.DataSetTreeService;
import net.northking.cctp.dataPool.db.service.DataSetsService;
import net.northking.cctp.dataPool.dto.dataSets.*;
import net.northking.cctp.dataPool.enums.DataHeaderType;
import net.northking.cctp.dataPool.enums.DataPoolError;
import net.northking.cctp.dataPool.feign.AttachmentFeignClient;
import net.northking.cctp.dataPool.feign.ProjectFeignClient;
import net.northking.cctp.dataPool.feign.ScriptFeignClient;
import net.northking.cctp.dataPool.feign.dto.AtuInputDataSetResultDto;
import net.northking.cctp.dataPool.utils.ExcelUtils;
import net.northking.cctp.dataPool.utils.MinioPathUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
*
*
* @author maven-cctp-plugin
* @since 1.0
*/
@Service
@ConditionalOnMissingBean(name = "DataSetsApiServiceImpl")
public class DataSetsApiServiceImpl extends AbstractExcelService<DataSets> implements DataSetsApiService
{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(DataSetsApiServiceImpl.class);
@Autowired
private DataSetsService dataSetsService;
@Autowired
private DataSetTreeService dataSetTreeService;
@Autowired
private DataSetEnvRelService dataSetEnvRelService;
@Autowired
private MinioPathUtils pathUtils;
@Autowired
private SimpleStorageService simpleStorageService;
@Autowired
private EntityNameCache entityNameCache;
@Autowired
private LogRabbitMQPublisher logPublisher;
@Autowired
private ProjectFeignClient projectFeignClient;
@Autowired
private ScriptFeignClient scriptFeignClient;
@Autowired
private AttachmentFeignClient attachmentFeignClient;
//= Excel 导入导出相关代码 start ==================//
@Override
public BasicService<DataSets> getService()
{
return this.dataSetsService;
}
@Override
public ExcelHeader[] excelHeaders()
{
ExcelHeader dataSetId = new ExcelHeader("数据集id", "dataSetId", String.class);
ExcelHeader name = new ExcelHeader("数据集名称", "name", String.class);
ExcelHeader description = new ExcelHeader("描述", "description", String.class);
ExcelHeader proId = new ExcelHeader("系统id", "proId", String.class);
ExcelHeader tenantId = new ExcelHeader("租户id", "tenantId", String.class);
ExcelHeader fileAddr = new ExcelHeader("文件地址", "fileAddr", String.class);
ExcelHeader treeId = new ExcelHeader("目录id", "treeId", String.class);
ExcelHeader createdBy = new ExcelHeader("创建人", "createdBy", String.class);
ExcelHeader createdTime = new ExcelHeader("创建时间", "createdTime", Date.class);
ExcelHeader updatedBy = new ExcelHeader("更新人", "updatedBy", String.class);
ExcelHeader updatedTime = new ExcelHeader("更新时间", "updatedTime", Date.class);
return new ExcelHeader[]{};
}
/**
* Excel
* @param records Excel
* @return
*/
@Override
protected List<DataSets> beforeInsertBatch(List<DataSets> records)
{
return records;
}
/**
* Excel<br>
*
*
* @param record
* @return Excel
*/
@Override
protected DataSets beforeWriteExcel(DataSets record)
{
return record;
}
//= Excel 导入导出相关代码 end =======================//
//= 增删改查 相关代码 start ==================//
@Override
@DatabaseReadOnly
public Pagination<DataSetsDetailDto> pagingQuery(QueryByPage<DataSetsQueryDto> query)
{
DefaultPagination<DataSetsDetailDto> pagination = new DefaultPagination();
//目录查询参数修改
String treeId = query.getQuery().getTreeId();
if (StringUtils.hasText(treeId)) {
List<DataSetTreeDetailDto> list = dataSetTreeService.queryChildrenTreeList(treeId);
if (!CollectionUtils.isEmpty(list)) {
List<String> groupIds = list.stream().map(item->item.getId()).collect(Collectors.toList());
query.getQuery().setTreeId(null);
query.getQuery().setTreeIds(groupIds);
}
}
//数据集查询租户隔离
query.getQuery().setTenantId(NKSecurityContext.getTenantId());
//处理分页参数
handlePageParam(query);
pagination.setPageSize(query.getPageSize());
pagination.setPageNo(query.getPageNo());
Page<DataSetsDetailDto> page = PageMethod.startPage(query.getPageNo(), query.getPageSize()); //开始分页
List<DataSetsDetailDto> result = dataSetsService.queryDataSets(query);
//处理返回数据
for (DataSetsDetailDto detailDto : result) {
//创建修改人名称
detailDto.setCreator(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, detailDto.getCreatedBy()));
detailDto.setModifier(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, detailDto.getUpdatedBy()));
}
pagination.setRecords(result);
pagination.setRecordCount(page.getTotal());
return pagination;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public String add(DataSetsAddDto dto)
{
//名称校验
Pattern p = Pattern.compile("[\\\\/:*?\"<>|]");
if (p.matcher(dto.getName()).find()) {
throw new PlatformRuntimeException(DataPoolError.SET_NAME_IS_VALID);
}
//所选目录校验
DataSetTree byPrimaryKey = dataSetTreeService.findByPrimaryKey(dto.getTreeId());
if (null == byPrimaryKey || "0".equals(byPrimaryKey.getIsLeaf())) {
throw new PlatformRuntimeException(DataPoolError.SETS_DIR_VALID);
}
// 校验目录下名称唯一
boolean nameUnique = checkNameUnique(dto.getName(), dto.getTreeId(), null);
if (!nameUnique){
throw new PlatformRuntimeException(DataPoolError.SET_NAME_NO_UNIQUE, dto.getName());
}
//创建实体
String uuid = UUIDUtil.create32UUID();
DataSets entity = new DataSets();
BeanUtils.copyProperties(dto, entity);
entity.setDataSetId(uuid);
entity.setCreatedBy(NKSecurityContext.getUserId());
entity.setCreatedTime(new Date());
entity.setUpdatedBy(entity.getCreatedBy());
entity.setUpdatedTime(entity.getCreatedTime());
entity.setTenantId(NKSecurityContext.getTenantId());
this.dataSetsService.insert(entity);
return uuid;
}
private boolean checkNameUnique(String name, String treeId, String id){
DataSets dataSets = new DataSets();
dataSets.setName(name);
dataSets.setTreeId(treeId);
List<DataSets> setsList = this.dataSetsService.query(dataSets);
if (setsList != null && setsList.size() > 0){
DataSets sets = setsList.get(0);
if (!sets.getDataSetId().equals(id)){
return Boolean.FALSE;
}
}
return Boolean.TRUE;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer updateByPK(DataSetsUpdateDto dto) throws IllegalAccessException
{
//数据集存在性校验
DataSets byPrimaryKey = dataSetsService.findByPrimaryKey(dto.getDataSetId());
if (null == byPrimaryKey) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
//名称校验
Pattern p = Pattern.compile("[\\\\/:*?\"<>|]");
if (p.matcher(dto.getName()).find()) {
throw new PlatformRuntimeException(DataPoolError.SET_NAME_IS_VALID);
}
// 校验目录下名称唯一
boolean nameUnique = checkNameUnique(dto.getName(), dto.getTreeId(), dto.getDataSetId());
if (!nameUnique){
throw new PlatformRuntimeException(DataPoolError.SET_NAME_NO_UNIQUE, dto.getName());
}
DataSets entity = new DataSets();
BeanUtils.copyProperties(byPrimaryKey, entity);
entity.setUpdatedBy(NKSecurityContext.getUserId());
entity.setDescription(dto.getDescription());
entity.setUpdatedTime(new Date());
entity.setName(dto.getName());
return this.dataSetsService.updateByPrimaryKey(entity);
}
@Override
@DatabaseReadOnly
public DataSetsDetailDto findByPK(String uuid)
{
//获取数据集
DataSets byPrimaryKey = dataSetsService.findByPrimaryKey(uuid);
if (null == byPrimaryKey) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
DataSetsDetailDto dto = new DataSetsDetailDto();
BeanUtils.copyProperties(byPrimaryKey, dto);
//获取文件数据
if (StringUtils.hasText(dto.getFileAddr())) {
JSONObject data = downloadFile(dto.getFileAddr());
DataSetsSaveDto dataSetsSaveDto = null;
if (!ObjectUtils.isEmpty(data)) {
dataSetsSaveDto = data.toJavaObject(DataSetsSaveDto.class);
}
if (null != dataSetsSaveDto) {
dto.setTableContent(dataSetsSaveDto.getTableContent());
dto.setTableHeader(dataSetsSaveDto.getTableHeader());
}
}
//封装数据集信息
dto.setCreator(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, dto.getCreatedBy()));
dto.setModifier(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, dto.getUpdatedBy()));
return dto;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer deleteByPK(String uuid)
{
//数据集存在性校验
DataSets byPrimaryKey = dataSetsService.findByPrimaryKey(uuid);
if (null == byPrimaryKey) {
return 0;
}
//校验数据是否存在关联
List<String> list = new ArrayList<>();
list.add(uuid);
List<AtuInputDataSetResultDto> dtos = scriptFeignClient.selectLinkBySetId(list);
for (AtuInputDataSetResultDto dto : dtos) {
if (dto.getCountNum() > 0){
throw new PlatformRuntimeException(DataPoolError.DATA_SET_HAS_LINK);
}
}
//删除对应文件
String fileAddr = byPrimaryKey.getFileAddr();
if (StringUtils.hasText(fileAddr)) {
deleteFile(fileAddr);
}
deleteDataSetEnv(byPrimaryKey);
//删除库数据
int result = this.dataSetsService.deleteByPrimaryKey(byPrimaryKey);
//删除数据集增加平台日志
CpLogAddDto cpLogAddDto = new CpLogAddDto();
String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(), byPrimaryKey.getProId());
cpLogAddDto.setContent("【删除静态数据】系统:" + projectName + "数据集名称:" + byPrimaryKey.getName());
cpLogAddDto.setModule("静态数据管理");
cpLogAddDto.setType("3");
// 发送日志到 monster
MonsterLogServer.sendLogToMonster(cpLogAddDto);
logPublisher.deployLogContent(cpLogAddDto);
return result;
}
private void deleteDataSetEnv(DataSets byPrimaryKey) {
DataSetEnvRel record = new DataSetEnvRel();
record.setDataSetId(byPrimaryKey.getDataSetId());
List<DataSetEnvRel> dataSetEnvRels = dataSetEnvRelService.query(record);
dataSetEnvRels.forEach(dataSetEnvRel -> {
if (StringUtils.hasText(dataSetEnvRel.getFileAddr())) {
deleteFile(dataSetEnvRel.getFileAddr());
}
});
//删除环境数据
List<Object> deleteIds = dataSetEnvRels.stream().map(DataSetEnvRel::getId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(deleteIds)) {
dataSetEnvRelService.deleteByPrimaryKeys(deleteIds);
}
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Integer deleteBatch(DataSetsDeleteDto dto)
{
List<String> setIds = dto.getSetIds();
if (CollectionUtils.isEmpty(setIds)) {
return 0;
}
List<AtuInputDataSetResultDto> dtos = scriptFeignClient.selectLinkBySetId(dto.getSetIds());
for (AtuInputDataSetResultDto resultDto : dtos) {
if (resultDto.getCountNum() > 0){
throw new PlatformRuntimeException(DataPoolError.DATA_SET_HAS_LINK);
}
}
//删除文件 记录删除的系统和数据集
List<DataSets> dataSets = dataSetsService.queryByIds(setIds);
List<String> proIds = new ArrayList<>();
List<String> setNames = new ArrayList<>();
for (DataSets dataSet : dataSets) {
if (null != dataSet) {
if (StringUtils.hasText(dataSet.getProId())) {
proIds.add(dataSet.getProId());
}
if (StringUtils.hasText(dataSet.getName())) {
setNames.add(dataSet.getName());
}
if (StringUtils.hasText(dataSet.getFileAddr())) {
deleteFile(dataSet.getFileAddr());
}
}
}
//未获取到系统或数据集名称
if (CollectionUtils.isEmpty(proIds) || CollectionUtils.isEmpty(setNames)) {
return 0;
}
for (DataSets dataSet : dataSets) {
deleteDataSetEnv(dataSet);
}
//删除数据
Integer result = dataSetsService.deleteByIds(setIds);
//批量删除数据集增加平台日志(均为同系统
String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM.name(), proIds.get(0));
CpLogAddDto cpLogAddDto = new CpLogAddDto();
cpLogAddDto.setContent("【批量删除静态数据集】:系统" + projectName + ",共" + result + "条");
cpLogAddDto.setModule("静态数据管理");
cpLogAddDto.setType("3");
cpLogAddDto.setContentDetails(setNames);
MonsterLogServer.sendLogToMonster(cpLogAddDto);
logPublisher.deployLogContent(cpLogAddDto);
return result;
}
@Override
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Boolean save(DataSetsSaveDto dto) {
//获取数据集数据
String dataSetId = dto.getDataSetId();
DataSets byPrimaryKey = dataSetsService.findByPrimaryKey(dataSetId);
if (null == byPrimaryKey) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
//校验表头是否正确
List<DataHeaderDto> tableHeader = dto.getTableHeader();
List<String> colNameList = checkColumnList(tableHeader);
//校验数据是否正确
Map<String, List<DataContentDto>> tableContent = dto.getTableContent();
if (!colNameList.containsAll(tableContent.keySet())) {
throw new PlatformRuntimeException(DataPoolError.HEADER_CONTENT_NO_MATCH);
}
//存储文件
String path = null;
try {
String filePath = uploadFile(dto, byPrimaryKey.getDataSetId(), FileBusinessTypeEnum.STATIC_DATA_SET);
if (StringUtils.hasText(filePath)) {
path = filePath;
}
}catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.FILE_UPLOAD_ERROR);
}
//更新数据集数据
DataSets dataSets = new DataSets();
BeanUtils.copyProperties(byPrimaryKey,dataSets);
dataSets.setFileAddr(path);
dataSets.setUpdatedBy(NKSecurityContext.getUserId());
dataSets.setUpdatedTime(new Date());
dataSetsService.updateByPrimaryKey(dataSets);
//删除原文件
String oldPath = byPrimaryKey.getFileAddr();
if (StringUtils.hasText(oldPath)) {
deleteFile(oldPath);
}
return true;
}
@Override
public Boolean checkTableHeader(ColumnCheckDto dto) {
String dataSetId = dto.getDataSetId();
DataSets byPrimaryKey = dataSetsService.findByPrimaryKey(dataSetId);
if (null == byPrimaryKey) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
if (null == dto.getColumnInfo()) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_IS_NULL);
}
String fileAddr = byPrimaryKey.getFileAddr();
//新增列
if (StringUtils.hasText(fileAddr)) {
JSONObject dataInfo = downloadFile(fileAddr);
if (!ObjectUtils.isEmpty(dataInfo)) {
DataSetsSaveDto data = dataInfo.toJavaObject(DataSetsSaveDto.class);
List<DataHeaderDto> tableHeader = data.getTableHeader();
List<String> columnList = tableHeader.stream().map(item->item.getName()).collect(Collectors.toList());
if (columnList.contains(dto.getColumnInfo().getName())) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_IS_EXSITS);
}
}
}
return true;
}
@Override
public void exportDataSet(HttpServletResponse response, String dataSetId, String fileName) {
DataSets dataSet = dataSetsService.findByPrimaryKey(dataSetId);
if (null == dataSet) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
dataSetDownloadExecl(response, dataSet.getName());
ServletOutputStream outputStream = null;
try {
Workbook workbook = exportDataTable(dataSet);
outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
} catch (IOException e) {
logger.error("导出" + dataSet.getName() + "数据集文件失败:", e);
} finally {
if (null != outputStream) {
try {
outputStream.close();
} catch (IOException e) {
logger.error("",e);
}
}
}
}
@Override
public void downloadTemplate(HttpServletResponse response, String fileName, DataSetsSaveDto saveDto) {
DataSets dataSet = dataSetsService.findByPrimaryKey(saveDto.getDataSetId());
if (null == dataSet) {
throw new PlatformRuntimeException(DataPoolError.SETS_NO_EXISTS);
}
dataSetDownloadExecl(response, dataSet.getName() + "模板");
ServletOutputStream outputStream = null;
saveDto.setTableContent(null);
try {
Workbook workbook = ExcelUtils.exportToExcel(saveDto, dataSet.getName(), true);
outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
} catch (IOException e) {
logger.error("导出" + dataSet.getName() + "模板文件失败:", e);
} finally {
if (null != outputStream) {
try {
outputStream.close();
} catch (IOException e) {
logger.error("",e);
}
}
}
}
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
public String createDataSet(DataSetsAddDto inputDto) {
String setId = add(inputDto);
List<String> headers = inputDto.getHeaders();
List<Map<String, Object>> tableData = inputDto.getTableData();
//保存表数据
if (!CollectionUtils.isEmpty(headers)) {
DataSetsSaveDto saveDto = new DataSetsSaveDto();
List<DataHeaderDto> headerList = new ArrayList<>();
//记录表头信息
for (String colName : headers) {
if(!StringUtils.hasText(colName)) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_IS_NULL);
}
DataHeaderDto dataHeaderDto = new DataHeaderDto();
dataHeaderDto.setName(colName);
dataHeaderDto.setType("string");
dataHeaderDto.setIsRepeat("1");
headerList.add(dataHeaderDto);
}
saveDto.setTableHeader(headerList);
// 同步至其他环境只需要表头即可
DataSetsSaveDto syncSaveDto = new DataSetsSaveDto();
syncSaveDto.setTableHeader(headerList);
//记录表数据
Map<String,List<DataContentDto>> contentList = new HashMap<>();
for(int col = 0; col < headers.size(); col++) {
String name = headers.get(col);
List<DataContentDto> colDatas = new ArrayList<>();
//逐行获取该列值
for (int row = 0; row < tableData.size(); row++) {
DataContentDto contentDto = new DataContentDto();
Map<String, Object> rowData = tableData.get(row);
String val = "";
//有值替换 无值存空串
if (rowData.containsKey(name)) {
Object value = rowData.get(name);
if (value != null && StringUtils.hasText(value.toString()) && !"null".equals(value.toString())) {
val = value.toString();
}
}
contentDto.setValue(val);
contentDto.setTime("0");
colDatas.add(contentDto);
}
contentList.put(name,colDatas);
}
saveDto.setTableContent(contentList);
//将数据上传文件服务器
String path = uploadFile(saveDto, setId, FileBusinessTypeEnum.STATIC_DATA_SET);
if (StringUtils.hasText(path)) {
DataSets dataSets = new DataSets();
dataSets.setDataSetId(setId);
dataSets.setFileAddr(path);
dataSetsService.updateByPrimaryKey(dataSets);
//更新到每个环境下
List<String> envIds = projectFeignClient.selectEnvIds(inputDto.getProId());
int seq = 1;
for (String envId : envIds) {
DataSetEnvRel dataSetEnvRel = new DataSetEnvRel();
dataSetEnvRel.setId(UUIDUtil.create32UUID());//主键
dataSetEnvRel.setDataSetId(setId);//数据集id
dataSetEnvRel.setEnvId(envId);//环境id
// 环境相同保存标题和数据,其他环境只保存表头
if (Objects.equals(inputDto.getEnvId(), envId)){
String envPath = uploadFile(saveDto, dataSetEnvRel.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
dataSetEnvRel.setFileAddr(envPath);//文件路径
}else {
String syncFilePath = uploadFile(syncSaveDto, dataSetEnvRel.getId(), FileBusinessTypeEnum.STATIC_DATA_SET_ENV);
dataSetEnvRel.setFileAddr(syncFilePath);//文件路径
}
dataSetEnvRel.setSeq(seq);//排序
dataSetEnvRel.setCreatedBy(NKSecurityContext.getUserId());
dataSetEnvRel.setUpdatedBy(NKSecurityContext.getUserId());
dataSetEnvRel.setCreatedTime(new Date());
dataSetEnvRel.setUpdatedTime(new Date());
dataSetEnvRel.setTenantId(NKSecurityContext.getTenantId());
dataSetEnvRelService.insert(dataSetEnvRel);
}
}else {
throw new PlatformRuntimeException(DataPoolError.FILE_ID_ERROR);
}
}
return setId;
}
private void dataSetDownloadExecl(HttpServletResponse response, String fileName) {
response.reset();
response.setStatus(HttpStatus.OK.value());
response.setCharacterEncoding("UTF-8");
try {
fileName = URLEncoder.encode(fileName,"UTF-8");
} catch (UnsupportedEncodingException e) {
logger.error("文件名转换编码异常", e);
}
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
}
private Workbook exportDataTable(DataSets dataSet) {
String fileAddr = dataSet.getFileAddr();
if (StringUtils.hasText(fileAddr)) {
JSONObject jsonObject = downloadFile(fileAddr);
if (!ObjectUtils.isEmpty(jsonObject)) {
DataSetsSaveDto dataInfo = jsonObject.toJavaObject(DataSetsSaveDto.class);
return ExcelUtils.exportToExcel(dataInfo, dataSet.getName(), true);
}else {
return ExcelUtils.exportToExcel(null, dataSet.getName(), true);
}
}else {
return ExcelUtils.exportToExcel(null, dataSet.getName(), true);
}
}
/**
*
* @param columnList
* @return
*/
private List<String> checkColumnList(List<DataHeaderDto> columnList) {
List<String> names = new ArrayList<>();
//校验是否存在同名列
if (!CollectionUtils.isEmpty(columnList)) {
names = new ArrayList<>();
for (DataHeaderDto dataHeaderDto : columnList) {
if (null == dataHeaderDto) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_IS_NULL);
}
//列名称校验
String headName = dataHeaderDto.getName();
if (!StringUtils.hasText(headName)) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_NAME_IS_NULL);
}
if (headName.length() > 30) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_NAME_IS_TOO_LONG);
}
if (names.contains(headName)) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_IS_EXSITS);
}
//列类型校验
String headType = dataHeaderDto.getType();
if (!StringUtils.hasText(headType)) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_TYPE_IS_NULL);
}
String code = DataHeaderType.getCode(headType);
if (!StringUtils.hasText(code)) {
throw new PlatformRuntimeException(DataPoolError.COLUMN_TYPE_IS_WRONG);
}
names.add(headName);
}
}
return names;
}
/**
*
*
* @param query
*/
private void handlePageParam(QueryByPage<DataSetsQueryDto> query) {
if (query.getPageNo() <= 0) {
query.setPageNo(1);
}
if (query.getPageSize() <= 0 || query.getPageSize() > 500) {
query.setPageSize(500);
}
OrderBy sort = query.toSqlOrderBy();
if (sort != null && sort.isNotEmpty() && StringUtils.hasText(sort.toString())) {
PageMethod.orderBy(sort.toString());
}
}
/**
* url
* @param url
* @return
*/
private JSONObject downloadFile(String url) {
String[] resultPath = MinioPathUtils.idToPath(url);
InputStream inputStream = null;
JSONObject scriptData = null;
try {
inputStream = simpleStorageService.downloadAsStream(resultPath[0], "/" + resultPath[1]);
scriptData = MinioPathUtils.getFileContent(inputStream, JSONObject.class);
return scriptData;
} catch (FileDownloadException e) {
logger.error("读取原文件失败,失败原因:", e);
throw new PlatformRuntimeException(DataPoolError.FILE_DOWNLOAD_ERROR);
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
logger.error("",e);
}
}
}
}
/**
* url
* @param url
*/
private void deleteFile(String url) {
String[] pathData = MinioPathUtils.idToPath(url);
try {
simpleStorageService.delete(pathData[0], "/" + pathData[1]);
} catch (Exception e) {
throw new PlatformRuntimeException(DataPoolError.FILE_DEL_ERROR);
}
}
/**
*
* @param scriptJsonStr
* @return
*/
private String uploadFile(Object scriptJsonStr, String objId, FileBusinessTypeEnum businessCode) {
File file = MinioPathUtils.objectToJsonFile(scriptJsonStr);
try {
NKFile nkFile = simpleStorageService.upload(NKSecurityContext.getTenantId(), file, objId, businessCode);
return MinioPathUtils.pathToId(NKSecurityContext.getTenantId(), nkFile.getId());
} catch (FileUploadException e) {
logger.error("上传文件出错", e);
throw new PlatformRuntimeException(DataPoolError.FILE_UPLOAD_ERROR);
} finally {
boolean delete = file.delete();
if (!delete) {
logger.error("删除文件失败");
}
}
}
}

View File

@ -0,0 +1,7 @@
package net.northking.cctp.dataPool.api.dataSets.service;
import java.util.List;
public interface TreeIndexNoApiService {
List<Integer> genIndexNo(String project, String noType, long count);
}

View File

@ -0,0 +1,39 @@
package net.northking.cctp.dataPool.api.dataSets.service;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.common.sequence.SequenceService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@ConditionalOnMissingBean(name = "TreeIndexNoApiServiceImpl")
public class TreeIndexNoApiServiceImpl implements TreeIndexNoApiService{
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(TreeIndexNoApiServiceImpl.class);
@Autowired
private SequenceService sequenceService;
@Override
public List<Integer> genIndexNo(String project, String noType, long count) {
List<Integer> result = new ArrayList<>();
String suffix = "data-pool-no";
String after = "dataPool";
String projectId = StringUtils.isEmpty(project) ? "tenant" : project;
String key = after + ":" + NKSecurityContext.getTenantId() + ":" + suffix + ":" + projectId + ":" + noType;
long value = sequenceService.skipValue(key, (int) count);
for (long i = value; i > value - count; i--) {
result.add(0, Integer.valueOf(i+""));
}
return result;
}
}

View File

@ -0,0 +1,43 @@
package net.northking.cctp.dataPool.bus;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.northking.cctp.common.dto.CpLogAddDto;
import net.northking.cctp.common.exception.PlatformRuntimeException;
import net.northking.cctp.common.security.authentication.NKSecurityContext;
import net.northking.cctp.dataPool.constants.DataPoolConstant;
import net.northking.cctp.dataPool.enums.DataPoolError;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class LogRabbitMQPublisher {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private HttpServletRequest request;
public void deployLogContent(CpLogAddDto cpLogAddDto) {
byte[] json;
try {
cpLogAddDto.setRemoteAddr(request.getRemoteAddr());
json = objectMapper.writeValueAsBytes(cpLogAddDto);
} catch (JsonProcessingException e) {
throw new PlatformRuntimeException(DataPoolError.INSERT_LOG_FAIL);
}
MessageBuilder mb = MessageBuilder.withBody(json);
mb.setContentType(MediaType.APPLICATION_JSON_VALUE);
mb.setHeader(DataPoolConstant.CCTP_USER_ID, NKSecurityContext.getUserId());
mb.setHeader(DataPoolConstant.SAAS_TENANT_ID, NKSecurityContext.getTenantId());
rabbitTemplate.send(DataPoolConstant.PLATFORM_LOG_INSERT_REQ, mb.build());
}
}

View File

@ -0,0 +1,33 @@
package net.northking.cctp.dataPool.constants;
public class DataPoolConstant {
public static final String FILE_XLSX = ".xlsx";
public static final String FILE_XLS = ".xls";
public static final String CCTP_USER_ID= "CCTP_User_ID";
public static final String SAAS_TENANT_ID= "SaaS_Tenant_ID";
public static final String PLATFORM_LOG_INSERT_REQ= "Platform.Log.Insert.REQ";
public static final String ADD_URL= "addURL";
public static final String CPLOGADDDTO_LOG_TYPE_DELETE = "3";
public static final String CPLOGADDDTO_DATA_POOL_MANAGEMENT = "系统数据池管理";
public static final String CPLOGADDDTO_CONTENT_DELETE = "删除";
public static final String FUZZY_DATA_QUOTE_PREFIX = "%{";
public static final String FUZZY_DATA_QUOTE_SUFFIX = "}";
/**
* -
*/
public static final String INPUT_SET_QUOTE_TYPE_STATIC = "1";
/**
* -
*/
public static final String INPUT_SET_QUOTE_TYPE_FUZZY = "2";
}

View File

@ -0,0 +1,44 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.dao;
import feign.Param;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.db.mapper.DataResourcePackageMapper;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Mybatis
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Repository
public interface DataResourcePackageDao extends DataResourcePackageMapper
{
/**
*
* @param queryByPage
* @return
*/
List<DataResourcePackageDetailDto> getDataResourcePackages(@Param("query") QueryByPage<DataResourcePackageQueryDto> queryByPage);
/**
* id
* @param idList
* @return
*/
List<DataResourcePackage> queryByIds(@Param("list") List<String> idList);
// ---- The End by Generator ----//
}

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.dao;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataRule;
import net.northking.cctp.dataPool.db.mapper.DataRuleMapper;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleUpdateDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* Mybatis
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Repository
public interface DataRuleDao extends DataRuleMapper
{
/**
*
* @param dto
* @return
*/
Integer queryRuleByName(DataRuleUpdateDto dto);
/**
*
* @param queryByPage
* @return
*/
List<DataRuleDetailDto> getDataRules(QueryByPage<DataRuleQueryDto> queryByPage);
/**
* id
* @param idSet id
* @return
*/
List<DataRule> queryByIdSet(@Param("idSet") Set<String> idSet);
// ---- The End by Generator ----//
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.dao;
import net.northking.cctp.dataPool.db.mapper.DataSetEnvRelMapper;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Mybatis
*
* <p> <br>
* createdate: 2023-08-23 17:53:02 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Repository
public interface DataSetEnvRelDao extends DataSetEnvRelMapper
{
AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto);
List<AtuScriptInputSetQuoteFeignDto> getDataSetFile(@Param("list")List<String> list, @Param("envId")String envId);
// ---- The End by Generator ----//
}

View File

@ -0,0 +1,60 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.dao;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import net.northking.cctp.dataPool.db.mapper.DataSetTreeMapper;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeMoveDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeQueryDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Mybatis
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Repository
public interface DataSetTreeDao extends DataSetTreeMapper
{
/**
*
* @param childSetTree
* @param namePathNew
* @return
*/
int updateChildNamePath(@Param("tree") DataSetTree childSetTree, @Param("newPath") String namePathNew);
/**
*
* @param setTreeQueryDto
* @return
*/
List<DataSetTreeDetailDto> selectDataSetTree(DataSetTreeQueryDto setTreeQueryDto);
/**
* id
* @param treeId
* @return
*/
List<DataSetTreeDetailDto> queryChildrenTreeList(String treeId);
List<DataSetTree> queryByIds(List<String> list);
int countMaxLevelNo(DataSetTree queryLevel);
void updateSeqByMove(DataSetTreeMoveDto childUp);
int updateChildIdPath(@Param("tree") DataSetTree child, @Param("newPath") String path);
// ---- The End by Generator ----//
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.dao;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataSets;
import net.northking.cctp.dataPool.db.mapper.DataSetsMapper;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsQueryDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Mybatis
*
* <p> <br>
* createdate: 2022-10-24 16:58:39 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Repository
public interface DataSetsDao extends DataSetsMapper
{
// ---- The End by Generator ----//
/**
*
* @param query
* @return
*/
List<DataSetsDetailDto> queryDataSets(QueryByPage<DataSetsQueryDto> query);
/**
* id
* @param setIds
* @return
*/
List<DataSets> queryByIds(@Param("setIds") List<String> setIds);
/**
* id
* @param setIds
* @return
*/
Integer deleteByIds(@Param("setIds") List<String> setIds);
}

View File

@ -0,0 +1,286 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.db.entity.Entity;
import net.northking.cctp.common.saas.db.TenantPartition;
import javax.validation.constraints.Size;
import java.util.Date;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@ApiModel(description = "资源包")
public class DataResourcePackage extends TenantPartition implements Entity
{
public static final String KEY_id = "id";
public static final String KEY_name = "name";
public static final String KEY_memo = "memo";
public static final String KEY_packageAddr = "packageAddr";
public static final String KEY_proId = "proId";
public static final String KEY_tenantId = "tenantId";
public static final String KEY_createdBy = "createdBy";
public static final String KEY_updatedBy = "updatedBy";
public static final String KEY_createdTime = "createdTime";
public static final String KEY_updatedTime = "updatedTime";
/**
* id<br>
*/
@ApiModelProperty("id")
@Size(max = 32, message="id-id: 数据长度不能 > 32" )
private String id;
/**
* <br>
*/
@ApiModelProperty("资源包名称")
@Size(max = 32, message="资源包名称-name: 数据长度不能 > 32" )
private String name;
/**
* <br>
*/
@ApiModelProperty("资源包描述")
@Size(max = 128, message="资源包描述-memo: 数据长度不能 > 128" )
private String memo;
/**
* <br>
*/
@ApiModelProperty("资源包存放地址")
@Size(max = 128, message="资源包存放地址-packageAddr: 数据长度不能 > 128" )
private String packageAddr;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
/**
* <br>
*/
@ApiModelProperty("创建人")
@Size(max = 32, message="创建人-createdBy: 数据长度不能 > 32" )
private String createdBy;
/**
* <br>
*/
@ApiModelProperty("更新人")
@Size(max = 32, message="更新人-updatedBy: 数据长度不能 > 32" )
private String updatedBy;
/**
* <br>
*/
@ApiModelProperty("创建时间")
private Date createdTime;
/**
* <br>
*/
@ApiModelProperty("更新时间")
private Date updatedTime;
/**
* id<br>
*/
public String getId()
{
return id;
}
/**
* id<br>
*
* @param id id
*/
public void setId(String id)
{
this.id = id;
}
/**
* <br>
*/
public String getName()
{
return name;
}
/**
* <br>
*
* @param name
*/
public void setName(String name)
{
this.name = name;
}
/**
* <br>
*/
public String getMemo()
{
return memo;
}
/**
* <br>
*
* @param memo
*/
public void setMemo(String memo)
{
this.memo = memo;
}
/**
* <br>
*/
public String getPackageAddr()
{
return packageAddr;
}
/**
* <br>
*
* @param packageAddr
*/
public void setPackageAddr(String packageAddr)
{
this.packageAddr = packageAddr;
}
/**
* id<br>
*/
public String getProId()
{
return proId;
}
/**
* id<br>
*
* @param proId id
*/
public void setProId(String proId)
{
this.proId = proId;
}
/**
* id<br>
*/
public String getTenantId()
{
return tenantId;
}
/**
* id<br>
*
* @param tenantId id
*/
public void setTenantId(String tenantId)
{
this.tenantId = tenantId;
}
/**
* <br>
*/
public String getCreatedBy()
{
return createdBy;
}
/**
* <br>
*
* @param createdBy
*/
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
/**
* <br>
*/
public String getUpdatedBy()
{
return updatedBy;
}
/**
* <br>
*
* @param updatedBy
*/
public void setUpdatedBy(String updatedBy)
{
this.updatedBy = updatedBy;
}
/**
* <br>
*/
public Date getCreatedTime()
{
if(createdTime != null)
{
return (Date)createdTime.clone();
}
return null;
}
/**
* <br>
*
* @param createdTime
*/
public void setCreatedTime(Date createdTime)
{
if(createdTime != null)
{
this.createdTime = (Date)createdTime.clone();
}
}
/**
* <br>
*/
public Date getUpdatedTime()
{
if(updatedTime != null)
{
return (Date)updatedTime.clone();
}
return null;
}
/**
* <br>
*
* @param updatedTime
*/
public void setUpdatedTime(Date updatedTime)
{
if(updatedTime != null)
{
this.updatedTime = (Date)updatedTime.clone();
}
}
public DataResourcePackage()
{
}
}

View File

@ -0,0 +1,312 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.db.entity.Entity;
import net.northking.cctp.common.saas.db.TenantPartition;
import javax.validation.constraints.Size;
import java.util.Date;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@ApiModel(description = "数据规则表")
public class DataRule extends TenantPartition implements Entity
{
public static final String KEY_ruleId = "ruleId";
public static final String KEY_name = "name";
public static final String KEY_type = "type";
public static final String KEY_contentExpression = "contentExpression";
public static final String KEY_jarIds = "jarIds";
public static final String KEY_proId = "proId";
public static final String KEY_tenantId = "tenantId";
public static final String KEY_createdBy = "createdBy";
public static final String KEY_createdTime = "createdTime";
public static final String KEY_updatedBy = "updatedBy";
public static final String KEY_updatedTime = "updatedTime";
/**
* id<br>
*/
@ApiModelProperty("规则id")
@Size(max = 32, message="规则id-ruleId: 数据长度不能 > 32" )
private String ruleId;
/**
* <br>
*/
@ApiModelProperty("规则名称")
@Size(max = 32, message="规则名称-name: 数据长度不能 > 32" )
private String name;
/**
* <br>
*/
@ApiModelProperty("规则类型")
@Size(max = 1, message="规则类型-type: 数据长度不能 > 1" )
private String type;
/**
* <br>
*/
@ApiModelProperty("正则表达式、脚本编码")
@Size(max = 65535, message="正则表达式、脚本编码-contentExpression: 数据长度不能 > 65535" )
private String contentExpression;
/**
* <br>
*/
@ApiModelProperty("资源包集合")
@Size(max = 1024, message="资源包集合-jarIds: 数据长度不能 > 1024" )
private String jarIds;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
/**
* <br>
*/
@ApiModelProperty("创建人")
@Size(max = 32, message="创建人-createdBy: 数据长度不能 > 32" )
private String createdBy;
/**
* <br>
*/
@ApiModelProperty("创建时间")
private Date createdTime;
/**
* <br>
*/
@ApiModelProperty("更新人")
@Size(max = 32, message="更新人-updatedBy: 数据长度不能 > 32" )
private String updatedBy;
/**
* <br>
*/
@ApiModelProperty("更新时间")
private Date updatedTime;
/**
* id<br>
*/
public String getRuleId()
{
return ruleId;
}
/**
* id<br>
*
* @param ruleId id
*/
public void setRuleId(String ruleId)
{
this.ruleId = ruleId;
}
/**
* <br>
*/
public String getName()
{
return name;
}
/**
* <br>
*
* @param name
*/
public void setName(String name)
{
this.name = name;
}
/**
* <br>
*/
public String getType()
{
return type;
}
/**
* <br>
*
* @param type
*/
public void setType(String type)
{
this.type = type;
}
/**
* <br>
*/
public String getContentExpression()
{
return contentExpression;
}
/**
* <br>
*
* @param contentExpression
*/
public void setContentExpression(String contentExpression)
{
this.contentExpression = contentExpression;
}
/**
* <br>
*/
public String getJarIds()
{
return jarIds;
}
/**
* <br>
*
* @param jarIds
*/
public void setJarIds(String jarIds)
{
this.jarIds = jarIds;
}
/**
* id<br>
*/
public String getProId()
{
return proId;
}
/**
* id<br>
*
* @param proId id
*/
public void setProId(String proId)
{
this.proId = proId;
}
/**
* id<br>
*/
public String getTenantId()
{
return tenantId;
}
/**
* id<br>
*
* @param tenantId id
*/
public void setTenantId(String tenantId)
{
this.tenantId = tenantId;
}
/**
* <br>
*/
public String getCreatedBy()
{
return createdBy;
}
/**
* <br>
*
* @param createdBy
*/
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
/**
* <br>
*/
public Date getCreatedTime()
{
if(createdTime != null)
{
return (Date)createdTime.clone();
}
return null;
}
/**
* <br>
*
* @param createdTime
*/
public void setCreatedTime(Date createdTime)
{
if(createdTime != null)
{
this.createdTime = (Date)createdTime.clone();
}
}
/**
* <br>
*/
public String getUpdatedBy()
{
return updatedBy;
}
/**
* <br>
*
* @param updatedBy
*/
public void setUpdatedBy(String updatedBy)
{
this.updatedBy = updatedBy;
}
/**
* <br>
*/
public Date getUpdatedTime()
{
if(updatedTime != null)
{
return (Date)updatedTime.clone();
}
return null;
}
/**
* <br>
*
* @param updatedTime
*/
public void setUpdatedTime(Date updatedTime)
{
if(updatedTime != null)
{
this.updatedTime = (Date)updatedTime.clone();
}
}
public DataRule()
{
}
}

View File

@ -0,0 +1,287 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.db.Partition;
import net.northking.cctp.common.db.entity.Entity;
import javax.validation.constraints.Size;
import java.util.Date;
/**
*
*
* <p> <br>
* createdate: 2023-08-23 17:53:02 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@ApiModel(description = "数据集环境关联表")
public class DataSetEnvRel extends Partition implements Entity
{
public static final String KEY_id = "id";
public static final String KEY_dataSetId = "dataSetId";
public static final String KEY_envId = "envId";
public static final String KEY_tenantId = "tenantId";
public static final String KEY_seq = "seq";
public static final String KEY_createdTime = "createdTime";
public static final String KEY_createdBy = "createdBy";
public static final String KEY_updatedTime = "updatedTime";
public static final String KEY_updatedBy = "updatedBy";
public static final String KEY_fileAddr = "fileAddr";
/**
* <br>
*/
@ApiModelProperty("主键")
@Size(max = 32, message="主键-id: 数据长度不能 > 32" )
private String id;
/**
* id<br>
*/
@ApiModelProperty("数据集id")
@Size(max = 32, message="数据集id-dataSetId: 数据长度不能 > 32" )
private String dataSetId;
/**
* id<br>
*/
@ApiModelProperty("环境id")
@Size(max = 32, message="环境id-envId: 数据长度不能 > 32" )
private String envId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
/**
* <br>
*/
@ApiModelProperty("排序")
private Integer seq;
/**
* <br>
*/
@ApiModelProperty("创建时间")
private Date createdTime;
/**
* <br>
*/
@ApiModelProperty("创建人")
@Size(max = 32, message="创建人-createdBy: 数据长度不能 > 32" )
private String createdBy;
/**
* <br>
*/
@ApiModelProperty("更新时间")
private Date updatedTime;
/**
* <br>
*/
@ApiModelProperty("更新人")
@Size(max = 32, message="更新人-updatedBy: 数据长度不能 > 32" )
private String updatedBy;
/**
* <br>
*/
@ApiModelProperty("文件地址")
@Size(max = 1024, message="文件地址-fileAddr: 数据长度不能 > 1024" )
private String fileAddr;
/**
* <br>
*/
public String getId()
{
return id;
}
/**
* <br>
*
* @param id
*/
public void setId(String id)
{
this.id = id;
}
/**
* id<br>
*/
public String getDataSetId()
{
return dataSetId;
}
/**
* id<br>
*
* @param dataSetId id
*/
public void setDataSetId(String dataSetId)
{
this.dataSetId = dataSetId;
}
/**
* id<br>
*/
public String getEnvId()
{
return envId;
}
/**
* id<br>
*
* @param envId id
*/
public void setEnvId(String envId)
{
this.envId = envId;
}
/**
* id<br>
*/
public String getTenantId()
{
return tenantId;
}
/**
* id<br>
*
* @param tenantId id
*/
public void setTenantId(String tenantId)
{
this.tenantId = tenantId;
}
/**
* <br>
*/
public Integer getSeq()
{
return seq;
}
/**
* <br>
*
* @param seq
*/
public void setSeq(Integer seq)
{
this.seq = seq;
}
/**
* <br>
*/
public Date getCreatedTime()
{
if(createdTime != null)
{
return (Date)createdTime.clone();
}
return null;
}
/**
* <br>
*
* @param createdTime
*/
public void setCreatedTime(Date createdTime)
{
if(createdTime != null)
{
this.createdTime = (Date)createdTime.clone();
}
}
/**
* <br>
*/
public String getCreatedBy()
{
return createdBy;
}
/**
* <br>
*
* @param createdBy
*/
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
/**
* <br>
*/
public Date getUpdatedTime()
{
if(updatedTime != null)
{
return (Date)updatedTime.clone();
}
return null;
}
/**
* <br>
*
* @param updatedTime
*/
public void setUpdatedTime(Date updatedTime)
{
if(updatedTime != null)
{
this.updatedTime = (Date)updatedTime.clone();
}
}
/**
* <br>
*/
public String getUpdatedBy()
{
return updatedBy;
}
/**
* <br>
*
* @param updatedBy
*/
public void setUpdatedBy(String updatedBy)
{
this.updatedBy = updatedBy;
}
/**
* <br>
*/
public String getFileAddr()
{
return fileAddr;
}
/**
* <br>
*
* @param fileAddr
*/
public void setFileAddr(String fileAddr)
{
this.fileAddr = fileAddr;
}
public DataSetEnvRel()
{
}
}

View File

@ -0,0 +1,395 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.db.entity.Entity;
import net.northking.cctp.common.saas.db.TenantPartition;
import javax.validation.constraints.Size;
import java.util.Date;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@ApiModel(description = "数据集树目录表")
public class DataSetTree extends TenantPartition implements Entity
{
public static final String KEY_id = "id";
public static final String KEY_name = "name";
public static final String KEY_parentId = "parentId";
public static final String KEY_levelNo = "levelNo";
public static final String KEY_indexNo = "indexNo";
public static final String KEY_isLeaf = "isLeaf";
public static final String KEY_path = "path";
public static final String KEY_fullName = "fullName";
public static final String KEY_proId = "proId";
public static final String KEY_tenantId = "tenantId";
public static final String KEY_createdBy = "createdBy";
public static final String KEY_createdTime = "createdTime";
public static final String KEY_updatedBy = "updatedBy";
public static final String KEY_updatedTime = "updatedTime";
public static final String KEY_description = "description";
/**
* id<br>
*/
@ApiModelProperty("id")
@Size(max = 32, message="id-id: 数据长度不能 > 32" )
private String id;
/**
* <br>
*/
@ApiModelProperty("节点名称")
@Size(max = 32, message="节点名称-name: 数据长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("父节点id")
@Size(max = 32, message="父节点id-parentId: 数据长度不能 > 32" )
private String parentId;
/**
* <br>
*/
@ApiModelProperty("层级")
private Integer levelNo;
/**
* <br>
*/
@ApiModelProperty("序号")
private Integer indexNo;
/**
* <br>
*/
@ApiModelProperty("是否叶子节点")
@Size(max = 1, message="是否叶子节点-isLeaf: 数据长度不能 > 1" )
private String isLeaf;
/**
* <br>
*/
@ApiModelProperty("路径")
@Size(max = 1024, message="路径-path: 数据长度不能 > 1024" )
private String path;
/**
* <br>
*/
@ApiModelProperty("完整路径")
@Size(max = 1024, message="完整路径-fullName: 数据长度不能 > 1024" )
private String fullName;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
/**
* <br>
*/
@ApiModelProperty("创建人")
@Size(max = 32, message="创建人-createdBy: 数据长度不能 > 32" )
private String createdBy;
/**
* <br>
*/
@ApiModelProperty("创建时间")
private Date createdTime;
/**
* <br>
*/
@ApiModelProperty("更新人")
@Size(max = 32, message="更新人-updatedBy: 数据长度不能 > 32" )
private String updatedBy;
/**
* <br>
*/
@ApiModelProperty("更新时间")
private Date updatedTime;
/**
* <br>
*/
@ApiModelProperty("描述")
@Size(max = 255, message="描述-description: 数据长度不能 > 255" )
private String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
/**
* id<br>
*/
public String getId()
{
return id;
}
/**
* id<br>
*
* @param id id
*/
public void setId(String id)
{
this.id = id;
}
/**
* <br>
*/
public String getName()
{
return name;
}
/**
* <br>
*
* @param name
*/
public void setName(String name)
{
this.name = name;
}
/**
* id<br>
*/
public String getParentId()
{
return parentId;
}
/**
* id<br>
*
* @param parentId id
*/
public void setParentId(String parentId)
{
this.parentId = parentId;
}
/**
* <br>
*/
public Integer getLevelNo()
{
return levelNo;
}
/**
* <br>
*
* @param levelNo
*/
public void setLevelNo(Integer levelNo)
{
this.levelNo = levelNo;
}
/**
* <br>
*/
public Integer getIndexNo()
{
return indexNo;
}
/**
* <br>
*
* @param indexNo
*/
public void setIndexNo(Integer indexNo)
{
this.indexNo = indexNo;
}
/**
* <br>
*/
public String getIsLeaf()
{
return isLeaf;
}
/**
* <br>
*
* @param isLeaf
*/
public void setIsLeaf(String isLeaf)
{
this.isLeaf = isLeaf;
}
/**
* <br>
*/
public String getPath()
{
return path;
}
/**
* <br>
*
* @param path
*/
public void setPath(String path)
{
this.path = path;
}
/**
* <br>
*/
public String getFullName()
{
return fullName;
}
/**
* <br>
*
* @param fullName
*/
public void setFullName(String fullName)
{
this.fullName = fullName;
}
/**
* id<br>
*/
public String getProId()
{
return proId;
}
/**
* id<br>
*
* @param proId id
*/
public void setProId(String proId)
{
this.proId = proId;
}
/**
* id<br>
*/
public String getTenantId()
{
return tenantId;
}
/**
* id<br>
*
* @param tenantId id
*/
public void setTenantId(String tenantId)
{
this.tenantId = tenantId;
}
/**
* <br>
*/
public String getCreatedBy()
{
return createdBy;
}
/**
* <br>
*
* @param createdBy
*/
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
/**
* <br>
*/
public Date getCreatedTime()
{
if(createdTime != null)
{
return (Date)createdTime.clone();
}
return null;
}
/**
* <br>
*
* @param createdTime
*/
public void setCreatedTime(Date createdTime)
{
if(createdTime != null)
{
this.createdTime = (Date)createdTime.clone();
}
}
/**
* <br>
*/
public String getUpdatedBy()
{
return updatedBy;
}
/**
* <br>
*
* @param updatedBy
*/
public void setUpdatedBy(String updatedBy)
{
this.updatedBy = updatedBy;
}
/**
* <br>
*/
public Date getUpdatedTime()
{
if(updatedTime != null)
{
return (Date)updatedTime.clone();
}
return null;
}
/**
* <br>
*
* @param updatedTime
*/
public void setUpdatedTime(Date updatedTime)
{
if(updatedTime != null)
{
this.updatedTime = (Date)updatedTime.clone();
}
}
public DataSetTree()
{
}
}

View File

@ -0,0 +1,312 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.db.entity.Entity;
import net.northking.cctp.common.saas.db.TenantPartition;
import javax.validation.constraints.Size;
import java.util.Date;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@ApiModel(description = "数据集")
public class DataSets extends TenantPartition implements Entity
{
public static final String KEY_dataSetId = "dataSetId";
public static final String KEY_name = "name";
public static final String KEY_description = "description";
public static final String KEY_proId = "proId";
public static final String KEY_tenantId = "tenantId";
public static final String KEY_fileAddr = "fileAddr";
public static final String KEY_treeId = "treeId";
public static final String KEY_createdBy = "createdBy";
public static final String KEY_createdTime = "createdTime";
public static final String KEY_updatedBy = "updatedBy";
public static final String KEY_updatedTime = "updatedTime";
/**
* id<br>
*/
@ApiModelProperty("数据集id")
@Size(max = 32, message="数据集id-dataSetId: 数据长度不能 > 32" )
private String dataSetId;
/**
* <br>
*/
@ApiModelProperty("数据集名称")
@Size(max = 32, message="数据集名称-name: 数据长度不能 > 32" )
private String name;
/**
* <br>
*/
@ApiModelProperty("描述")
@Size(max = 255, message="描述-description: 数据长度不能 > 255" )
private String description;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
/**
* <br>
*/
@ApiModelProperty("文件地址")
@Size(max = 1024, message="文件地址-fileAddr: 数据长度不能 > 1024" )
private String fileAddr;
/**
* id<br>
*/
@ApiModelProperty("目录id")
@Size(max = 32, message="目录id-treeId: 数据长度不能 > 32" )
private String treeId;
/**
* <br>
*/
@ApiModelProperty("创建人")
@Size(max = 32, message="创建人-createdBy: 数据长度不能 > 32" )
private String createdBy;
/**
* <br>
*/
@ApiModelProperty("创建时间")
private Date createdTime;
/**
* <br>
*/
@ApiModelProperty("更新人")
@Size(max = 32, message="更新人-updatedBy: 数据长度不能 > 32" )
private String updatedBy;
/**
* <br>
*/
@ApiModelProperty("更新时间")
private Date updatedTime;
/**
* id<br>
*/
public String getDataSetId()
{
return dataSetId;
}
/**
* id<br>
*
* @param dataSetId id
*/
public void setDataSetId(String dataSetId)
{
this.dataSetId = dataSetId;
}
/**
* <br>
*/
public String getName()
{
return name;
}
/**
* <br>
*
* @param name
*/
public void setName(String name)
{
this.name = name;
}
/**
* <br>
*/
public String getDescription()
{
return description;
}
/**
* <br>
*
* @param description
*/
public void setDescription(String description)
{
this.description = description;
}
/**
* id<br>
*/
public String getProId()
{
return proId;
}
/**
* id<br>
*
* @param proId id
*/
public void setProId(String proId)
{
this.proId = proId;
}
/**
* id<br>
*/
public String getTenantId()
{
return tenantId;
}
/**
* id<br>
*
* @param tenantId id
*/
public void setTenantId(String tenantId)
{
this.tenantId = tenantId;
}
/**
* <br>
*/
public String getFileAddr()
{
return fileAddr;
}
/**
* <br>
*
* @param fileAddr
*/
public void setFileAddr(String fileAddr)
{
this.fileAddr = fileAddr;
}
/**
* id<br>
*/
public String getTreeId()
{
return treeId;
}
/**
* id<br>
*
* @param treeId id
*/
public void setTreeId(String treeId)
{
this.treeId = treeId;
}
/**
* <br>
*/
public String getCreatedBy()
{
return createdBy;
}
/**
* <br>
*
* @param createdBy
*/
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
/**
* <br>
*/
public Date getCreatedTime()
{
if(createdTime != null)
{
return (Date)createdTime.clone();
}
return null;
}
/**
* <br>
*
* @param createdTime
*/
public void setCreatedTime(Date createdTime)
{
if(createdTime != null)
{
this.createdTime = (Date)createdTime.clone();
}
}
/**
* <br>
*/
public String getUpdatedBy()
{
return updatedBy;
}
/**
* <br>
*
* @param updatedBy
*/
public void setUpdatedBy(String updatedBy)
{
this.updatedBy = updatedBy;
}
/**
* <br>
*/
public Date getUpdatedTime()
{
if(updatedTime != null)
{
return (Date)updatedTime.clone();
}
return null;
}
/**
* <br>
*
* @param updatedTime
*/
public void setUpdatedTime(Date updatedTime)
{
if(updatedTime != null)
{
this.updatedTime = (Date)updatedTime.clone();
}
}
public DataSets()
{
}
}

View File

@ -0,0 +1,58 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.impl;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.dao.DataResourcePackageDao;
import net.northking.cctp.dataPool.db.service.DataResourcePackageService;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.common.saas.db.TenantEntityService;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Service
@ConditionalOnMissingBean(name = "DataResourcePackageServiceImpl")
public class DataResourcePackageServiceImpl extends TenantEntityService<DataResourcePackage> implements DataResourcePackageService
{
private final DataResourcePackageDao dataResourcePackageDao;
public DataResourcePackageServiceImpl(DataResourcePackageDao dataResourcePackageDao) {this.dataResourcePackageDao = dataResourcePackageDao;}
public BasicDao<DataResourcePackage> getDao() {return dataResourcePackageDao;}
public DataResourcePackage createEntity() { return new DataResourcePackage();}
// ---- The End by Generator ----//
@Override
public List<DataResourcePackageDetailDto> getDataResourcePackages(QueryByPage<DataResourcePackageQueryDto> queryByPage) {
return dataResourcePackageDao.getDataResourcePackages(queryByPage);
}
@Override
public List<DataResourcePackage> queryByIds(List<String> idList) {
return dataResourcePackageDao.queryByIds(idList);
}
}

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.impl;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.dao.DataRuleDao;
import net.northking.cctp.dataPool.db.service.DataRuleService;
import net.northking.cctp.dataPool.db.entity.DataRule;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.common.saas.db.TenantEntityService;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleUpdateDto;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Service
@ConditionalOnMissingBean(name = "DataRuleServiceImpl")
public class DataRuleServiceImpl extends TenantEntityService<DataRule> implements DataRuleService
{
private final DataRuleDao dataRuleDao;
public DataRuleServiceImpl(DataRuleDao dataRuleDao) {this.dataRuleDao = dataRuleDao;}
public BasicDao<DataRule> getDao() {return dataRuleDao;}
public DataRule createEntity() { return new DataRule();}
// ---- The End by Generator ----//
@Override
public Integer queryRuleByName(DataRuleUpdateDto dto) {
return dataRuleDao.queryRuleByName(dto);
}
@Override
public List<DataRuleDetailDto> getDataRules(QueryByPage<DataRuleQueryDto> queryByPage) {
return dataRuleDao.getDataRules(queryByPage);
}
@Override
public List<DataRule> queryByIdSet(Set<String> idSet) {
return dataRuleDao.queryByIdSet(idSet);
}
}

View File

@ -0,0 +1,70 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.impl;
import net.northking.cctp.dataPool.db.dao.DataSetEnvRelDao;
import net.northking.cctp.dataPool.db.service.DataSetEnvRelService;
import net.northking.cctp.dataPool.db.entity.DataSetEnvRel;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.common.db.PaginationService;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2023-08-23 17:53:02 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Service
@ConditionalOnMissingBean(name = "DataSetEnvRelServiceImpl")
public class DataSetEnvRelServiceImpl extends PaginationService<DataSetEnvRel> implements DataSetEnvRelService
{
private final DataSetEnvRelDao dataSetEnvRelDao;
public DataSetEnvRelServiceImpl(DataSetEnvRelDao dataSetEnvRelDao) {this.dataSetEnvRelDao = dataSetEnvRelDao;}
public BasicDao<DataSetEnvRel> getDao() {return dataSetEnvRelDao;}
public DataSetEnvRel createEntity() { return new DataSetEnvRel();}
@Override
protected void beforeInsert(DataSetEnvRel record) {
}
@Override
protected void beforeUpdate(DataSetEnvRel record) {
}
@Override
public AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto) {
return dataSetEnvRelDao.selectDataUrlAndTreeName(atuScriptInputSetQuoteFieldDto);
}
@Override
public List<AtuScriptInputSetQuoteFeignDto> getDataSetFile(List<String> list, String envId) {
return dataSetEnvRelDao.getDataSetFile(list, envId);
}
// ---- The End by Generator ----//
}

View File

@ -0,0 +1,78 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.impl;
import net.northking.cctp.dataPool.db.dao.DataSetTreeDao;
import net.northking.cctp.dataPool.db.service.DataSetTreeService;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.common.saas.db.TenantEntityService;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeMoveDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeQueryDto;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Service
@ConditionalOnMissingBean(name = "DataSetTreeServiceImpl")
public class DataSetTreeServiceImpl extends TenantEntityService<DataSetTree> implements DataSetTreeService
{
private final DataSetTreeDao dataSetTreeDao;
public DataSetTreeServiceImpl(DataSetTreeDao dataSetTreeDao) {this.dataSetTreeDao = dataSetTreeDao;}
public BasicDao<DataSetTree> getDao() {return dataSetTreeDao;}
public DataSetTree createEntity() { return new DataSetTree();}
@Override
public int updateChildNamePath(DataSetTree childSetTrees, String namePathNew) {
return dataSetTreeDao.updateChildNamePath(childSetTrees, namePathNew);
}
@Override
public List<DataSetTreeDetailDto> selectDataSetTree(DataSetTreeQueryDto setTreeQueryDto) {
return dataSetTreeDao.selectDataSetTree(setTreeQueryDto);
}
@Override
public List<DataSetTreeDetailDto> queryChildrenTreeList(String treeId) {
return dataSetTreeDao.queryChildrenTreeList(treeId);
}
@Override
public List<DataSetTree> queryByIds(List<String> list) {
return dataSetTreeDao.queryByIds(list);
}
@Override
public int countMaxLevelNo(DataSetTree queryLevel) {
return dataSetTreeDao.countMaxLevelNo(queryLevel);
}
@Override
public void updateSeqByMove(DataSetTreeMoveDto childUp) {
dataSetTreeDao.updateSeqByMove(childUp);
}
@Override
public int updateChildIdPath(DataSetTree child, String path) {
return dataSetTreeDao.updateChildIdPath(child, path);
}
}

View File

@ -0,0 +1,63 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.impl;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.dao.DataSetsDao;
import net.northking.cctp.dataPool.db.service.DataSetsService;
import net.northking.cctp.dataPool.db.entity.DataSets;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.common.saas.db.TenantEntityService;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsQueryDto;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:39 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@Service
@ConditionalOnMissingBean(name = "DataSetsServiceImpl")
public class DataSetsServiceImpl extends TenantEntityService<DataSets> implements DataSetsService
{
private final DataSetsDao dataSetsDao;
public DataSetsServiceImpl(DataSetsDao dataSetsDao) {this.dataSetsDao = dataSetsDao;}
public BasicDao<DataSets> getDao() {return dataSetsDao;}
public DataSets createEntity() { return new DataSets();}
// ---- The End by Generator ----//
@Override
public List<DataSetsDetailDto> queryDataSets(QueryByPage<DataSetsQueryDto> query) {
return dataSetsDao.queryDataSets(query);
}
@Override
public List<DataSets> queryByIds(List<String> setIds) {
return dataSetsDao.queryByIds(setIds);
}
@Override
public Integer deleteByIds(List<String> setIds) {
return dataSetsDao.deleteByIds(setIds);
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.mapper;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
/**
* Mybatis
* <p>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataResourcePackageMapper extends BasicDao<DataResourcePackage>
{
String EntityName = "DataResourcePackage";
String COLUMN_id = "id";
String COLUMN_name = "name";
String COLUMN_memo = "memo";
String COLUMN_packageAddr = "package_addr";
String COLUMN_proId = "pro_id";
String COLUMN_tenantId = "tenant_id";
String COLUMN_createdBy = "created_by";
String COLUMN_updatedBy = "updated_by";
String COLUMN_createdTime = "created_time";
String COLUMN_updatedTime = "updated_time";
}

View File

@ -0,0 +1,33 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.mapper;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.dataPool.db.entity.DataRule;
/**
* Mybatis
* <p>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataRuleMapper extends BasicDao<DataRule>
{
String EntityName = "DataRule";
String COLUMN_ruleId = "rule_id";
String COLUMN_name = "name";
String COLUMN_type = "type";
String COLUMN_contentExpression = "content_expression";
String COLUMN_jarIds = "jar_ids";
String COLUMN_proId = "pro_id";
String COLUMN_tenantId = "tenant_id";
String COLUMN_createdBy = "created_by";
String COLUMN_createdTime = "created_time";
String COLUMN_updatedBy = "updated_by";
String COLUMN_updatedTime = "updated_time";
}

View File

@ -0,0 +1,32 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.mapper;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.dataPool.db.entity.DataSetEnvRel;
/**
* Mybatis
* <p>
* createdate: 2023-08-23 17:53:02 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetEnvRelMapper extends BasicDao<DataSetEnvRel>
{
String EntityName = "DataSetEnvRel";
String COLUMN_id = "id";
String COLUMN_dataSetId = "data_set_id";
String COLUMN_envId = "env_id";
String COLUMN_tenantId = "tenant_id";
String COLUMN_seq = "seq";
String COLUMN_createdTime = "created_time";
String COLUMN_createdBy = "created_by";
String COLUMN_updatedTime = "updated_time";
String COLUMN_updatedBy = "updated_by";
String COLUMN_fileAddr = "file_addr";
}

View File

@ -0,0 +1,37 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.mapper;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
/**
* Mybatis
* <p>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetTreeMapper extends BasicDao<DataSetTree>
{
String EntityName = "DataSetTree";
String COLUMN_id = "id";
String COLUMN_name = "name";
String COLUMN_parentId = "parent_id";
String COLUMN_levelNo = "level_no";
String COLUMN_indexNo = "index_no";
String COLUMN_isLeaf = "is_leaf";
String COLUMN_path = "path";
String COLUMN_fullName = "full_name";
String COLUMN_proId = "pro_id";
String COLUMN_tenantId = "tenant_id";
String COLUMN_createdBy = "created_by";
String COLUMN_createdTime = "created_time";
String COLUMN_updatedBy = "updated_by";
String COLUMN_updatedTime = "updated_time";
String COLUMN_description = "description";
}

View File

@ -0,0 +1,33 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.mapper;
import net.northking.cctp.common.db.BasicDao;
import net.northking.cctp.dataPool.db.entity.DataSets;
/**
* Mybatis
* <p>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetsMapper extends BasicDao<DataSets>
{
String EntityName = "DataSets";
String COLUMN_dataSetId = "data_set_id";
String COLUMN_name = "name";
String COLUMN_desc = "description";
String COLUMN_proId = "pro_id";
String COLUMN_tenantId = "tenant_id";
String COLUMN_fileAddr = "file_addr";
String COLUMN_treeId = "tree_id";
String COLUMN_createdBy = "created_by";
String COLUMN_createdTime = "created_time";
String COLUMN_updatedBy = "updated_by";
String COLUMN_updatedTime = "updated_time";
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.service;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataResourcePackageQueryDto;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataResourcePackageService extends BasicService<DataResourcePackage>
{
/**
*
* @param queryByPage
* @return
*/
List<DataResourcePackageDetailDto> getDataResourcePackages(QueryByPage<DataResourcePackageQueryDto> queryByPage);
/**
* id
* @param idList
* @return
*/
List<DataResourcePackage> queryByIds(List<String> idList);
}

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.service;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataRule;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleDetailDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleQueryDto;
import net.northking.cctp.dataPool.dto.dataRule.DataRuleUpdateDto;
import java.util.List;
import java.util.Set;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataRuleService extends BasicService<DataRule>
{
/**
*
* @param dto
* @return
*/
Integer queryRuleByName(DataRuleUpdateDto dto);
/**
*
* @param queryByPage
* @return
*/
List<DataRuleDetailDto> getDataRules(QueryByPage<DataRuleQueryDto> queryByPage);
/**
* id
* @param idSet id
* @return
*/
List<DataRule> queryByIdSet(Set<String> idSet);
}

View File

@ -0,0 +1,28 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.service;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.dataPool.db.entity.DataSetEnvRel;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFeignDto;
import net.northking.cctp.dataPool.dto.dataSets.AtuScriptInputSetQuoteFieldDto;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2023-08-23 17:53:02 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetEnvRelService extends BasicService<DataSetEnvRel>
{
AtuScriptInputSetQuoteFieldDto selectDataUrlAndTreeName(AtuScriptInputSetQuoteFieldDto atuScriptInputSetQuoteFieldDto);
List<AtuScriptInputSetQuoteFeignDto> getDataSetFile(List<String> list, String envId);
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.service;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeMoveDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetTreeQueryDto;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:38 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetTreeService extends BasicService<DataSetTree>
{
int updateChildNamePath(DataSetTree childSetTrees, String namePathNew);
List<DataSetTreeDetailDto> selectDataSetTree(DataSetTreeQueryDto setTreeQueryDto);
List<DataSetTreeDetailDto> queryChildrenTreeList(String treeId);
List<DataSetTree> queryByIds(List<String> list);
int countMaxLevelNo(DataSetTree queryLevel);
void updateSeqByMove(DataSetTreeMoveDto childUp);
int updateChildIdPath(DataSetTree child, String path);
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.db.service;
import net.northking.cctp.common.db.BasicService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.dataPool.db.entity.DataSets;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsDetailDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsQueryDto;
import java.util.List;
/**
*
*
* <p> <br>
* createdate: 2022-10-24 16:58:39 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
public interface DataSetsService extends BasicService<DataSets>
{
/**
*
* @param query
* @return
*/
List<DataSetsDetailDto> queryDataSets(QueryByPage<DataSetsQueryDto> query);
/**
* id
* @param setIds
* @return
*/
List<DataSets> queryByIds(List<String> setIds);
Integer deleteByIds(List<String> setIds);
}

View File

@ -0,0 +1,35 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.dataPool.db.entity.DataResourcePackage;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "资源包")
public class DataResourcePackageDetailDto extends DataResourcePackage implements Serializable
{
@ApiModelProperty("上传人")
private String creator;
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
}

View File

@ -0,0 +1,33 @@
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "资源包信息实体")
public class DataResourcePackageInfoDto implements Serializable {
@ApiModelProperty("资源包id")
private String jarId;
@ApiModelProperty("资源包名称")
private String name;
public String getJarId() {
return jarId;
}
public void setJarId(String jarId) {
this.jarId = jarId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* --
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "资源包")
public class DataResourcePackageQueryDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("资源包名称")
@Size(max = 32, message="资源包名称-name: 数据长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
}

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "资源包")
public class DataResourcePackageUpdateDto implements Serializable
{
/**
* id<br>
*/
@ApiModelProperty("id")
@Size(max = 32, message="id-id: 数据长度不能 > 32" )
@NotBlank(message = "资源包id不能为空")
private String id;
/**
* <br>
*/
@ApiModelProperty("资源包描述")
@Size(max = 128, message="资源包描述-memo: 数据长度不能 > 128" )
private String memo;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}

View File

@ -0,0 +1,98 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据规则表")
public class DataRuleAddDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("规则名称")
@Size(max = 32, message="规则名称-name: 数据长度不能 > 32" )
@NotBlank(message = "规则名称不能为空")
private String name;
/**
* 0- 1-<br>
*/
@ApiModelProperty("规则类型 0-脚本语言 1-正则表达式")
@Size(max = 1, message="规则类型-type: 数据长度不能 > 1" )
@NotBlank(message = "规则类型不能为空")
private String type;
/**
* <br>
*/
@ApiModelProperty("正则表达式、脚本编码")
@Size(max = 65535, message="正则表达式、脚本编码-contentExpression: 数据长度不能 > 65535" )
private String contentExpression;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* <br>
*/
@ApiModelProperty("资源包集合")
@Size(max = 1024, message="资源包集合-jarIds: 数据长度不能 > 1024" )
private String jarIds;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContentExpression() {
return contentExpression;
}
public void setContentExpression(String contentExpression) {
this.contentExpression = contentExpression;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getJarIds() {
return jarIds;
}
public void setJarIds(String jarIds) {
this.jarIds = jarIds;
}
}

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.dataPool.db.entity.DataRule;
import java.io.Serializable;
import java.util.List;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据规则表")
public class DataRuleDetailDto extends DataRule implements Serializable
{
@ApiModelProperty("创建人名称")
private String creator;
@ApiModelProperty("修改人名称")
private String modifier;
@ApiModelProperty("系统名称")
private String projectName;
@ApiModelProperty("引用的资源包名称列表")
private List<DataResourcePackageInfoDto> jarInfoList;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public List<DataResourcePackageInfoDto> getJarInfoList() {
return jarInfoList;
}
public void setJarInfoList(List<DataResourcePackageInfoDto> jarInfoList) {
this.jarInfoList = jarInfoList;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
}

View File

@ -0,0 +1,86 @@
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "数据规则测试实体")
public class DataRuleExecuteDto implements Serializable {
/**
* <br>
*/
@ApiModelProperty("规则名称")
@Size(max = 32, message="规则名称-name: 数据长度不能 > 32" )
@NotBlank(message = "规则名称不能为空")
private String name;
/**
* 0- 1-<br>
*/
@ApiModelProperty("规则类型 0-脚本语言 1-正则表达式")
@Size(max = 1, message="规则类型-type: 数据长度不能 > 1" )
@NotBlank(message = "规则类型不能为空")
private String type;
/**
* <br>
*/
@ApiModelProperty("正则表达式、脚本编码")
@Size(max = 65535, message="正则表达式、脚本编码-contentExpression: 数据长度不能 > 65535" )
private String contentExpression;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
/**
* <br>
*/
@ApiModelProperty("资源包集合")
@Size(max = 1024, message="资源包集合-jarIds: 数据长度不能 > 1024" )
private String jarIds;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContentExpression() {
return contentExpression;
}
public void setContentExpression(String contentExpression) {
this.contentExpression = contentExpression;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getJarIds() {
return jarIds;
}
public void setJarIds(String jarIds) {
this.jarIds = jarIds;
}
}

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* --
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据规则表")
public class DataRuleQueryDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("规则名称")
@Size(max = 32, message="规则名称-name: 数据长度不能 > 32" )
private String name;
/**
* <br>
*/
@ApiModelProperty("规则类型")
@Size(max = 1, message="规则类型-type: 数据长度不能 > 1" )
private String type;
/**
* id<br>
*/
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
@ApiModelProperty("系统id列表")
private List<String> proIds;
@ApiModelProperty("创建人名称")
private String creator;
private List<String> creatorIds;
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public List<String> getCreatorIds() {
return creatorIds;
}
public void setCreatorIds(List<String> creatorIds) {
this.creatorIds = creatorIds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<String> getProIds() {
return proIds;
}
public void setProIds(List<String> proIds) {
this.proIds = proIds;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
}

View File

@ -0,0 +1,113 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据规则表")
public class DataRuleUpdateDto implements Serializable
{
/**
* id<br>
*/
@ApiModelProperty("规则id")
@Size(max = 32, message="规则id-ruleId: 数据长度不能 > 32" )
@NotBlank(message = "规则id不能为空")
private String ruleId;
/**
* <br>
*/
@ApiModelProperty("规则名称")
@Size(max = 32, message="规则名称-name: 数据长度不能 > 32" )
@NotBlank(message = "规则名称不能为空")
private String name;
/**
* <br>
*/
@ApiModelProperty("规则类型")
@Size(max = 1, message="规则类型-type: 数据长度不能 > 1" )
@NotBlank(message = "规则类型不能为空")
private String type;
/**
* <br>
*/
@ApiModelProperty("正则表达式、脚本编码")
@Size(max = 65535, message="正则表达式、脚本编码-contentExpression: 数据长度不能 > 65535" )
private String contentExpression;
/**
* <br>
*/
@ApiModelProperty("资源包集合")
@Size(max = 1024, message="资源包集合-jarIds: 数据长度不能 > 1024" )
private String jarIds;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
private String proId;
public String getRuleId() {
return ruleId;
}
public void setRuleId(String ruleId) {
this.ruleId = ruleId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContentExpression() {
return contentExpression;
}
public void setContentExpression(String contentExpression) {
this.contentExpression = contentExpression;
}
public String getJarIds() {
return jarIds;
}
public void setJarIds(String jarIds) {
this.jarIds = jarIds;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
}

View File

@ -0,0 +1,35 @@
package net.northking.cctp.dataPool.dto.dataRule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.common.saas.db.TenantPartition;
import java.io.Serializable;
@JsonSerialize
@ApiModel("用户查询实体")
public class UserQueryDto extends TenantPartition implements Serializable {
@Override
public String getTenantId() {
return null;
}
@Override
public void setTenantId(String s) {
}
/**
* <br>
*/
@ApiModelProperty("用户中文名称")
private String userChnName;
public String getUserChnName() {
return userChnName;
}
public void setUserChnName(String userChnName) {
this.userChnName = userChnName;
}
}

View File

@ -0,0 +1,26 @@
package net.northking.cctp.dataPool.dto.dataSets;
import java.util.Set;
public class AtuDataSetFeignDto {
//静态数据集id集合
private Set<String> dataSetList;
//环境id
private String envId;
public Set<String> getDataSetList() {
return dataSetList;
}
public void setDataSetList(Set<String> dataSetList) {
this.dataSetList = dataSetList;
}
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
}

View File

@ -0,0 +1,14 @@
package net.northking.cctp.dataPool.dto.dataSets;
public class AtuScriptInputSetQuoteFeignDto extends AtuScriptInputSetQuoteFieldDto {
private String filePath;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}

View File

@ -0,0 +1,110 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import net.northking.cctp.dataPool.constants.DataPoolConstant;
import java.io.Serializable;
/**
* Restful----稿
*
* createdate: 2023-08-29 10:41:06 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "脚本输入项数据集关联草稿表")
public class AtuScriptInputSetQuoteFieldDto implements Serializable
{
private String setId;//数据集id
private String value;//指定某行列的单元格的值
private String column;//列名
private Integer row;//行号
private String path;//静态数据集所在目录:静态数据集名称
/**
* 11-2-
*/
private String type = DataPoolConstant.INPUT_SET_QUOTE_TYPE_STATIC;
private String envId;
private String name;
private String fullName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
public String getSetId() {
return setId;
}
public void setSetId(String setId) {
this.setId = setId;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
public Integer getRow() {
return row;
}
public void setRow(Integer row) {
this.row = row;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

View File

@ -0,0 +1,40 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "列校验实体")
public class ColumnCheckDto implements Serializable {
/**
* id<br>
*/
@ApiModelProperty("数据集id")
@Size(max = 32, message="数据集id-dataSetId: 数据长度不能 > 32" )
@NotBlank(message = "数据集id不能为空")
private String dataSetId;
@ApiModelProperty("新增列实体")
private DataHeaderDto columnInfo;
public String getDataSetId() {
return dataSetId;
}
public void setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
}
public DataHeaderDto getColumnInfo() {
return columnInfo;
}
public void setColumnInfo(DataHeaderDto columnInfo) {
this.columnInfo = columnInfo;
}
}

View File

@ -0,0 +1,32 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "数据内容对象")
public class DataContentDto implements Serializable {
@ApiModelProperty("数值")
private String value;
@ApiModelProperty("被使用次数")
private String time;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}

View File

@ -0,0 +1,42 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "数据集表头对象")
public class DataHeaderDto implements Serializable {
@ApiModelProperty("列名称")
private String name;
@ApiModelProperty("数据类型")
private String type;
@ApiModelProperty("数据是否支撑重复使用")
private String isRepeat;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getIsRepeat() {
return isRepeat;
}
public void setIsRepeat(String isRepeat) {
this.isRepeat = isRepeat;
}
}

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
/**
* Restful----
*
* createdate: 2023-08-23 17:55:51 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集环境关联表")
public class DataSetEnvRelAddDto implements Serializable
{
@ApiModelProperty("系统id")
private String proId;
@ApiModelProperty("数据集id")
private String dataSetId;
@ApiModelProperty("")
private List<DataSetEnvRelAddTmpDto> dataSetEnvRelAddTmpDto;
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getDataSetId() {
return dataSetId;
}
public void setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
}
public List<DataSetEnvRelAddTmpDto> getDataSetEnvRelAddTmpDto() {
return dataSetEnvRelAddTmpDto;
}
public void setDataSetEnvRelAddTmpDto(List<DataSetEnvRelAddTmpDto> dataSetEnvRelAddTmpDto) {
this.dataSetEnvRelAddTmpDto = dataSetEnvRelAddTmpDto;
}
}

View File

@ -0,0 +1,58 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* Restful----
*
* createdate: 2023-08-23 17:55:51 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集环境关联表")
public class DataSetEnvRelAddTmpDto implements Serializable
{
@ApiModelProperty("数据表头")
private String envId;
@ApiModelProperty("数据表头")
private List<DataHeaderDto> tableHeader;
@ApiModelProperty("数据内容 key-列名 value-该列数据信息列表")
private Map<String,List<DataContentDto>> tableContent;
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
public List<DataHeaderDto> getTableHeader() {
return tableHeader;
}
public void setTableHeader(List<DataHeaderDto> tableHeader) {
this.tableHeader = tableHeader;
}
public Map<String, List<DataContentDto>> getTableContent() {
return tableContent;
}
public void setTableContent(Map<String, List<DataContentDto>> tableContent) {
this.tableContent = tableContent;
}
}

View File

@ -0,0 +1,78 @@
/*
* Copyright (c) Corporation 2023 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* --
*
* createdate: 2023-08-23 17:55:51 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集环境关联表")
public class DataSetEnvRelQueryDto implements Serializable
{
@ApiModelProperty("数据集id")
private String dataSetId;
@ApiModelProperty("系统id")
private String proId;
@ApiModelProperty("环境id")
private String envId;
@ApiModelProperty("表头集合")
private List<String> tableHeaders;
@ApiModelProperty("数据信息 按行存储")
private List<Map<String,Object>> tableContent;
public List<String> getTableHeaders() {
return tableHeaders;
}
public void setTableHeaders(List<String> tableHeaders) {
this.tableHeaders = tableHeaders;
}
public List<Map<String, Object>> getTableContent() {
return tableContent;
}
public void setTableContent(List<Map<String, Object>> tableContent) {
this.tableContent = tableContent;
}
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
public String getDataSetId() {
return dataSetId;
}
public void setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集树目录表")
public class DataSetTreeAddDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("节点名称")
@Size(max = 32, message="节点名称长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("父节点id")
@Size(max = 32, message="父节点名称长度不能 > 32" )
private String parentId;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id长度不能 > 32" )
private String proId;
@ApiModelProperty("是否新增到根节点 false-否 true-是")
private boolean addRootNode;
@ApiModelProperty("节点描述")
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public boolean isAddRootNode() {
return addRootNode;
}
public void setAddRootNode(boolean addRootNode) {
this.addRootNode = addRootNode;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.dataPool.db.entity.DataSetTree;
import java.io.Serializable;
import java.util.List;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集树目录表")
public class DataSetTreeDetailDto extends DataSetTree implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("子节点列表")
private List<DataSetTreeDetailDto> children;
@ApiModelProperty("节点次序")
private Integer idx;
public Integer getIdx() {
return idx;
}
public void setIdx(Integer idx) {
this.idx = idx;
}
public List<DataSetTreeDetailDto> getChildren() {
return children;
}
public void setChildren(List<DataSetTreeDetailDto> children) {
this.children = children;
}
}

View File

@ -0,0 +1,68 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
@JsonSerialize
@ApiModel(description = "数据集树目录表")
public class DataSetTreeMoveDto implements Serializable {
/**
* ID<br>
*/
@ApiModelProperty("目录ID")
@Size(max = 32, message="目录ID-id: 数据长度不能 > 32" )
private String id;
/**
* id<br>
*/
@ApiModelProperty("目标位置父节点id")
@Size(max = 32, message="目标位置父节点id-targetId: 数据长度不能 > 32" )
private String targetId;
/**
* ID<br>
*/
@ApiModelProperty("系统ID")
@Size(max = 32, message="系统ID-projectId: 数据长度不能 > 32" )
private String proId;
/**
*
*/
@ApiModelProperty("目标位置前一位的顺序号")
private Integer orderSeq;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTargetId() {
return targetId;
}
public void setTargetId(String targetId) {
this.targetId = targetId;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public Integer getOrderSeq() {
return orderSeq;
}
public void setOrderSeq(Integer orderSeq) {
this.orderSeq = orderSeq;
}
}

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* --
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集树目录表")
public class DataSetTreeQueryDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("节点名称")
@Size(max = 32, message="节点名称-name: 数据长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("父节点id")
@Size(max = 32, message="父节点id-parentId: 数据长度不能 > 32" )
private String parentId;
@ApiModelProperty("系统id列表")
private List<String> proIds;
@ApiModelProperty("是否为多系统 false-单系统 true-多系统")
private boolean moreProject;
/**
* <br>
*/
@ApiModelProperty("路径")
@Size(max = 1024, message="路径-path: 数据长度不能 > 1024" )
private String path;
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public boolean isMoreProject() {
return moreProject;
}
public void setMoreProject(boolean moreProject) {
this.moreProject = moreProject;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public List<String> getProIds() {
return proIds;
}
public void setProIds(List<String> proIds) {
this.proIds = proIds;
}
}

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:18 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集树目录表")
public class DataSetTreeUpdateDto implements Serializable
{
/**
* id<br>
*/
@ApiModelProperty("id")
@Size(max = 32, message="id长度不能 > 32" )
private String id;
/**
* <br>
*/
@ApiModelProperty("节点名称")
@Size(max = 32, message="节点名称长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id长度不能 > 32" )
private String proId;
/**
* <br>
*/
@ApiModelProperty("目录描述")
@Size(max = 255, message="目录描述长度不能 > 255" )
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@ -0,0 +1,119 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:19 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集")
public class DataSetsAddDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("数据集名称")
@Size(max = 30, message="数据集名称-name: 数据长度不能 > 30" )
@NotBlank(message = "数据集名称不能为空")
private String name;
/**
* <br>
*/
@ApiModelProperty("描述")
@Size(max = 255, message="描述-description: 数据长度不能 > 255" )
private String description;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
@NotBlank(message = "系统id不能为空")
private String proId;
/**
* id<br>
*/
@ApiModelProperty("目录id")
@Size(max = 32, message="目录id-treeId: 数据长度不能 > 32" )
@NotBlank(message = "目录id不能为空")
private String treeId;
@ApiModelProperty("表头列表")
private List<String> headers;
@ApiModelProperty("表数据")
private List<Map<String, Object>> tableData;
@ApiModelProperty("环境id")
private String envId;
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
public List<String> getHeaders() {
return headers;
}
public void setHeaders(List<String> headers) {
this.headers = headers;
}
public List<Map<String, Object>> getTableData() {
return tableData;
}
public void setTableData(List<Map<String, Object>> tableData) {
this.tableData = tableData;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getTreeId() {
return treeId;
}
public void setTreeId(String treeId) {
this.treeId = treeId;
}
}

View File

@ -0,0 +1,23 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
@JsonSerialize
@ApiModel(description = "数据集删除实体")
public class DataSetsDeleteDto implements Serializable {
@ApiModelProperty("数据集id列表")
private List<String> setIds;
public List<String> getSetIds() {
return setIds;
}
public void setSetIds(List<String> setIds) {
this.setIds = setIds;
}
}

View File

@ -0,0 +1,70 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.northking.cctp.dataPool.db.entity.DataSets;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:19 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集")
public class DataSetsDetailDto extends DataSets implements Serializable
{
@ApiModelProperty("创建人名称")
private String creator;
@ApiModelProperty("修改人名称")
private String modifier;
@ApiModelProperty("数据表头")
private List<DataHeaderDto> tableHeader;
@ApiModelProperty("数据内容 key-列名 value-该列数据信息列表")
private Map<String,List<DataContentDto>> tableContent;
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
public List<DataHeaderDto> getTableHeader() {
return tableHeader;
}
public void setTableHeader(List<DataHeaderDto> tableHeader) {
this.tableHeader = tableHeader;
}
public Map<String, List<DataContentDto>> getTableContent() {
return tableContent;
}
public void setTableContent(Map<String, List<DataContentDto>> tableContent) {
this.tableContent = tableContent;
}
}

View File

@ -0,0 +1,88 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* --
*
* createdate: 2022-10-24 17:01:19 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集查询实体")
public class DataSetsQueryDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("数据集名称")
@Size(max = 32, message="数据集名称-name: 数据长度不能 > 32" )
private String name;
/**
* id<br>
*/
@ApiModelProperty("目录id")
@Size(max = 32, message="目录id-treeId: 数据长度不能 > 32" )
private String treeId;
@ApiModelProperty("目录id列表")
private List<String> treeIds;
@ApiModelProperty("系统id列表")
private List<String> proIds;
@ApiModelProperty("租户id")
@Size(max = 32, message="租户id-tenantId: 数据长度不能 > 32" )
private String tenantId;
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public List<String> getTreeIds() {
return treeIds;
}
public void setTreeIds(List<String> treeIds) {
this.treeIds = treeIds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTreeId() {
return treeId;
}
public void setTreeId(String treeId) {
this.treeId = treeId;
}
public List<String> getProIds() {
return proIds;
}
public void setProIds(List<String> proIds) {
this.proIds = proIds;
}
}

View File

@ -0,0 +1,75 @@
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@JsonSerialize
@ApiModel(description = "数据集内容实体")
public class DataSetsSaveDto implements Serializable {
/**
* id<br>
*/
@ApiModelProperty("数据集id")
@Size(max = 32, message="数据集id-dataSetId: 数据长度不能 > 32" )
@NotBlank(message = "数据集id不能为空")
private String dataSetId;
@ApiModelProperty("环境id")
private String envId;
@ApiModelProperty("环境名称")
private String envName;
@ApiModelProperty("数据表头")
private List<DataHeaderDto> tableHeader;
@ApiModelProperty("数据内容 key-列名 value-该列数据信息列表")
private Map<String,List<DataContentDto>> tableContent;
public String getEnvId() {
return envId;
}
public void setEnvId(String envId) {
this.envId = envId;
}
public String getEnvName() {
return envName;
}
public void setEnvName(String envName) {
this.envName = envName;
}
public String getDataSetId() {
return dataSetId;
}
public void setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
}
public List<DataHeaderDto> getTableHeader() {
return tableHeader;
}
public void setTableHeader(List<DataHeaderDto> tableHeader) {
this.tableHeader = tableHeader;
}
public Map<String, List<DataContentDto>> getTableContent() {
return tableContent;
}
public void setTableContent(Map<String, List<DataContentDto>> tableContent) {
this.tableContent = tableContent;
}
}

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) Corporation 2022 . All rights reserved.
*
*/
package net.northking.cctp.dataPool.dto.dataSets;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Restful----
*
* createdate: 2022-10-24 17:01:19 <br>
* @author: maven-cctp-plugin <br>
* @since: 1.0 <br>
*/
@JsonSerialize
@ApiModel(description = "数据集")
public class DataSetsUpdateDto implements Serializable
{
/**
* <br>
*/
@ApiModelProperty("数据集名称")
@Size(max = 32, message="数据集名称-name: 数据长度不能 > 32" )
@NotBlank(message = "数据集名称不能为空")
private String name;
/**
* <br>
*/
@ApiModelProperty("描述")
@Size(max = 255, message="描述-description: 数据长度不能 > 255" )
private String description;
/**
* id<br>
*/
@ApiModelProperty("系统id")
@Size(max = 32, message="系统id-proId: 数据长度不能 > 32" )
@NotBlank(message = "系统id不能为空")
private String proId;
/**
* id<br>
*/
@ApiModelProperty("目录id")
@Size(max = 32, message="目录id-treeId: 数据长度不能 > 32" )
@NotBlank(message = "目录id不能为空")
private String treeId;
/**
* id<br>
*/
@ApiModelProperty("数据集id")
@Size(max = 32, message="数据集id-dataSetId: 数据长度不能 > 32" )
@NotBlank(message = "数据集id不能为空")
private String dataSetId;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getProId() {
return proId;
}
public void setProId(String proId) {
this.proId = proId;
}
public String getTreeId() {
return treeId;
}
public void setTreeId(String treeId) {
this.treeId = treeId;
}
public String getDataSetId() {
return dataSetId;
}
public void setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
}
}

View File

@ -0,0 +1,35 @@
package net.northking.cctp.dataPool.enums;
public enum DataHeaderType {
STRING("0","string"),
MAP("1","keyValue"),
BOOLEAN("2","boolean"),
ARRAY("3","array"),
JSON("4","json"),
XML("5","xml"),
HTML("6","html");
private String code;
private String name;
DataHeaderType(String code, String name){
this.code = code;
this.name = name;
}
public static String getName(String code){
for (DataHeaderType value : DataHeaderType.values()) {
if (code.equals(value.code)) {
return value.name;
}
}
return "";
}
public static String getCode(String name){
for (DataHeaderType value : DataHeaderType.values()) {
if (name.equals(value.name)) {
return value.code;
}
}
return "";
}
}

View File

@ -0,0 +1,99 @@
package net.northking.cctp.dataPool.enums;
import net.northking.cctp.common.exception.PlatformError;
/**
*
*/
public enum DataPoolError implements PlatformError {
//目录树管理
TREE_NAME_VALID("目录名称不可包含【/】或者【\\】"),
TREE_NO_EXISTS("当前目录不存在,请刷新列表"),
TREE_NAME_EXISTS("当前目录名称已存在"),
TREE_ADD_DATA_EXISTS("所选父目录存在数据,不可新建目录"),
TREE_DEL_DIR_EXISTS("该目录下有子目录,不允许删除!"),
TREE_DEL_DATA_EXISTS("该目录下存在数据,不允许删除!"),
TREE_LEVEL_LIMIT("超过树节点层级上限10级"),
TREE_MOVE_DATA_EXISTS("目标目录存在数据,不可拖拽"),
//数据集管理
SET_NAME_NO_UNIQUE("数据集名称[{0}]在该目录下已存在"),
SET_NAME_IS_VALID("数据集名称不可包含特殊符号"),
SETS_DIR_VALID("所选目录不合法,请选择存在的叶子节点"),
SETS_NO_EXISTS("当前数据集不存在,请刷新列表"),
SETS_DATA_IS_NULL("数据集文件内容为空"),
COLUMN_IS_NULL("列信息为空"),
COLUMN_NAME_IS_NULL("列名不能为空"),
COLUMN_NAME_IS_TOO_LONG("列名长度不可超过30"),
COLUMN_TYPE_IS_NULL("列类型不能为空"),
COLUMN_TYPE_IS_WRONG("列类型错误!"),
COLUMN_IS_EXSITS("同名列已存在"),
HEADER_CONTENT_NO_MATCH("表头与数据不匹配"),
IMPORT_FILE_IS_NULL("导入文件为空"),
IMPORT_EXCEL_FILE_IS_TOO_LARGE("导入文件大小不可超过2M"),
IMPORT_FILE_FORMART_IS_ERROR("导入文件格式不正确"),
IMPORT_EXCEL_CELL_IS_NULL("导入文件表头列数据不能为空"),
IMPORT_COLUMN_IS_EXSITS("导入文件表头列名不能重复"),
IMPORT_COLUMN_IS_TOO_LONG("导入文件表头列名长度不能超过30"),
IMPORT_COLUMN_IS_INVALID("导入失败:当前excel为无效文件"),
PROJECT_NO_REFER_ENV("新增数据失败:当前系统未关联环境!!!"),
//模糊数据管理
DATA_RESOURCE_PACKAGE_UPLOAD_FAIL("资源包上传失败"),
DATA_RESOURCE_PACKAGE_IS_NULL("当前资源包不存在,请刷新列表"),
DATA_RULE_IS_NULL("所选规则不存在,请刷新列表"),
DATA_RULE_NAME_IS_EXSIT("同名数据规则已存在"),
DATA_RULE_EXP_IS_NULL("数据规则内容不能为空"),
DATA_RULE_REXP_IS_VALID("正则表达式语法错误,请重新检查"),
DATA_RULE_NOT_SUPPORT_TYPE("数据规则脚本暂不支持所选类型"),
DATA_RESOURCE_PACKAGE_LOAD_FAIL("数据规则资源包加载失败"),
DATA_RULE_EXECUTE_RESULT_IS_NULL("规则测试结果为null请检查语法"),
DATA_RULE_EXECUTE_RESULT_IS_EXCEPTION("规则测试执行异常,请检查语法"),
PARAM_IS_MISSING("缺少请求参数"),
DATA_SET_HAS_LINK("当前静态数据集存在关联,删除失败!"),
FUZZY_DATA_SET_HAS_LINK("当前模糊数据存在关联,删除失败!"),
//文件IO管理
FILE_IS_NULL("文件不能为空!"),
FILE_UPLOAD_ERROR("文件上传失败"),
FILE_DOWNLOAD_ERROR("文件下载失败"),
FILE_READ_ERROR("读取文件内容失败"),
FILE_DEL_ERROR("文件删除失败"),
FILE_ID_ERROR("文件id有误"),
FILE_IS_NOT_EXCEL("导入异常当前文件非正常格式的Excel文件"),
FILE_NAME_IS_NULL("导入异常,文件名称不能为空!"),
//excel
EXCEL_HEADER_IS_NULL("导入文件的第1列数据存在空值请修改文件再导入"),
EXCEL_FILE_READ_ERROR("导入失败:当前Excel为无效文件"),
EXCEL_FISRT_SHEET_NULL("Excel文件中首个工作表为空"),
EXCEL_NAME_IS_NULL("Excel文件名称为空导入失败"),
TABLE_HEADER_NAME_ERROR("导入文件中的表头字段第{0}列名称【{1}】跟前端界面字段【{2}】不一致!"),
TABLE_HEADER_SIZE_UNEQULE("导入文件中的表头字段数跟前端界面显示的不一致!"),
EXCEL_HEADER_HAS_SAME("表头存在重复数据请修改Excel文件"),
//日志管理
INSERT_LOG_FAIL("日志创建失败");
private final Integer code;
private final String msg;
private static final int START_CODE = 220000;
DataPoolError(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
DataPoolError(String msg) {
this.code = ordinal() + START_CODE;
this.msg = msg;
}
@Override
public Integer getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
}

View File

@ -0,0 +1,29 @@
package net.northking.cctp.dataPool.feign;
import io.swagger.annotations.ApiParam;
import net.northking.cctp.common.dto.AssociatedFilesDto;
import net.northking.cctp.common.feign.FeignCctpConfig;
import net.northking.cctp.common.http.ResultWrapper;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@FeignClient(name = "cctp-files", path = "/cctp-files", configuration = {FeignCctpConfig.class})
public interface AttachmentFeignClient {
@PostMapping(value = "/v1/update",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResultWrapper<String> update(Map<String,String> file);
@PostMapping(value = "/pub/associatedFiles")
ResultWrapper<String> associatedFiles(@ApiParam(value = "关联文件请求对象") @RequestBody AssociatedFilesDto associatedFilesDto);
@GetMapping(value = "/pub/deleteFileByObjIdAndBusinessCode")
void deleteFileByObjId(@RequestParam("objectId") String objectId, @RequestParam("businessCode") String businessCode);
}

View File

@ -0,0 +1,26 @@
package net.northking.cctp.dataPool.feign;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.feign.FeignCctpConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@FeignClient(name = "cctp-projects", configuration = {FeignCctpConfig.class}, path = "/cctp-projects")
public interface ProjectFeignClient {
@ApiOperation(value = "根据系统id查关联的环境id集合")
@PostMapping(value = "/v1/query/selectEnvIds",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
List<String> selectEnvIds(@RequestParam("proId") String proId);
@ApiOperation(value = "查询系统关联的环境排序")
@PostMapping(value = "/v1/query/envListSeq",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
List<String> queryEnvListSeq(@RequestParam("proId") String proId);
}

View File

@ -0,0 +1,19 @@
package net.northking.cctp.dataPool.feign;
import io.swagger.annotations.ApiOperation;
import net.northking.cctp.common.feign.FeignCctpConfig;
import net.northking.cctp.dataPool.feign.dto.AtuInputDataSetResultDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "atu-script-case", configuration = {FeignCctpConfig.class}, path = "/atu-script-case")
public interface ScriptFeignClient {
@ApiOperation(value = "查询静态数据集存在关联")
@PostMapping(value = "/v1/selectLinkBySetId")
List<AtuInputDataSetResultDto> selectLinkBySetId(@RequestBody List<String> setId);
}

View File

@ -0,0 +1,25 @@
package net.northking.cctp.dataPool.feign.dto;
public class AtuInputDataSetResultDto {
private String setId;
private Integer countNum;
public String getSetId() {
return setId;
}
public void setSetId(String setId) {
this.setId = setId;
}
public Integer getCountNum() {
return countNum;
}
public void setCountNum(Integer countNum) {
this.countNum = countNum;
}
}

View File

@ -0,0 +1,48 @@
package net.northking.cctp.dataPool.utils;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.constants.BaseDefineDependencyConstants;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.entity.Environment;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.exception.InvalidException;
import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO;
import net.northking.cctp.common.feign.ApiAtsEnviromentFeign;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class EnvNameUtils {
private static final Logger logger = LoggerFactory.getLogger(EnvNameUtils.class);
@Autowired
private ApiAtsEnviromentFeign apiAtsEnviromentFeign;
public String getEnvName(String envId) {
if (StringUtils.isNotBlank(envId)) {
Long id = null;
try {
id = Long.valueOf(envId);
} catch (NumberFormatException e) {
logger.error("环境Id类型转化异常");
throw new InvalidException("环境Id类型转化异常");
}
List<Long> envIds = new ArrayList<>();
envIds.add(id);
ResponseVO<List<Environment>> responseVo = apiAtsEnviromentFeign.getEnvInfoById(envIds);
if (responseVo == null || !responseVo.getCode().equals(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS)) {
throw new InvalidException("服务间调用获取环境信息失败");
}
if (responseVo.getData() != null) {
return responseVo.getData().get(0).getName();
}
}
return null;
}
}

View File

@ -0,0 +1,207 @@
package net.northking.cctp.dataPool.utils;
import net.northking.cctp.dataPool.dto.dataSets.DataContentDto;
import net.northking.cctp.dataPool.dto.dataSets.DataHeaderDto;
import net.northking.cctp.dataPool.dto.dataSets.DataSetsSaveDto;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class ExcelUtils {
/**
*
*/
private final static Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
public static Workbook exportToExcel(DataSetsSaveDto saveDto, String sheetName, Boolean isXssf){
Workbook workbook = null;
if (isXssf) {
workbook = new XSSFWorkbook();
} else {
workbook = new HSSFWorkbook();
}
//工作表
Sheet sheet = workbook.createSheet(sheetName);
if (null == saveDto) {
return workbook;
}
List<DataHeaderDto> headers = saveDto.getTableHeader();
Map<String, List<DataContentDto>> data = saveDto.getTableContent();
//无表头则直接返回空表
if (CollectionUtils.isEmpty(headers)) {
return workbook;
}
//表头
Row headerRow = sheet.createRow(0);
Map<Integer, Integer> columnWidth = new HashMap<>();
//设置表头样式
CellStyle headerStyle = getHeaderStyle(workbook);
for (int i = 0; i < headers.size(); i++) {
DataHeaderDto headerDto = headers.get(i);
if (null == headerDto) continue;
Cell cell = getHeaderCell(headerDto,headerRow,i,sheet);
String name = headerDto.getName();
int width = name.getBytes().length * 256 + 512;
if (width > 15000) {
width = 15000;
}
columnWidth.put(i, width);
cell.setCellValue(name);
cell.setCellStyle(headerStyle);
}
//数据样式
if (!CollectionUtils.isEmpty(data)) {
CellStyle bodyStyle = getBodyStyle(workbook);
List<Map<String, Object>> rowMapList = getRowMapList(saveDto);
for (int rowNum = 0; rowNum < rowMapList.size(); rowNum++) {
Map<String, Object> rowMap = rowMapList.get(rowNum);
Row row = sheet.createRow(rowNum + 1);
for (int colNum = 0; colNum < headers.size(); colNum++) {
DataHeaderDto header = headers.get(colNum);
Cell cell = getBodyCell(header, rowMap,row,rowNum,colNum,columnWidth);
if (null == cell) break;
cell.setCellStyle(bodyStyle);
}
}
}
//设置列宽
for (int i = 0; i < headers.size(); i++) {
sheet.setColumnWidth(i,columnWidth.get(i));
}
return workbook;
}
/**
*
* @param dto
* @return
*/
private static List<Map<String,Object>> getRowMapList(DataSetsSaveDto dto) {
List<Map<String,Object>> res = new ArrayList<>();
List<DataHeaderDto> tableHeader = dto.getTableHeader();
Map<String, List<DataContentDto>> tableContent = dto.getTableContent();
if (CollectionUtils.isEmpty(tableHeader) || CollectionUtils.isEmpty(tableContent)) {
return res;
}
List<String> nameList = new ArrayList<>();
int rowNum = 0;
//统计各列数据最大行数
for (int i = 0; i < tableHeader.size(); i++) {
DataHeaderDto headerDto = tableHeader.get(i);
if (null == headerDto) continue;
nameList.add(headerDto.getName());
List<DataContentDto> contentDtos = tableContent.get(headerDto.getName());
//最大行数与当前列数据量比较
rowNum = (contentDtos.size() > rowNum) ? contentDtos.size() : rowNum;
}
//整理每行数据
for(int i = 0; i < rowNum; i++) {
Map<String,Object> row = new HashMap<>();
for(int j = 0; j < nameList.size(); j++) {
String name = nameList.get(j);
List<DataContentDto> columnData = tableContent.get(name);
//如果该格无数据则存空串
if (CollectionUtils.isEmpty(columnData) || columnData.size() <= i) {
row.put(name,"");
} else {
row.put(name, columnData.get(i).getValue());
}
}
res.add(row);
}
return res;
}
private static Cell getBodyCell(DataHeaderDto header, Map<String, Object> rowMap, Row row, int rowNum, int columnNum, Map<Integer, Integer> columnWidth) {
Cell cell = null;
String type = header.getType();
String name = header.getName();
if (null != rowMap.get(name)) {
Object o = rowMap.get(name);
if ("boolean".equals(type)) {
cell = row.createCell(columnNum, CellType.BOOLEAN);
cell.setCellValue(Boolean.parseBoolean(o.toString()));
} else {
cell = row.createCell(columnNum, CellType.STRING);
String value = o.toString();
Integer width = columnWidth.get(columnNum);
int newWidth = value.getBytes().length * 256 + 200;
if (newWidth > width && newWidth <= 15000) {
columnWidth.put(columnNum, newWidth);
} else if (newWidth > 15000) {
columnWidth.put(columnNum, 15000);
}
cell.setCellValue(value);
}
}else {
//未传值则存空字符串
cell = row.createCell(columnNum, CellType.STRING);
Integer width = columnWidth.get(columnNum);
columnWidth.put(columnNum, width>200 ? width : 200);
cell.setCellValue("");
}
return cell;
}
private static Cell getHeaderCell(DataHeaderDto dataMap, Row row, int index,Sheet sheet) {
Cell cell = null;
String type = dataMap.getType();
if ("date".equals(type)) {
cell = row.createCell(index, CellType.NUMERIC);
} else if ("int".equals(type)) {
cell = row.createCell(index, CellType.NUMERIC);
} else if ("boolean".equals(type)) {
cell = row.createCell(index, CellType.BOOLEAN);
} else {
cell = row.createCell(index, CellType.STRING);
}
return cell;
}
private static CellStyle getHeaderStyle(Workbook workbook) {
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER); //水平居中
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中
headerStyle.setWrapText(true); //自动换行
headerStyle.setBorderTop(BorderStyle.THIN); //边框
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
//字体
Font headerFont = workbook.createFont();
headerFont.setFontName("黑体");
headerFont.setFontHeightInPoints((short) 14);
headerStyle.setFont(headerFont);
//背景
headerStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
return headerStyle;
}
private static CellStyle getBodyStyle(Workbook workbook) {
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER); //水平居中
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中
headerStyle.setWrapText(true); //自动换行
headerStyle.setBorderTop(BorderStyle.THIN); //边框
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
//字体
Font headerFont = workbook.createFont();
headerFont.setFontName("宋体");
headerFont.setFontHeightInPoints((short) 12);
headerStyle.setFont(headerFont);
return headerStyle;
}
}

Some files were not shown because too many files have changed in this diff Show More