feat(test): 添加生成最后执行SQL的测试功能

- 新增GenerateLastExecuteSQLTest单元测试类
- 实现自动生成z_exec_last.sql文件的功能
- 根据指定日期读取对应SQL目录下的所有文件
- 过滤并提取SQL文件名用于构建更新语句
- 自动生成针对LOWCODE_DBFORM表的更新脚本
- 支持按月分类存储SQL文件的目录结构处理
This commit is contained in:
2025-11-21 17:23:48 +08:00
parent 4cdf5051e6
commit 79f015b741
2 changed files with 67 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
package com.jeelowcode.test.sql;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlUtil;
import com.jeelowcode.tool.framework.test.core.ut.BaseMockitoUnitTest;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 描述生成最后执行SQL
*
* @author shelly
*/
public class GenerateLastExecuteSQLTest extends BaseMockitoUnitTest {
@Test
public void testGenerateLastExecuteSQL() throws Exception {
String executeDateStr = "20251121";
Date executeDate = DateUtil.parse(executeDateStr, "yyyyMMdd");
String monthStr = DateUtil.format(executeDate, "yyyyMM");
// 获取项目目录下的SQL目录路径
String projectPath = System.getProperty("user.dir");
File adminPath = new File(projectPath);
File baseProjectPath = adminPath.getParentFile();
File sqlPath = new File(baseProjectPath, "SQL");
File monthSqlPath = new File(sqlPath, monthStr);
if (monthSqlPath.exists()) {
File dateSqlPath = new File(monthSqlPath, executeDateStr);
if (dateSqlPath.exists()) {
// 查询目录下所有的文件
List<File> sqlFileList = FileUtil.loopFiles(dateSqlPath);
if (CollUtil.isNotEmpty(sqlFileList)) {
// 将sqlFileList转换成字符串列表字符串使用文件名不带后缀
List<String> sqlFileNameList = sqlFileList.stream()
.map(file -> file.getName().substring(0, file.getName().lastIndexOf(".")))
.filter(fileName -> !StrUtil.equals(fileName, "z_exec_last"))
.map(fileName -> StrUtil.concat(true, "'", fileName, "'"))
.collect(Collectors.toList());
//将列表sqlFileNameList转换成字符串使用逗号分隔
String template = "update \"LOWCODE_FRAME\".\"LOWCODE_DBFORM\" set IS_DB_SYNC='N' where TABLE_NAME in ({});";
String formatSql = SqlUtil.formatSql(StrUtil.format(template, CollUtil.join(sqlFileNameList, ",")));
File lastExec = new File(dateSqlPath, "z_exec_last.sql");
if (lastExec.exists() || (!lastExec.exists() && lastExec.createNewFile())) {
// 将formatSql写到lastExec中
FileUtil.writeString(formatSql, lastExec, "utf-8");
}
}
}
}
}
}