@ -7,6 +7,7 @@ import com.dsideal.Base.Util.CommonUtil;
import com.dsideal.Base.Util.IpUtil ;
import com.dsideal.Base.Util.JwtUtil ;
import com.dsideal.Base.Util.PkUtil ;
import com.dsideal.Config.PropKit ;
import com.jfinal.plugin.activerecord.Db ;
import com.jfinal.plugin.activerecord.Page ;
import com.jfinal.plugin.activerecord.Record ;
@ -21,6 +22,8 @@ import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.util.CellRangeAddressList ;
import javax.servlet.http.HttpServletRequest ;
import java.io.File ;
import java.io.FileWriter ;
import java.text.ParseException ;
import java.text.SimpleDateFormat ;
import java.time.LocalDateTime ;
@ -412,6 +415,9 @@ public class MetaDataModel {
errorList . add ( errorMessage ) ;
}
} else if ( columnVerifyTypes [ j ] = = 2 ) {
// varchar、char 需要验证 必填长度
String columnDataType = dataList . get ( i ) . get ( "data_type" ) + "" ;
if ( columnDataType . equals ( "VARCHAR" ) | | columnDataType . equals ( "CHAR" ) ) {
errorMessage = "文件中sheet【" + table_name + "】的第" + ( i + 3 ) + "行,列【" + columnCNs [ j ] + "】数据不合格, 应该为大于0的整数! " ;
// 2: 验证数字
try {
@ -423,6 +429,10 @@ public class MetaDataModel {
System . out . println ( e . getMessage ( ) ) ;
errorList . add ( errorMessage ) ;
}
} else {
// 不需要填的时候 处理现有填写数据为空
dataList . get ( i ) . put ( columnEns [ j ] , null ) ;
}
} else if ( columnVerifyTypes [ j ] = = 3 ) {
errorMessage = "文件中sheet【" + table_name + "】的第" + ( i + 3 ) + "行,列【" + columnCNs [ j ] + "】数据不合格,应从下拉列表中选择!" ;
if ( ! "是" . equals ( dataValue ) & & ! "否" . equals ( dataValue ) ) {
@ -1120,4 +1130,232 @@ public class MetaDataModel {
return result ;
}
/ * *
* 功 能 : 【 MetaData - Task - Collect - 10 】 元 数 据 采 集 - 生 成 脚 本
* 作 者 : Kalman . CHENG ☆
* 日 期 : 2025 / 6 / 23 11 : 40
* 备 注 :
* * /
public JSONObject generateSqlScriptByTaskInfo ( int task_id , String supplier_ids ) throws Exception {
JSONObject result = new JSONObject ( ) ;
List < Record > taskList = Db . find ( "select * from t_metadata_collect_task where is_deleted = 0 and id = " + task_id + ";" ) ;
if ( taskList . isEmpty ( ) ) {
result . put ( "success" , false ) ;
result . put ( "message" , "未查询到[task_id]为" + task_id + "的采集任务信息!" ) ;
return result ;
}
String metaDataSqlScriptExportTemplate = CommonUtil . getClassPath ( ) +
PropKit . get ( "excel.MetaDataSqlScriptExportSuffix" ) . replace ( "\\" , "/" ) ;
String taskFilePath = metaDataSqlScriptExportTemplate + taskList . getFirst ( ) . getStr ( "task_name" ) + System . currentTimeMillis ( ) + File . separator ;
File taskFileDir = new File ( taskFilePath ) ;
if ( ! taskFileDir . exists ( ) ) {
taskFileDir . mkdirs ( ) ;
}
HashMap < String , String > supplierNameMap = new HashMap < > ( ) ;
HashMap < String , String > systemNameMap = new HashMap < > ( ) ;
HashMap < String , List < String > > supplierSystemIdsMap = new HashMap < > ( ) ;
String selectTaskCollectSupplierSystemSQL = " SELECT distinct t1.supplier_id, t2.supplier_name, t1.system_id, t3.system_name " +
" FROM t_metadata_collect_task_table t1, t_metadata_supplier t2, t_metadata_system t3 " +
" WHERE t1.is_deleted = 0 AND t1.supplier_id = t2.id AND t1.system_id = t3.id and t1.task_id = " + task_id + " and t1.supplier_id in (" + supplier_ids + ")" ;
List < Record > selectTaskCollectSupplierSystemResult = Db . find ( selectTaskCollectSupplierSystemSQL ) ;
for ( Record record : selectTaskCollectSupplierSystemResult ) {
String supplier_id = record . getInt ( "supplier_id" ) + "" ;
String system_id = record . getInt ( "system_id" ) + "" ;
supplierNameMap . put ( record . get ( "supplier_id" ) + "" , record . getStr ( "supplier_name" ) ) ;
systemNameMap . put ( record . get ( "system_id" ) + "" , record . getStr ( "system_name" ) ) ;
List < String > list = new ArrayList < > ( ) ;
if ( supplierSystemIdsMap . get ( supplier_id ) ! = null ) {
list = supplierSystemIdsMap . get ( supplier_id ) ;
}
list . add ( system_id ) ;
supplierSystemIdsMap . put ( supplier_id , list ) ;
}
HashMap < String , List < Record > > systemTableListMap = new HashMap < > ( ) ;
String selectSystemTableListSQL = " SELECT " +
" system_id, task_id, id as table_id, table_name, table_description " +
" FROM t_metadata_collect_task_table " +
" WHERE is_deleted = 0 and task_id = " + task_id + " and supplier_id in (" + supplier_ids + ")" ;
List < Record > selectSystemTableList = Db . find ( selectSystemTableListSQL ) ;
for ( Record record : selectSystemTableList ) {
String system_id = record . getInt ( "system_id" ) + "" ;
List < Record > list = new ArrayList < > ( ) ;
if ( systemTableListMap . get ( system_id ) ! = null ) {
list = systemTableListMap . get ( system_id ) ;
}
list . add ( record ) ;
systemTableListMap . put ( system_id , list ) ;
}
HashMap < String , List < Record > > tableColumnListMap = new HashMap < > ( ) ;
String selectTableColumnListSQL = " SELECT " +
" task_id,system_id,table_id,id as column_id,column_name,data_type,max_length,is_nullable,primary_key,column_default,column_comment,column_create_time,column_update_time,development_manager " +
" FROM t_metadata_collect_task_column " +
" WHERE is_deleted = 0 and task_id = " + task_id + " and supplier_id in (" + supplier_ids + ")" ;
List < Record > selectTableColumnList = Db . find ( selectTableColumnListSQL ) ;
for ( Record record : selectTableColumnList ) {
String table_id = record . getInt ( "table_id" ) + "" ;
List < Record > list = new ArrayList < > ( ) ;
if ( tableColumnListMap . get ( table_id ) ! = null ) {
list = tableColumnListMap . get ( table_id ) ;
}
list . add ( record ) ;
tableColumnListMap . put ( table_id , list ) ;
}
// 遍历supplier, system, table 生成脚本
Iterator < Map . Entry < String , List < String > > > iterator = supplierSystemIdsMap . entrySet ( ) . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
Map . Entry < String , List < String > > entry = iterator . next ( ) ;
String supplier_id = entry . getKey ( ) ;
String supplier_name = supplierNameMap . getOrDefault ( supplier_id , "" ) ;
String taskSupplierFilePath = taskFilePath + supplier_name + File . separator ;
File taskSupplierFileDir = new File ( taskSupplierFilePath ) ;
if ( ! taskSupplierFileDir . exists ( ) ) {
taskSupplierFileDir . mkdirs ( ) ;
}
List < String > systemList = entry . getValue ( ) ;
for ( String system_id : systemList ) {
String system_name = systemNameMap . getOrDefault ( system_id , "" ) ;
List < Record > tableList = systemTableListMap . containsKey ( system_id ) ? systemTableListMap . get ( system_id ) : new ArrayList < > ( ) ;
List < String > tableSqlList = new ArrayList < > ( ) ;
// 遍历table
for ( Record record : tableList ) {
String table_id = record . getInt ( "table_id" ) + "" ;
String table_name = record . getStr ( "table_name" ) ;
String table_description = record . getStr ( "table_description" ) ;
String createTableSQL = " CREATE TABLE IF NOT EXISTS `" + table_name + "` (\n" ;
List < Record > columnList = tableColumnListMap . containsKey ( table_id ) ? tableColumnListMap . get ( table_id ) : new ArrayList < > ( ) ;
if ( columnList . size ( ) > 0 ) {
String primaryKeyColumnId = "" ;
Record primaryRecord = null ;
for ( Record columnRecord : columnList ) {
if ( columnRecord . getInt ( "primary_key" ) = = 1 ) {
primaryKeyColumnId = columnRecord . getInt ( "column_id" ) + "" ;
primaryRecord = columnRecord ;
break ;
}
}
if ( primaryRecord ! = null ) {
String column_name = primaryRecord . getStr ( "column_name" ) ;
String data_type = primaryRecord . getStr ( "data_type" ) ;
int max_length = primaryRecord . getInt ( "max_length" ) ;
int is_nullable = primaryRecord . getInt ( "is_nullable" ) ;
int primary_key = primaryRecord . getInt ( "primary_key" ) ;
String column_default = primaryRecord . getStr ( "column_default" ) ;
String column_comment = primaryRecord . getStr ( "column_comment" ) ;
createTableSQL + = " `" + column_name + "` " ;
if ( "INT" . equals ( data_type ) | | "BIGINT" . equals ( data_type ) | | "DECIMAL" . equals ( data_type ) ) {
// INT、BIGINT、DECIMAL
if ( "INT" . equals ( data_type ) ) {
createTableSQL + = "INT(11) " ;
} else if ( "BIGINT" . equals ( data_type ) ) {
createTableSQL + = "BIGINT(20) " ;
} else {
createTableSQL + = "DECIMAL(20,6) " ;
}
} else if ( "VARCHAR" . equals ( data_type ) | | "CHAR" . equals ( data_type ) ) {
// VARCHAR、CHAR
createTableSQL + = data_type + "(" + max_length + ") " ;
} else {
// TEXT、DATE、DATETIME、BOOLEAN、FLOAT、DOUBLE
createTableSQL + = data_type + " " ;
}
createTableSQL + = "NOT NULL " ;
if ( column_comment ! = null | | ! "null" . equals ( column_comment ) | | ! "NULL" . equals ( column_comment ) | | ! "" . equals ( column_comment ) ) {
createTableSQL + = "COMMENT '" + column_comment + "', \n" ;
}
}
// 遍历非主键字段
for ( Record columnRecord : columnList ) {
String column_id = columnRecord . getStr ( "column_id" ) ;
if ( column_id . equals ( primaryKeyColumnId ) ) {
continue ;
}
String column_name = columnRecord . getStr ( "column_name" ) ;
String data_type = columnRecord . getStr ( "data_type" ) ;
int max_length = columnRecord . getInt ( "max_length" ) ;
int is_nullable = columnRecord . getInt ( "is_nullable" ) ;
String column_default = columnRecord . getStr ( "column_default" ) ;
String column_comment = columnRecord . getStr ( "column_comment" ) ;
createTableSQL + = " `" + column_name + "` " ;
if ( "INT" . equals ( data_type ) | | "BIGINT" . equals ( data_type ) | | "DECIMAL" . equals ( data_type ) ) {
// INT、BIGINT、DECIMAL
if ( "INT" . equals ( data_type ) ) {
createTableSQL + = "INT(11) " ;
} else if ( "BIGINT" . equals ( data_type ) ) {
createTableSQL + = "BIGINT(20) " ;
} else {
createTableSQL + = "DECIMAL(20,6) " ;
}
} else if ( "VARCHAR" . equals ( data_type ) | | "CHAR" . equals ( data_type ) ) {
// VARCHAR、CHAR
createTableSQL + = data_type + "(" + max_length + ") " ;
} else {
// TEXT、DATE、DATETIME、BOOLEAN、FLOAT、DOUBLE
createTableSQL + = data_type + " " ;
}
if ( is_nullable = = 1 ) {
createTableSQL + = "NOT NULL " ;
} else {
createTableSQL + = "NULL " ;
}
if ( column_default ! = null & & ! "null" . equals ( column_default ) & & ! "NULL" . equals ( column_default ) & & ! "" . equals ( column_default ) ) {
if ( "INT" . equals ( data_type ) | | "BIGINT" . equals ( data_type ) | | "DECIMAL" . equals ( data_type ) | |
"FLOAT" . equals ( data_type ) | | "DOUBLE" . equals ( data_type ) | | "BOOLEAN" . equals ( data_type ) ) {
createTableSQL + = "DEFAULT " + column_default + " " ;
} else if ( "VARCHAR" . equals ( data_type ) | | "CHAR" . equals ( data_type ) | | "TEXT" . equals ( data_type ) ) {
createTableSQL + = "DEFAULT '" + column_default + "' " ;
} else if ( "DATE" . equals ( data_type ) | | "DATETIME" . equals ( data_type ) ) {
if ( column_default . contains ( "()" ) ) {
createTableSQL + = "DEFAULT " + column_default + " " ;
} else {
createTableSQL + = "DEFAULT '" + column_default + "' " ;
}
}
}
if ( column_comment ! = null | | ! "null" . equals ( column_comment ) | | ! "NULL" . equals ( column_comment ) | | ! "" . equals ( column_comment ) ) {
createTableSQL + = "COMMENT '" + column_comment + "', \n" ;
}
}
createTableSQL + = " PRIMARY KEY (`" + primaryRecord . get ( "column_name" ) + "`) \n" ;
createTableSQL + = ") ENGINE = InnoDB CHARACTER SET='utf8' COLLATE='utf8_general_ci' COMMENT='" + ( table_description = = null ? "" : table_description ) + "' ROW_FORMAT=COMPACT;" ;
tableSqlList . add ( createTableSQL ) ;
}
}
// 生成文件
String systemWriterStr = "" ;
for ( String sql : tableSqlList ) {
systemWriterStr + = sql + "\n\n\n" ;
}
File systemFile = new File ( taskSupplierFilePath + system_name + ".sql" ) ;
try {
FileWriter systemWriter = new FileWriter ( systemFile ) ;
systemWriter . write ( systemWriterStr ) ;
systemWriter . close ( ) ;
} catch ( Exception e ) {
System . out . println ( "写入sql文件出错! " ) ;
result . put ( "success" , false ) ;
result . put ( "message" , "写入sql文件出错! " ) ;
return result ;
}
}
}
result . put ( "success" , true ) ;
result . put ( "message" , "SQL文件生成成功! " ) ;
result . put ( "taskFilePath" , taskFilePath ) ;
return result ;
}
}