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); 
 | 
        column.setQueryType(GenConstants.QUERY_EQ); 
 | 
  
 | 
        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(); 
 | 
        return StringUtils.substring(packageName, lastIndex + 1, nameLength); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取业务名 
 | 
     *  
 | 
     * @param tableName 表名 
 | 
     * @return 业务名 
 | 
     */ 
 | 
    public static String getBusinessName(String tableName) 
 | 
    { 
 | 
        int lastIndex = tableName.lastIndexOf("_"); 
 | 
        int nameLength = tableName.length(); 
 | 
        return StringUtils.substring(tableName, lastIndex + 1, nameLength); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 表名转换成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; 
 | 
        } 
 | 
    } 
 | 
} 
 |