/** * 生成到文件 * * @param tpl * @param model * @param replaceFile * @return */ public static String generateToFile( GenTemplate tpl, Map<String, Object> model, boolean isReplaceFile) { // 获取生成文件 String fileName = Global.getProjectPath() + File.separator + StringUtils.replaceEach( FreeMarkers.renderString(tpl.getFilePath() + "/", model), new String[] {"//", "/", "."}, new String[] {File.separator, File.separator, File.separator}) + FreeMarkers.renderString(tpl.getFileName(), model); logger.debug(" fileName === " + fileName); // 获取生成文件内容 String content = FreeMarkers.renderString(StringUtils.trimToEmpty(tpl.getContent()), model); logger.debug(" content === \r\n" + content); // 如果选择替换文件,则删除原文件 if (isReplaceFile) { FileUtils.deleteFile(fileName); } // 创建并写入文件 if (FileUtils.createFile(fileName)) { FileUtils.writeToFile(fileName, content, true); logger.debug(" file create === " + fileName); return "生成成功:" + fileName + "<br/>"; } else { logger.debug(" file extents === " + fileName); return "文件已存在:" + fileName + "<br/>"; } }
/** * 根据分类获取模板列表 * * @param config * @param genScheme * @param isChildTable 是否是子表 * @return */ public static List<GenTemplate> getTemplateList( GenConfig config, String category, boolean isChildTable) { List<GenTemplate> templateList = Lists.newArrayList(); if (config != null && config.getCategoryList() != null && category != null) { for (GenCategory e : config.getCategoryList()) { if (category.equals(e.getValue())) { List<String> list = null; if (!isChildTable) { list = e.getTemplate(); } else { list = e.getChildTableTemplate(); } if (list != null) { for (String s : list) { if (StringUtils.startsWith(s, GenCategory.CATEGORY_REF)) { templateList.addAll( getTemplateList( config, StringUtils.replace(s, GenCategory.CATEGORY_REF, ""), false)); } else { GenTemplate template = fileToObject(s, GenTemplate.class); if (template != null) { templateList.add(template); } } } } break; } } } return templateList; }
/** * 获取模板路径 * * @return */ public static String getTemplatePath() { try { File file = new DefaultResourceLoader().getResource("").getFile(); if (file != null) { return file.getAbsolutePath() + File.separator + StringUtils.replaceEach( GenUtils.class.getName(), new String[] {"util." + GenUtils.class.getSimpleName(), "."}, new String[] {"template", File.separator}); } } catch (Exception e) { logger.error("{}", e); } return ""; }
/** * 初始化列属性字段 * * @param genTable */ public static void initColumnField(GenTable genTable) { for (GenTableColumn column : genTable.getColumnList()) { // 如果是不是新增列,则跳过。 if (StringUtils.isNotBlank(column.getId())) { continue; } // 设置字段说明 if (StringUtils.isBlank(column.getComments())) { column.setComments(column.getName()); } // 设置java类型 if (StringUtils.startsWithIgnoreCase(column.getJdbcType(), "CHAR") || StringUtils.startsWithIgnoreCase(column.getJdbcType(), "VARCHAR") || StringUtils.startsWithIgnoreCase(column.getJdbcType(), "NARCHAR")) { column.setJavaType("String"); } else if (StringUtils.startsWithIgnoreCase(column.getJdbcType(), "DATETIME") || StringUtils.startsWithIgnoreCase(column.getJdbcType(), "DATE") || StringUtils.startsWithIgnoreCase(column.getJdbcType(), "TIMESTAMP")) { column.setJavaType("java.util.Date"); column.setShowType("dateselect"); } else if (StringUtils.startsWithIgnoreCase(column.getJdbcType(), "BIGINT") || StringUtils.startsWithIgnoreCase(column.getJdbcType(), "NUMBER")) { // 如果是浮点型 String[] ss = StringUtils.split(StringUtils.substringBetween(column.getJdbcType(), "(", ")"), ","); if (ss != null && ss.length == 2 && Integer.parseInt(ss[1]) > 0) { column.setJavaType("Double"); } // 如果是整形 else if (ss != null && ss.length == 1 && Integer.parseInt(ss[0]) <= 10) { column.setJavaType("Integer"); } // 长整形 else { column.setJavaType("Long"); } } // 设置java字段名 column.setJavaField(StringUtils.toCamelCase(column.getName())); // 是否是主键 column.setIsPk(genTable.getPkList().contains(column.getName()) ? "1" : "0"); // 插入字段 column.setIsInsert("1"); // 编辑字段 if (!StringUtils.equalsIgnoreCase(column.getName(), "id") && !StringUtils.equalsIgnoreCase(column.getName(), "create_by") && !StringUtils.equalsIgnoreCase(column.getName(), "create_date") && !StringUtils.equalsIgnoreCase(column.getName(), "del_flag")) { column.setIsEdit("1"); } // 列表字段 if (StringUtils.equalsIgnoreCase(column.getName(), "name") || StringUtils.equalsIgnoreCase(column.getName(), "title") || StringUtils.equalsIgnoreCase(column.getName(), "remarks") || StringUtils.equalsIgnoreCase(column.getName(), "update_date")) { column.setIsList("1"); } // 查询字段 if (StringUtils.equalsIgnoreCase(column.getName(), "name") || StringUtils.equalsIgnoreCase(column.getName(), "title")) { column.setIsQuery("1"); } // 查询字段类型 if (StringUtils.equalsIgnoreCase(column.getName(), "name") || StringUtils.equalsIgnoreCase(column.getName(), "title")) { column.setQueryType("like"); } // 设置特定类型和字段名 // 用户 if (StringUtils.startsWithIgnoreCase(column.getName(), "user_id")) { column.setJavaType(User.class.getName()); column.setJavaField(column.getJavaField().replaceAll("Id", ".id|name")); column.setShowType("userselect"); } // 部门 else if (StringUtils.startsWithIgnoreCase(column.getName(), "office_id")) { column.setJavaType(Office.class.getName()); column.setJavaField(column.getJavaField().replaceAll("Id", ".id|name")); column.setShowType("officeselect"); } // 创建者、更新者 else if (StringUtils.startsWithIgnoreCase(column.getName(), "create_by") || StringUtils.startsWithIgnoreCase(column.getName(), "update_by")) { column.setJavaType(User.class.getName()); column.setJavaField(column.getJavaField() + ".id"); } // 创建时间、更新时间 else if (StringUtils.startsWithIgnoreCase(column.getName(), "create_date") || StringUtils.startsWithIgnoreCase(column.getName(), "update_date")) { column.setShowType("dateselect"); } // 备注、内容 else if (StringUtils.equalsIgnoreCase(column.getName(), "remarks") || StringUtils.equalsIgnoreCase(column.getName(), "content")) { column.setShowType("textarea"); } // 父级ID else if (StringUtils.equalsIgnoreCase(column.getName(), "parent_id")) { column.setJavaType("This"); column.setJavaField("parent.id|name"); column.setShowType("treeselect"); } // 所有父级ID else if (StringUtils.equalsIgnoreCase(column.getName(), "parent_ids")) { column.setQueryType("like"); } // 删除标记 else if (StringUtils.equalsIgnoreCase(column.getName(), "del_flag")) { column.setShowType("radiobox"); column.setDictType("del_flag"); } } }
/** * 获取数据模型 * * @param genScheme * @param genTable * @return */ public static Map<String, Object> getDataModel(GenScheme genScheme) { Map<String, Object> model = Maps.newHashMap(); model.put("packageName", StringUtils.lowerCase(genScheme.getPackageName())); model.put( "lastPackageName", StringUtils.substringAfterLast((String) model.get("packageName"), ".")); model.put("moduleName", StringUtils.lowerCase(genScheme.getModuleName())); model.put("subModuleName", StringUtils.lowerCase(genScheme.getSubModuleName())); model.put("className", StringUtils.uncapitalize(genScheme.getGenTable().getClassName())); model.put("ClassName", StringUtils.capitalize(genScheme.getGenTable().getClassName())); model.put("functionName", genScheme.getFunctionName()); model.put("functionNameSimple", genScheme.getFunctionNameSimple()); model.put( "functionAuthor", StringUtils.isNotBlank(genScheme.getFunctionAuthor()) ? genScheme.getFunctionAuthor() : UserUtils.getUser().getName()); model.put("functionVersion", DateUtils.getDate()); model.put( "urlPrefix", model.get("moduleName") + (StringUtils.isNotBlank(genScheme.getSubModuleName()) ? "/" + StringUtils.lowerCase(genScheme.getSubModuleName()) : "") + "/" + model.get("className")); model.put( "viewPrefix", // StringUtils.substringAfterLast(model.get("packageName"),".")+"/"+ model.get("urlPrefix")); model.put( "permissionPrefix", model.get("moduleName") + (StringUtils.isNotBlank(genScheme.getSubModuleName()) ? ":" + StringUtils.lowerCase(genScheme.getSubModuleName()) : "") + ":" + model.get("className")); model.put("dbType", Global.getConfig("jdbc.type")); model.put("table", genScheme.getGenTable()); return model; }