You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
8.0 KiB
252 lines
8.0 KiB
package com.ruoyi.generator.util; |
|
|
|
import java.util.Arrays; |
|
import org.apache.commons.lang3.RegExUtils; |
|
import com.ruoyi.common.constant.GenConstants; |
|
import com.ruoyi.common.utils.StringUtils; |
|
import com.ruoyi.generator.config.GenConfig; |
|
import com.ruoyi.generator.domain.GenTable; |
|
import com.ruoyi.generator.domain.GenTableColumn; |
|
|
|
/** |
|
* 代码生成器 工具类 |
|
* |
|
* @author ruoyi |
|
*/ |
|
public class GenUtils |
|
{ |
|
/** |
|
* 初始化表信息 |
|
*/ |
|
public static void initTable(GenTable genTable, String operName) |
|
{ |
|
genTable.setClassName(convertClassName(genTable.getTableName())); |
|
genTable.setPackageName(GenConfig.getPackageName()); |
|
genTable.setModuleName(getModuleName(GenConfig.getPackageName())); |
|
genTable.setBusinessName(getBusinessName(genTable.getTableName())); |
|
genTable.setFunctionName(replaceText(genTable.getTableComment())); |
|
genTable.setFunctionAuthor(GenConfig.getAuthor()); |
|
genTable.setCreateBy(operName); |
|
} |
|
|
|
/** |
|
* 初始化列属性字段 |
|
*/ |
|
public static void initColumnField(GenTableColumn column, GenTable table) |
|
{ |
|
String dataType = getDbType(column.getColumnType()); |
|
String columnName = column.getColumnName(); |
|
column.setTableId(table.getTableId()); |
|
column.setCreateBy(table.getCreateBy()); |
|
// 设置java字段名 |
|
column.setJavaField(StringUtils.toCamelCase(columnName)); |
|
|
|
if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType)) |
|
{ |
|
column.setJavaType(GenConstants.TYPE_STRING); |
|
// 字符串长度超过500设置为文本域 |
|
Integer columnLength = getColumnLength(column.getColumnType()); |
|
String htmlType = columnLength >= 500 ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; |
|
column.setHtmlType(htmlType); |
|
} |
|
else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) |
|
{ |
|
column.setJavaType(GenConstants.TYPE_DATE); |
|
column.setHtmlType(GenConstants.HTML_DATETIME); |
|
} |
|
else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) |
|
{ |
|
column.setHtmlType(GenConstants.HTML_INPUT); |
|
|
|
// 如果是浮点型 统一用BigDecimal |
|
String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); |
|
if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) |
|
{ |
|
column.setJavaType(GenConstants.TYPE_BIGDECIMAL); |
|
} |
|
// 如果是整形 |
|
else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) |
|
{ |
|
column.setJavaType(GenConstants.TYPE_INTEGER); |
|
} |
|
// 长整形 |
|
else |
|
{ |
|
column.setJavaType(GenConstants.TYPE_LONG); |
|
} |
|
} |
|
|
|
// 插入字段(默认所有字段都需要插入) |
|
column.setIsInsert(GenConstants.REQUIRE); |
|
|
|
// 编辑字段 |
|
if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) |
|
{ |
|
column.setIsEdit(GenConstants.REQUIRE); |
|
} |
|
// 列表字段 |
|
if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) |
|
{ |
|
column.setIsList(GenConstants.REQUIRE); |
|
} |
|
// 查询字段 |
|
if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) |
|
{ |
|
column.setIsQuery(GenConstants.REQUIRE); |
|
} |
|
|
|
// 查询字段类型 |
|
if (StringUtils.endsWithIgnoreCase(columnName, "name")) |
|
{ |
|
column.setQueryType(GenConstants.QUERY_LIKE); |
|
} |
|
// 状态字段设置单选框 |
|
if (StringUtils.endsWithIgnoreCase(columnName, "status")) |
|
{ |
|
column.setHtmlType(GenConstants.HTML_RADIO); |
|
} |
|
// 类型&性别字段设置下拉框 |
|
else if (StringUtils.endsWithIgnoreCase(columnName, "type") |
|
|| StringUtils.endsWithIgnoreCase(columnName, "sex")) |
|
{ |
|
column.setHtmlType(GenConstants.HTML_SELECT); |
|
} |
|
// 文件字段设置上传控件 |
|
else if (StringUtils.endsWithIgnoreCase(columnName, "image")) |
|
{ |
|
column.setHtmlType(GenConstants.HTML_UPLOAD_IMAGE); |
|
} |
|
// 内容字段设置富文本控件 |
|
else if (StringUtils.endsWithIgnoreCase(columnName, "content")) |
|
{ |
|
column.setHtmlType(GenConstants.HTML_EDITOR); |
|
} |
|
} |
|
|
|
/** |
|
* 校验数组是否包含指定值 |
|
* |
|
* @param arr 数组 |
|
* @param targetValue 值 |
|
* @return 是否包含 |
|
*/ |
|
public static boolean arraysContains(String[] arr, String targetValue) |
|
{ |
|
return Arrays.asList(arr).contains(targetValue); |
|
} |
|
|
|
/** |
|
* 获取模块名 |
|
* |
|
* @param packageName 包名 |
|
* @return 模块名 |
|
*/ |
|
public static String getModuleName(String packageName) |
|
{ |
|
int lastIndex = packageName.lastIndexOf("."); |
|
int nameLength = packageName.length(); |
|
String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength); |
|
return moduleName; |
|
} |
|
|
|
/** |
|
* 获取业务名 |
|
* |
|
* @param tableName 表名 |
|
* @return 业务名 |
|
*/ |
|
public static String getBusinessName(String tableName) |
|
{ |
|
int lastIndex = tableName.lastIndexOf("_"); |
|
int nameLength = tableName.length(); |
|
String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength); |
|
return businessName; |
|
} |
|
|
|
/** |
|
* 表名转换成Java类名 |
|
* |
|
* @param tableName 表名称 |
|
* @return 类名 |
|
*/ |
|
public static String convertClassName(String tableName) |
|
{ |
|
boolean autoRemovePre = GenConfig.getAutoRemovePre(); |
|
String tablePrefix = GenConfig.getTablePrefix(); |
|
if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) |
|
{ |
|
String[] searchList = StringUtils.split(tablePrefix, ","); |
|
tableName = replaceFirst(tableName, searchList); |
|
} |
|
return StringUtils.convertToCamelCase(tableName); |
|
} |
|
|
|
/** |
|
* 批量替换前缀 |
|
* |
|
* @param replacementm 替换值 |
|
* @param searchList 替换列表 |
|
* @return |
|
*/ |
|
public static String replaceFirst(String replacementm, String[] searchList) |
|
{ |
|
String text = replacementm; |
|
for (String searchString : searchList) |
|
{ |
|
if (replacementm.startsWith(searchString)) |
|
{ |
|
text = replacementm.replaceFirst(searchString, ""); |
|
break; |
|
} |
|
} |
|
return text; |
|
} |
|
|
|
/** |
|
* 关键字替换 |
|
* |
|
* @param text 需要被替换的名字 |
|
* @return 替换后的名字 |
|
*/ |
|
public static String replaceText(String text) |
|
{ |
|
return RegExUtils.replaceAll(text, "(?:表|若依)", ""); |
|
} |
|
|
|
/** |
|
* 获取数据库类型字段 |
|
* |
|
* @param columnType 列类型 |
|
* @return 截取后的列类型 |
|
*/ |
|
public static String getDbType(String columnType) |
|
{ |
|
if (StringUtils.indexOf(columnType, "(") > 0) |
|
{ |
|
return StringUtils.substringBefore(columnType, "("); |
|
} |
|
else |
|
{ |
|
return columnType; |
|
} |
|
} |
|
|
|
/** |
|
* 获取字段长度 |
|
* |
|
* @param columnType 列类型 |
|
* @return 截取后的列类型 |
|
*/ |
|
public static Integer getColumnLength(String columnType) |
|
{ |
|
if (StringUtils.indexOf(columnType, "(") > 0) |
|
{ |
|
String length = StringUtils.substringBetween(columnType, "(", ")"); |
|
return Integer.valueOf(length); |
|
} |
|
else |
|
{ |
|
return 0; |
|
} |
|
} |
|
}
|
|
|