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.
		
		
		
		
		
			
		
			
				
					
					
						
							258 lines
						
					
					
						
							8.3 KiB
						
					
					
				
			
		
		
	
	
							258 lines
						
					
					
						
							8.3 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)); | |
|         // 设置默认类型 | |
|         column.setJavaType(GenConstants.TYPE_STRING); | |
| 
 | |
|         if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) | |
|         { | |
|             // 字符串长度超过500设置为文本域 | |
|             Integer columnLength = getColumnLength(column.getColumnType()); | |
|             String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? 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_IMAGE_UPLOAD); | |
|         } | |
|         // 文件字段设置文件上传控件 | |
|         else if (StringUtils.endsWithIgnoreCase(columnName, "file")) | |
|         { | |
|             column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); | |
|         } | |
|         // 内容字段设置富文本控件 | |
|         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; | |
|         } | |
|     } | |
| }
 | |
| 
 |