Merge remote-tracking branch 'origin/orderChange' into zhairh
commit
6e1a461a36
@ -0,0 +1,81 @@
|
|||||||
|
package com.glxp.api.admin.config;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.IORuntimeException;
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
import cn.hutool.core.lang.UUID;
|
||||||
|
import com.glxp.api.admin.dao.info.DbVersionDao;
|
||||||
|
import com.glxp.api.admin.entity.info.DbVersionEntity;
|
||||||
|
import com.glxp.api.admin.entity.info.SchemaData;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.boot.ApplicationArguments;
|
||||||
|
import org.springframework.boot.ApplicationRunner;
|
||||||
|
import org.springframework.core.annotation.Order;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Order(1)
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class HdSchemaExecutor implements ApplicationRunner {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
DbVersionDao hdCommonDao;
|
||||||
|
|
||||||
|
private List<SchemaData> schema = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(ApplicationArguments args) throws Exception {
|
||||||
|
//初始版本列表
|
||||||
|
buildSchemas();
|
||||||
|
//定义sql文件路径
|
||||||
|
String basePath = "schemas/";
|
||||||
|
//非版本控制,初始化脚本
|
||||||
|
ClassLoader loader = this.getClass().getClassLoader();
|
||||||
|
//通过流的方式获取项目路径下的文件
|
||||||
|
InputStream inputStream = loader.getResourceAsStream(basePath + "init.sql");
|
||||||
|
//获取文件内容
|
||||||
|
String sql = IoUtil.readUtf8(inputStream);
|
||||||
|
try {
|
||||||
|
//判断版本表是否存在
|
||||||
|
int count = hdCommonDao.selectTableExist("hd_version");
|
||||||
|
if (count == 0) {
|
||||||
|
hdCommonDao.updateSql(sql);
|
||||||
|
}
|
||||||
|
for (SchemaData schemaData : schema) {
|
||||||
|
//查询版本记录是否存在
|
||||||
|
count = hdCommonDao.selectVersion(schemaData.getVersion());
|
||||||
|
if (count == 0) {
|
||||||
|
log.info("--------------执行数据脚本,版本:" + schemaData.getVersion());
|
||||||
|
//获取对应sql脚本
|
||||||
|
inputStream = loader.getResourceAsStream(basePath + schemaData.getFileName());
|
||||||
|
sql = IoUtil.readUtf8(inputStream);
|
||||||
|
hdCommonDao.updateSql(sql);
|
||||||
|
DbVersionEntity entity = new DbVersionEntity();
|
||||||
|
entity.setId(UUID.randomUUID().toString());
|
||||||
|
entity.setVersion(schemaData.getVersion());
|
||||||
|
entity.setCreated(new Date());
|
||||||
|
entity.setRemark(schemaData.getFileName());
|
||||||
|
//写入版本记录
|
||||||
|
hdCommonDao.insertVersion(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IORuntimeException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
//关闭流
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void buildSchemas() {
|
||||||
|
schema.add(new SchemaData("v2.1", "schema_v2.1.sql"));
|
||||||
|
// schema.add(new SchemaData("v2.2", "schema_v2.2.sql"));
|
||||||
|
// schema.add(new SchemaData("v2.3", "schema_v2.3.sql"));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.glxp.api.admin.dao.info;
|
||||||
|
|
||||||
|
import com.glxp.api.admin.entity.info.DbVersionEntity;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface DbVersionDao {
|
||||||
|
|
||||||
|
int selectVersion(@Param("version") String version);
|
||||||
|
|
||||||
|
//查询版本表是否存在
|
||||||
|
int selectTableExist(@Param("tableName") String tableName);
|
||||||
|
|
||||||
|
//新增版本
|
||||||
|
int insertVersion(DbVersionEntity entity);
|
||||||
|
|
||||||
|
//执行sql
|
||||||
|
@Update("${sql}")
|
||||||
|
void updateSql(@Param("sql") String sql);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.glxp.api.admin.entity.info;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class DbVersionEntity {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String version;
|
||||||
|
private String remark;
|
||||||
|
private Date created;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.glxp.api.admin.entity.info;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SchemaData {
|
||||||
|
/**
|
||||||
|
* 版本号
|
||||||
|
*/
|
||||||
|
public String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件名
|
||||||
|
*/
|
||||||
|
public String fileName;
|
||||||
|
|
||||||
|
public SchemaData(String version, String fileName) {
|
||||||
|
this.version = version;
|
||||||
|
this.fileName = fileName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<mapper namespace="com.glxp.api.admin.dao.info.DbVersionDao">
|
||||||
|
|
||||||
|
|
||||||
|
<select id="selectVersion" resultType="int">
|
||||||
|
selecT count(1)
|
||||||
|
from db_version
|
||||||
|
where version = #{version}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectTableExist" resultType="int">
|
||||||
|
select count(*) count
|
||||||
|
from information_schema.TABLES
|
||||||
|
where TABLE_NAME = #{tableName} and table_schema = (select database())
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertVersion">
|
||||||
|
insert into db_version(id, version, remark, created)
|
||||||
|
values (uuid(), #{version}, #{remark}, #{created})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,101 @@
|
|||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
DROP TABLE IF EXISTS `db_version`;
|
||||||
|
CREATE TABLE `db_version` (
|
||||||
|
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||||
|
`version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '版本号',
|
||||||
|
`created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '数据版本' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|
||||||
|
|
||||||
|
/* 创建函数Pro_Temp_ColumnWork操作表字段 */
|
||||||
|
DROP PROCEDURE IF EXISTS Pro_Temp_ColumnWork;
|
||||||
|
CREATE PROCEDURE `Pro_Temp_ColumnWork` ( TableName VARCHAR ( 50 ), ColumnName VARCHAR ( 50 ), SqlStr VARCHAR ( 4000 ), CType INT ) BEGIN
|
||||||
|
DECLARE
|
||||||
|
Rows1 INT;
|
||||||
|
|
||||||
|
SET Rows1 = 0;
|
||||||
|
SELECT
|
||||||
|
COUNT(*) INTO Rows1
|
||||||
|
FROM
|
||||||
|
INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE
|
||||||
|
table_schema = DATABASE ()
|
||||||
|
AND upper( table_name )= TableName
|
||||||
|
AND upper( column_name )= ColumnName;
|
||||||
|
IF
|
||||||
|
( CType = 1 AND Rows1 <= 0 ) THEN
|
||||||
|
|
||||||
|
SET SqlStr := CONCAT( 'ALTER TABLE ', TableName, ' ADD COLUMN ', ColumnName, ' ', SqlStr );
|
||||||
|
|
||||||
|
ELSEIF ( CType = 2 AND Rows1 > 0 ) THEN
|
||||||
|
|
||||||
|
SET SqlStr := CONCAT( 'ALTER TABLE ', TableName, ' MODIFY ', ColumnName, ' ', SqlStr );
|
||||||
|
|
||||||
|
ELSEIF ( CType = 3 AND Rows1 > 0 ) THEN
|
||||||
|
|
||||||
|
SET SqlStr := CONCAT( 'ALTER TABLE ', TableName, ' DROP COLUMN ', ColumnName );
|
||||||
|
ELSE
|
||||||
|
SET SqlStr := '';
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
IF
|
||||||
|
( SqlStr <> '' ) THEN
|
||||||
|
|
||||||
|
SET @SQL1 = SqlStr;
|
||||||
|
PREPARE stmt1
|
||||||
|
FROM
|
||||||
|
@SQL1;
|
||||||
|
EXECUTE stmt1;
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
END;
|
||||||
|
/** 函数创建结束 **/
|
||||||
|
|
||||||
|
/*创建定义普通索引函数*/
|
||||||
|
DROP PROCEDURE IF EXISTS Modify_index;
|
||||||
|
|
||||||
|
CREATE PROCEDURE Modify_index (
|
||||||
|
TableName VARCHAR ( 50 ),
|
||||||
|
ColumnNames VARCHAR ( 500 ),
|
||||||
|
idx_name VARCHAR ( 50 ),
|
||||||
|
idx_type VARCHAR ( 50 )) BEGIN
|
||||||
|
DECLARE
|
||||||
|
Rows1 int;
|
||||||
|
DECLARE
|
||||||
|
SqlStr VARCHAR(4000);
|
||||||
|
DECLARE
|
||||||
|
target_database VARCHAR ( 100 );
|
||||||
|
SELECT DATABASE
|
||||||
|
() INTO target_database;
|
||||||
|
|
||||||
|
SET Rows1 = 0;
|
||||||
|
SELECT
|
||||||
|
COUNT(*) INTO Rows1
|
||||||
|
FROM
|
||||||
|
information_schema.statistics
|
||||||
|
WHERE
|
||||||
|
table_schema = DATABASE ()
|
||||||
|
AND upper( table_name )= upper(TableName)
|
||||||
|
AND upper( index_name )= upper(idx_name);
|
||||||
|
IF Rows1<=0 THEN
|
||||||
|
SET SqlStr := CONCAT( 'alter table ', TableName, ' ADD INDEX ', idx_name, '(', ColumnNames, ') USING ', idx_type );
|
||||||
|
END IF;
|
||||||
|
IF
|
||||||
|
( SqlStr <> '' ) THEN
|
||||||
|
|
||||||
|
SET @SQL1 = SqlStr;
|
||||||
|
PREPARE stmt1
|
||||||
|
FROM
|
||||||
|
@SQL1;
|
||||||
|
EXECUTE stmt1;
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
END;
|
||||||
|
/*创建定义普通索引函数结束*/
|
Loading…
Reference in New Issue