From c635d78b479510ebe2556a420948effcd30a0731 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 21 十二月 2024 18:40:43 +0800 Subject: [PATCH] 新建德森项目分支 --- zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java | 1900 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 950 insertions(+), 950 deletions(-) diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java index e04e49e..93edf07 100644 --- a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java +++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java @@ -1,950 +1,950 @@ -package com.zy.asrs.framework.generators; - -import com.zy.asrs.framework.common.Cools; -import com.zy.asrs.framework.generators.constant.SqlOsType; -import com.zy.asrs.framework.generators.domain.Column; -import com.zy.asrs.framework.generators.utils.GeneratorUtils; -import org.springframework.core.io.ClassPathResource; - -import java.io.*; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Created by vincent on 2019-06-18 - */ -public class VueGenerator { - - private static final String BASE_DIR = "src/main/"; - private static final String JAVA_DIR = BASE_DIR + "java/"; - private static final String XML_DIR = BASE_DIR + "resources/mapper/"; - private static final String HTML_DIR = BASE_DIR + "webapp/"; - private static final String[] ALL_TEMPLATES = new String[]{ - "Controller", - "Service", - "ServiceImpl", - "Mapper", - "Entity", - "Xml", - "Index", - "Edit", - "Sql"}; - private static final ArrayList<String> SYSTEM_MODEL = new ArrayList<String>(){{ - add("User"); - add("Host"); - }}; - - - public String url; - public String username; - public String password; - public String table; - public String tableName; - public String rootPackagePath; - public String packagePath; - public boolean controller = true; - public boolean service = true; - public boolean mapper = true; - public boolean entity = true; - public boolean xml = true; - public boolean vue = true; - public boolean sql = true; - public SqlOsType sqlOsType; - public String backendPrefixPath; - public String frontendPrefixPath; - - private List<Column> columns = new ArrayList<>(); - private String fullEntityName; - private String simpleEntityName; - private String entityImport; - private String entityContent; - private String xmlContent; - private String htmlContent; - private String htmlDialogContent; - private String jsTableContent; - private String jsForeignKeyContent; - private String jsDateContent; - private String jsPrimaryKeyDoms; - private String primaryKeyColumn; - private String majorColumn; - private String systemPackagePath; - private String systemPackage; - private String itemName; - private String tableColumns; - private String formEditColumns; - private String formEditForeignKeyColumns; - - public void build() throws Exception { - init(); - for (String template : ALL_TEMPLATES){ - boolean pass = false; - String lowerCase = template.toLowerCase(); - String templatePath = lowerCase.contains("impl")?lowerCase.substring(0,lowerCase.length()-4)+"/"+lowerCase.substring(lowerCase.length()-4):lowerCase; - String directory=""; - String fileName=""; - switch (template){ - case "Controller": - pass = controller; - directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; - fileName = fullEntityName+template+".java"; - break; - case "Service": - pass = service; - directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; - fileName = fullEntityName+template+".java"; - break; - case "ServiceImpl": - pass = service; - directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; - fileName = fullEntityName+template+".java"; - break; - case "Mapper": - pass = mapper; - directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; - fileName = fullEntityName+template+".java"; - break; - case "Entity": - pass = entity; - directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; - fileName = fullEntityName+".java"; - break; - case "Xml": - pass = xml; - directory = backendPrefixPath + XML_DIR + itemName + "/"; - fileName = fullEntityName+"Mapper.xml"; - break; - case "Sql": - pass = sql; - directory = backendPrefixPath + JAVA_DIR; - fileName = simpleEntityName+".sql"; - break; - case "Index": - pass = vue; - directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; - fileName = "index.vue"; - break; - case "Edit": - pass = vue; - directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; - fileName = "edit.vue"; - break; - default: - break; - } - if (!pass){ continue; } - String content = readFile(template); - writeFile(content, directory, fileName, template); - } - } - - private void init() throws Exception { - gainDbInfo(); - fullEntityName = GeneratorUtils.getNameSpace(table); - simpleEntityName = fullEntityName.substring(0, 1).toLowerCase()+fullEntityName.substring(1); - entityContent = createEntityMsg(); - htmlContent = createHtmlMsg(); - htmlDialogContent = createHtmlDialogMsg(); - jsTableContent = createJsTableMsg(); - jsForeignKeyContent = createJsFkContent(); - jsDateContent = createJsDateContent(); - jsPrimaryKeyDoms = createJsPrimaryKeyMsg(); - primaryKeyColumn = createPrimaryMsg(); - majorColumn = createMajorMsg(); - String[] packagePathSplit = packagePath.split("\\."); - systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system"); - String[] split = systemPackagePath.split("\\."); - systemPackage = ""; - for (int i = 1;i <= split.length; i++) { - if (i != split.length) { - if (i == split.length - 1) { - systemPackage = systemPackage + split[i-1]; - } else { - systemPackage = systemPackage + split[i-1] + "."; - } - } - } - itemName = packagePathSplit[packagePathSplit.length - 1]; - tableColumns = createTableColumns(); - formEditColumns = createFormEditColumns(); - } - - private String readFile(String template){ - StringBuilder txtContentBuilder=new StringBuilder(); - ClassPathResource classPath=new ClassPathResource("templates/vue/"+template + ".txt"); - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(classPath.getInputStream()))) { - String lineContent; - while ((lineContent = reader.readLine()) != null) { - txtContentBuilder.append(lineContent).append("\n"); - } - } catch (Exception e) { - e.printStackTrace(); - } - return txtContentBuilder.toString(); - } - - private void writeFile(String content, String directory, String fileName, String template) throws IOException { - File codeDirectory=new File(directory); - if(!codeDirectory.exists()){ - codeDirectory.mkdirs(); - } - - File writerFile=new File(directory+fileName); - if(!writerFile.exists()){ - content=content. - replaceAll("@\\{TABLENAME}", table) - .replaceAll("@\\{TABLEDESC}", tableName) - .replaceAll("@\\{ENTITYIMPORT}", entityImport) - .replaceAll("@\\{ENTITYCONTENT}", entityContent) - .replaceAll("@\\{ENTITYNAME}", fullEntityName) - .replaceAll("@\\{SIMPLEENTITYNAME}", simpleEntityName) - .replaceAll("@\\{UENTITYNAME}", simpleEntityName) - .replaceAll("@\\{COMPANYNAME}",packagePath) - .replaceAll("@\\{ROOTPACKAGEPATH}",rootPackagePath) - .replaceAll("@\\{ITEMNAME}",itemName) -// .replaceAll("@\\{XMLCONTENT}", xmlContent) - .replaceAll("@\\{HTMLCONTENT}", htmlContent) - .replaceAll("@\\{HTMLDIALOGCONTENT}", htmlDialogContent) - .replaceAll("@\\{JSTABLECONTENT}", jsTableContent) - .replaceAll("@\\{JSFOREIGNKEYCONTENT}", jsForeignKeyContent) - .replaceAll("@\\{JSDATECONTENT}", jsDateContent) - .replaceAll("@\\{JSPRIMARYKEYDOMS}", jsPrimaryKeyDoms) - .replaceAll("@\\{MAJORCOLUMN}", GeneratorUtils.humpToLine(majorColumn)) - .replaceAll("@\\{MAJORCOLUMN0}", GeneratorUtils.firstCharConvert(majorColumn, false)) - .replaceAll("@\\{MAJORCOLUMN_UP}", GeneratorUtils.firstCharConvert(majorColumn, false)) - .replaceAll("@\\{PRIMARYKEYCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false)) - .replaceAll("@\\{PRIMARYKEYCOLUMN0}", GeneratorUtils.firstCharConvert(primaryKeyColumn, true)) - .replaceAll("@\\{UPCASEMARJORCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false)) - .replaceAll("@\\{SYSTEMPACKAGE}",systemPackage) - .replaceAll("@\\{TABLECOLUMNS}", tableColumns) - .replaceAll("@\\{FORMEDITCOLUMNS}", formEditColumns) - .replaceAll("@\\{FORMEDITFOREIGNKEYCOLUMNS}", formEditForeignKeyColumns) - ; - writerFile.createNewFile(); - BufferedWriter writer=new BufferedWriter(new FileWriter(writerFile)); - writer.write(content); - writer.flush(); - writer.close(); - System.out.println(fullEntityName+template+" 婧愭枃浠跺垱寤烘垚鍔燂紒"); - }else{ - System.out.println(fullEntityName+template+" 婧愭枃浠跺凡缁忓瓨鍦ㄥ垱寤哄け璐ワ紒"); - } - } - - private void gainDbInfo() throws Exception { - Connection conn; - if (null == this.sqlOsType) { - throw new RuntimeException("璇烽�夋嫨sqlOsType锛�"); - } - if (null == this.table) { - throw new RuntimeException("璇疯緭鍏able锛�"); - } - if (null == this.tableName) { - throw new RuntimeException("璇疯緭鍏ableName锛�"); - } - switch (this.sqlOsType) { - case MYSQL: - Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); - conn = DriverManager.getConnection("jdbc:mysql://"+url, username, password); - this.columns = getMysqlColumns(conn, table, true, sqlOsType); - break; - case SQL_SERVER: - Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); - conn = DriverManager.getConnection("jdbc:sqlserver://"+url, username, password); - this.columns = getSqlServerColumns(conn, table, true, sqlOsType); - break; - default: - throw new RuntimeException("璇锋寚瀹氭暟鎹簱绫诲瀷锛�"); - } - - } - - // mysql - public static List<Column> getMysqlColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception { - List<Column> result = new ArrayList<>(); - PreparedStatement ps = conn.prepareStatement("select * from " + table); - ResultSetMetaData meta = ps.executeQuery().getMetaData(); - // 鍗曡〃瀛楁鏁伴噺 - int count = meta.getColumnCount(); - ResultSet resultSet = ps.executeQuery("show full columns from " + table); - for (int i = 1; i < count + 1; i++) { - String columnName = meta.getColumnName(i); - if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){ - result.add(new Column( - conn, - meta.getColumnName(i), - GeneratorUtils.getType(meta.getColumnType(i)), - resultSet.getString("Comment"), - resultSet.getString("Key").equals("PRI"), - resultSet.getString("Key").equals("PRI"), - resultSet.getString("Null").equals("NO"), - GeneratorUtils.getColumnLength(resultSet.getString("Type")), - init, - sqlOsType - )); - } - result.forEach(column -> System.out.println(column.toString())); - } - return result; - } - - // sqlserver - public static List<Column> getSqlServerColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception { - List<Column> result = new ArrayList<>(); - PreparedStatement ps = conn.prepareStatement("select * from " + table); - ResultSetMetaData meta = ps.executeQuery().getMetaData(); - // 鍗曡〃瀛楁鏁伴噺 - int count = meta.getColumnCount(); - StringBuilder sql = new StringBuilder("SELECT \n" + - " 'Field'= a.name,\n" + - " 'Comment'= isnull(g.[value],''),\n" + - " 'Key'= case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 'PRI' else '' end,\n" + - " 'Main'= case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 'PRI' else '' end,"+ - " 'Type'= b.name,\n" + - " 'Length'= COLUMNPROPERTY(a.id,a.name,'PRECISION'),\n" + - " 'Decimals'= isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),\n" + - " 'Null'= case when a.isnullable=1 then 'Yes' else 'No' end,\n" + - " 'Default' = isnull(e.text,'')\n" + - "FROM syscolumns a\n" + - "LEFT JOIN systypes b on a.xusertype=b.xusertype\n" + - "INNER JOIN sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'\n" + - "LEFT JOIN syscomments e on a.cdefault=e.id\n" + - "LEFT JOIN sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id \n" + - "LEFT JOIN sys.extended_properties f on d.id=f.major_id and f.minor_id=0 where d.name = '") - .append(table).append("' ORDER BY a.colorder ASC"); - ResultSet resultSet = conn.prepareStatement(sql.toString()).executeQuery(); - for (int i = 1; i < count + 1; i++) { - String columnName = meta.getColumnName(i); - if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){ - result.add(new Column( - conn, - meta.getColumnName(i), - GeneratorUtils.getType(meta.getColumnType(i)), - resultSet.getString("Comment"), - resultSet.getString("Key").equals("PRI"), - resultSet.getString("Main").equals("PRI"), - resultSet.getString("Null").equals("No"), - GeneratorUtils.getColumnLength(resultSet.getString("Type")), - init, - sqlOsType - )); - } - } - result.forEach(column -> System.out.println(column.toString())); - return result; - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /**********************************************************************************************/ - /************************************* Entity鍔ㄦ�佸瓧娈� *******************************************/ - /**********************************************************************************************/ - - private String createEntityMsg(){ - if (Cools.isEmpty(systemPackagePath)) { - String[] packagePathSplit = packagePath.split("\\."); - systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system"); - } - if (columns.isEmpty()){ - return null; - } - StringBuilder sb = new StringBuilder(); - StringBuilder entityIm = new StringBuilder(); - boolean setTableField = true; - boolean setTableId = true; - boolean setDateTimeFormat = true; - for (Column column : columns){ - if (column.getType().equals("Date")){ - entityIm.append("import java.text.SimpleDateFormat;\n") - .append("import java.util.Date;\n"); - } - - // 娉ㄩ噴 - if (!Cools.isEmpty(column.getComment())){ - sb.append(" /**\n") - .append(" * ") - .append(column.getWholeComment()) - .append("\n") - .append(" */") - .append("\n"); - } - - // swagger - sb.append(" @ApiModelProperty(value= \"") - .append(column.getWholeComment()) - .append("\")\n"); - - - // 涓婚敭淇グ - if (column.isMainKey()){ - if (column.isOnly()){ - sb.append(" ") - .append("@TableId(value = \"") - .append(column.getName()) - .append("\", type = IdType.AUTO)") - .append("\n"); - } else { - sb.append(" ") - .append("@TableId(value = \"") - .append(column.getName()) - .append("\", type = IdType.INPUT)") - .append("\n"); - } - - } - - if (column.getName().equals("deleted")) { - entityIm.append("import com.baomidou.mybatisplus.annotation.TableLogic;\n"); - sb.append(" ") - .append("@TableLogic\n"); - } - - if ("Date".equals(column.getType())){ - if (setDateTimeFormat){ - entityIm.append("import org.springframework.format.annotation.DateTimeFormat;").append("\n"); - setDateTimeFormat = false; - } - sb.append(" ") - .append("@DateTimeFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")") - .append("\n"); - } - - sb.append(" ") - .append("private ") - .append(column.getType()) - .append(" ") - .append(column.getHumpName()) - .append(";") - .append("\n") - .append("\n"); - } - - // default constructor - sb.append(" public ").append(fullEntityName).append("() {}\n\n"); - // full constructor - sb.append(" public ").append(fullEntityName).append("("); - for (Column column : columns){ - if (column.isOnly()){ continue;} - sb.append(column.getType()).append(" ").append(column.getHumpName()).append(","); - } - sb.deleteCharAt(sb.length()-1); - sb.append(") {\n"); - for (Column column : columns){ - if (column.isPrimaryKey()){ continue;} - sb.append(" this.").append(column.getHumpName()).append(" = ").append(column.getHumpName()).append(";\n"); - } - sb.append(" }\n\n"); - // constructor tips - sb.append("// ").append(fullEntityName).append(" ").append(simpleEntityName).append(" = new ").append(fullEntityName).append("(\n"); - for (int i = 0; i<columns.size(); i++) { - if (columns.get(i).isOnly()){ continue;} - sb.append("// null"); - if (i < columns.size()-1){ - sb.append(","); - } - sb.append(" // ").append(columns.get(i).getComment()).append(columns.get(i).isNotNull()?"[闈炵┖]":""); - if (i < columns.size()-1){ - sb.append("\n"); - } - } - sb.append("\n// );\n\n"); - - // get set - for (Column column : columns){ - // 鏃堕棿瀛楁澧炲姞$鏍煎紡鍖� - if ("Date".equals(column.getType())){ - sb.append(" public String get") - .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)) - .append("\\$") - .append("(){\n") - .append(" if (Cools.isEmpty(this.").append(column.getHumpName()).append(")){\n") - .append(" return \"\";\n") - .append(" }\n") - .append(" return new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").format(this.") - .append(column.getHumpName()) - .append(");\n") - .append(" }\n\n"); - // 鏋氫妇瀛楁澧炲姞$鏍煎紡鍖� - } else if (!Cools.isEmpty(column.getEnums())){ - sb.append(" public String get") - .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)) - .append("\\$") - .append("(){\n") - .append(" if (null == this.").append(column.getHumpName()).append("){ return null; }\n") - .append(" switch (this.").append(column.getHumpName()).append("){\n"); - for (Map<String, Object> map : column.getEnums()){ - for (Map.Entry<String, Object> entry : map.entrySet()){ - sb.append(" case ").append(entry.getKey()).append(":\n") - .append(" return \"").append(entry.getValue()).append("\";\n"); - } - } - sb.append(" default:\n") - .append(" return String.valueOf(this.").append(column.getHumpName()).append(");\n") - .append(" }\n") - .append(" }\n\n"); - } - - // 澶栭敭淇グ - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" public String get").append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)).append("\\$").append("(){\n") - .append(" ").append(column.getForeignKey()).append("Service service = SpringUtils.getBean(").append(column.getForeignKey()).append("Service.class);\n") - .append(" ").append(column.getForeignKey()).append(" ").append(GeneratorUtils.firstCharConvert(column.getForeignKey())) - .append(" = service.getById(this.").append(column.getHumpName()).append(");\n") - .append(" if (!Cools.isEmpty(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(")){\n") - .append(" return String.valueOf(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(".get").append(column.getForeignKeyMajor()).append("());\n") - .append(" }\n") - .append(" return null;\n") - .append(" }\n\n"); - } - - } - entityImport = entityIm.toString(); - return sb.toString(); - } - - /**********************************************************************************************/ - /*********************************** Controller鍔ㄦ�佸瓧娈� *****************************************/ - /**********************************************************************************************/ - - private String createPrimaryMsg(){ - String defaultMajor = "id"; - boolean havePrimary = false; - for (Column column: columns){ - if (column.isPrimaryKey()){ - defaultMajor = column.getHumpName(); - havePrimary = true; - } - } - if (!havePrimary) { - for (Column column: columns){ - if (column.isMainKey()){ - defaultMajor = column.getHumpName(); - } - } - } - return defaultMajor; - } - - private String createMajorMsg(){ - String defaultMajor = "id"; - for (Column column: columns){ - if (column.isPrimaryKey()){ - defaultMajor = column.getHumpName(); - } - if (column.isMajor()){ - return column.getHumpName(); - } - } - return defaultMajor; - } - - /**********************************************************************************************/ - /************************************** Html鍔ㄦ�佸瓧娈� *******************************************/ - /**********************************************************************************************/ - - private String createHtmlMsg(){ - StringBuilder sb = new StringBuilder(); - for (Column column : columns){ - if (column.isPrimaryKey()){ continue;} - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" <div class=\"layui-inline\">\n") - .append(" <div class=\"layui-input-inline cool-auto-complete\">\n") - .append(" <input id=\"").append(column.getHumpName()).append("\"") - .append(" class=\"layui-input\" name=\"").append(column.getName()).append("\" type=\"text\" placeholder=\"璇疯緭鍏" autocomplete=\"off\" style=\"display: none\">\n") - .append(" <input id=\"").append(column.getHumpName()).append("\\$") - .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"").append(GeneratorUtils.supportHtmlName(column.getComment())).append("\" onfocus=this.blur()>\n") - .append(" <div class=\"cool-auto-complete-window\">\n") - .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n") - .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n") - .append(" </select>\n") - .append(" </div>\n") - .append(" </div>\n") - .append(" </div>\n"); - } - } - return sb.toString(); - } - - private String createHtmlDialogMsg() { - StringBuilder sb = new StringBuilder(); - for (Column column : columns){ - if (column.isPrimaryKey()) { - continue; - } - sb.append(" <div class=\"layui-form-item\">\n"); - sb.append(" <label class=\"layui-form-label"); - if (column.isNotNull()){ - sb.append(" layui-form-required"); - } - sb.append("\">").append(column.getComment()).append(": </label>\n"); - sb.append(" <div class=\"layui-input-block"); - // 鍏宠仈澶栭敭 - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" cool-auto-complete"); - } - sb.append("\">\n"); - // 杈撳叆妗嗙被鍨� - if (Cools.isEmpty(column.getEnums())){ - sb.append(" <input class=\"layui-input\" name=\"").append(column.getHumpName()); - if ("Date".equals(column.getType())){ - sb.append("\" id=\"").append(column.getHumpName()).append("\\$"); - } - sb.append("\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\""); - if (column.isNotNull()){ - sb.append(" lay-vertype=\"tips\" lay-verify=\"required\""); - } - // 鍏宠仈澶栭敭 - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" style=\"display: none\""); - } - sb.append(">\n"); - - // 鍏宠仈澶栭敭 - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" <input id=\"").append(column.getHumpName()).append("\\$").append("\" name=\"").append(column.getHumpName()).append("\\$") - .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\" onfocus=this.blur()>\n"); - sb.append(" <div class=\"cool-auto-complete-window\">\n") - .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"") - .append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n") - .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n") - .append(" </select>\n") - .append(" </div>\n"); - } - // 鏋氫妇绫诲瀷 - } else { - sb.append(" <select name=\"").append(column.getHumpName()).append("\""); - if (column.isNotNull()){ - sb.append(" lay-vertype=\"tips\" lay-verify=\"required\""); - } - sb.append(">\n"); - sb.append(" <option value=\"\">").append("璇烽�夋嫨").append(column.getComment()).append("</option>\n"); - for (Map<String, Object> map : column.getEnums()){ - for (Map.Entry<String, Object> entry : map.entrySet()){ - sb.append(" <option value=\"") - .append(entry.getKey()) - .append("\">") - .append(entry.getValue()) - .append("</option>\n"); - } - } - sb.append(" </select>\n"); - } - - sb.append(" </div>\n"); - sb.append(" </div>\n"); - } - return sb.toString(); - } - - private String createJsTableMsg(){ - StringBuilder sb = new StringBuilder(); - for (Column column : columns){ -// if (column.isPrimaryKey()){ continue;} - sb.append(" ,{field: '"); - if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums())){ - // 鏃堕棿銆佹灇涓� 鏍煎紡鍖� - sb.append(column.getHumpName()).append("\\$"); - } else { - // 涓婚敭淇グ - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(column.getHumpName()).append("\\$"); - } else { - sb.append(column.getHumpName()); - } - } - sb.append("', align: 'center',title: '").append(column.getComment()).append("'"); - // 澶嶉�夋 - if (column.isCheckBox()){ - sb.append(", templet:function(row){\n") - .append(" var html = \"<input value='") - .append(column.getHumpName()).append("' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='\"+row.LAY_TABLE_INDEX+\"'\";\n") - .append(" if(row.").append(column.getHumpName()).append(" === 'Y'){html += \" checked \";}\n") - .append(" html += \">\";\n") - .append(" return html;\n") - .append(" }"); - } - sb.append("}\n"); - } - return sb.toString(); - } - - private String createJsFkContent(){ - StringBuilder sb = new StringBuilder(); - for (Column column : columns){ - // 濡傛灉鏈夊叧鑱斿鍋� - if (!Cools.isEmpty(column.getForeignKeyMajor())){ - sb.append(" window.load").append(column.getForeignKey()).append("Sel = function () {").append("\n") - .append(" return xmSelect.render({").append("\n") - .append(" el: '#").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("XmlSel',").append("\n") - .append(" autoRow: true,").append("\n") - .append(" filterable: true,").append("\n") - .append(" remoteSearch: true,").append("\n") - .append(" radio: true,").append("\n") - .append(" remoteMethod: function (val, cb, show) {").append("\n") - .append(" \\$.ajax({").append("\n") - .append(" url: baseUrl + \"/").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("/all/get/kv\",").append("\n") - .append(" headers: {'token': localStorage.getItem('token')},").append("\n") - .append(" data: {").append("\n") - .append(" condition: val").append("\n") - .append(" },").append("\n") - .append(" method: 'POST',").append("\n") - .append(" success: function (res) {").append("\n") - .append(" if (res.code === 200) {").append("\n") - .append(" cb(res.data)").append("\n") - .append(" } else {").append("\n") - .append(" cb([]);").append("\n") - .append(" layer.msg(res.msg, {icon: 2});").append("\n") - .append(" }").append("\n") - .append(" }").append("\n") - .append(" });").append("\n") - .append(" }").append("\n") - .append(" });").append("\n") - .append(" }").append("\n") - .append("\n"); - } - } - return sb.toString(); - } - - private String createJsDateContent(){ - StringBuilder sb = new StringBuilder(); - for (Column column : columns) { - if (column.isPrimaryKey()) { - continue; - } - if ("Date".equals(column.getType())){ - sb.append(" layDate.render({\n") - .append(" elem: '#").append(column.getHumpName()).append("\\\\\\\\\\$',\n") - .append(" type: 'datetime',\n") - .append(" value: data!==undefined?data['").append(column.getHumpName()).append("\\$'").append("]:null\n") - .append(" });\n"); - } - } - return sb.toString(); - } - - private String createJsPrimaryKeyMsg(){ - StringBuilder sb = new StringBuilder(); - for (Column column : columns) { - if (column.isPrimaryKey()) { - sb.append("#").append(column.getHumpName()).append(","); - } - } - if (sb.length() > 1){ - if (sb.substring(sb.length() - 1).equals(",")) { - sb.deleteCharAt(sb.length()-1); - } - } - return sb.toString(); - } - - /**********************************************************************************************/ - /************************************** Index鍔ㄦ�佸瓧娈� *******************************************/ - /**********************************************************************************************/ - - private String createTableColumns() { - StringBuilder sb = new StringBuilder(); - for (Column column : columns) { - if (column.isPrimaryKey() - || column.getHumpName().equals("deleted") - || column.getHumpName().equals("hostId") - ) { - continue; - } - sb.append(" {\n") - .append(" title: formatMessage('db.").append(table).append(".").append(column.getName()).append("', '").append(column.getComment()).append("'),").append("\n") - .append(" dataIndex: '"); - StringBuilder rowKey = new StringBuilder(); - if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums()) || !Cools.isEmpty(column.getForeignKeyMajor())){ - // 鏃堕棿銆佹灇涓� 鏍煎紡鍖� 涓婚敭淇グ - rowKey.append(column.getHumpName()).append("\\$"); - } else { - rowKey.append(column.getHumpName()); - } - sb.append(rowKey); - sb.append("',\n") - .append(" width: 140,\n") - .append(" ellipsis: true,\n") - .append(" ...getColumnSearchProps('").append(rowKey).append("'),\n"); -// if (!Cools.isEmpty(column.getEnums())) { -// sb.append(" customRender: (column) => {\n"); -// sb.append(" let typeMap = {"); -// for (Map<String, Object> map : column.getEnums()) { -// for (Map.Entry<String, Object> entry : map.entrySet()){ -// sb.append(" ").append(entry.getKey()).append(": "); -// sb.append(" { text: '").append(entry.getValue()).append("'").append(" },\n"); -// } -// } -// sb.append(" }\n"); -// sb.append(" return typeMap[column.value].text;"); -// sb.append(" }\n"); -// } - sb.append(" },\n"); - } - return sb.toString(); - } - - private String getAntProFilterType(Column column){ - String filter = "TextFilter"; - switch (column.getType()) { - case "Boolean": - filter = "TextFilter"; - break; - case "Short": - filter = "TextFilter"; - break; - case "Integer": - filter = "TextFilter"; - break; - case "Long": - filter = "TextFilter"; - break; - case "Double": - filter = "TextFilter"; - break; - case "String": - filter = "TextFilter"; - break; - case "Date": - filter = "DatetimeRangeFilter"; - break; - default: - break; - } - if (!Cools.isEmpty(column.getEnums())) { - filter = "SelectFilter"; - } - if (!Cools.isEmpty(column.getForeignKey())) { - filter = "LinkFilter"; - } - return filter; - } - - /**********************************************************************************************/ - /************************************** Edit鍔ㄦ�佸瓧娈� ********************************************/ - /**********************************************************************************************/ - - private String createFormEditColumns() { - StringBuilder sb = new StringBuilder(); - StringBuilder sb2 = new StringBuilder(); - ArrayList<String> foreignKeyContains = new ArrayList<>(); - for (Column column : columns) { - boolean has = true; - if (column.isPrimaryKey() - || column.getHumpName().equals("deleted") - || column.getHumpName().equals("hostId") - ) { - continue; - } - - sb.append(" <a-form-item \n"); - sb.append(" :label=\"formatMessage('db.").append(table).append(".").append(column.getName()).append("', '").append(column.getComment()).append("') ").append("\" \n"); - sb.append(" name=\"").append(column.getHumpName()).append("\" \n"); - sb.append(" style=\"width: 250px;\" \n"); - - // 闈炵┖ - if (column.isNotNull()) { - sb.append(" :rules=\"[{ required: true }]\"\n"); - } - sb.append(" >\n"); - - // 鏋氫妇 - if (!Cools.isEmpty(column.getEnums())) { - sb.append(" <a-select \n"); - sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); - sb.append(" :options=\"[\n"); - for (Map<String, Object> map : column.getEnums()) { - for (Map.Entry<String, Object> entry : map.entrySet()){ - sb.append(" { label: '").append(entry.getValue()).append("', value: ").append(entry.getKey()).append(" },\n"); - } - } - sb.append(" ]\"\n"); - sb.append(" >\n"); - sb.append(" </a-select>\n"); - has = false; - } - - // 鏃堕棿 - if ("Date".equals(column.getType())) { - sb.append(" <a-date-picker \n"); - sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); - sb.append(" show-time \n"); - sb.append(" format=\"YYYY-MM-DD HH:mm:ss\" \n"); - sb.append(" value-format=\"YYYY-MM-DD HH:mm:ss\" \n"); - sb.append(" /> \n"); - has = false; - } - - // 鍏宠仈琛� - if (!Cools.isEmpty(column.getForeignKey$())) { - if (!foreignKeyContains.contains(column.getForeignKey$())) { - sb2.append("const ").append(column.getForeignKey$()).append("QueryList = ref(null); \n"); - sb2.append(column.getForeignKey$()).append("Query();\n"); - sb2.append("function ").append(column.getForeignKey$()).append("Query() { \n"); - sb2.append(" postForm('/api/").append(column.getForeignKey$()).append("/query', {}).then(resp => { \n"); - sb2.append(" let result = resp.data;\n"); - sb2.append(" ").append(column.getForeignKey$()).append("QueryList.value = result.data;\n"); - sb2.append(" })\n"); - sb2.append("}\n"); - - foreignKeyContains.add(column.getForeignKey$()); - } - - sb.append(" <a-select \n"); - sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); - sb.append(" :placeholder=\"formatMessage('common.select', '璇烽�夋嫨')\" \n"); - sb.append(" style=\"width: 100%\" \n"); - sb.append(" show-search \n"); - sb.append(" :options=\"").append(column.getForeignKey$()).append("QueryList\" \n"); - sb.append(" optionFilterProp=\"label\" \n"); - sb.append(" optionLabelProp=\"label\" \n"); - sb.append(" > \n"); - sb.append(" </a-select>\n"); - has = false; - } - - if (has) { - sb.append(" <a-input \n"); - sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); - sb.append(" /> \n"); - has = false; - } - - sb.append(" </a-form-item>\n"); - - } - - formEditForeignKeyColumns = sb2.toString(); - return sb.toString(); - } - -} +package com.zy.asrs.framework.generators; + +import com.zy.asrs.framework.common.Cools; +import com.zy.asrs.framework.generators.constant.SqlOsType; +import com.zy.asrs.framework.generators.domain.Column; +import com.zy.asrs.framework.generators.utils.GeneratorUtils; +import org.springframework.core.io.ClassPathResource; + +import java.io.*; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by vincent on 2019-06-18 + */ +public class VueGenerator { + + private static final String BASE_DIR = "src/main/"; + private static final String JAVA_DIR = BASE_DIR + "java/"; + private static final String XML_DIR = BASE_DIR + "resources/mapper/"; + private static final String HTML_DIR = BASE_DIR + "webapp/"; + private static final String[] ALL_TEMPLATES = new String[]{ + "Controller", + "Service", + "ServiceImpl", + "Mapper", + "Entity", + "Xml", + "Index", + "Edit", + "Sql"}; + private static final ArrayList<String> SYSTEM_MODEL = new ArrayList<String>(){{ + add("User"); + add("Host"); + }}; + + + public String url; + public String username; + public String password; + public String table; + public String tableName; + public String rootPackagePath; + public String packagePath; + public boolean controller = true; + public boolean service = true; + public boolean mapper = true; + public boolean entity = true; + public boolean xml = true; + public boolean vue = true; + public boolean sql = true; + public SqlOsType sqlOsType; + public String backendPrefixPath; + public String frontendPrefixPath; + + private List<Column> columns = new ArrayList<>(); + private String fullEntityName; + private String simpleEntityName; + private String entityImport; + private String entityContent; + private String xmlContent; + private String htmlContent; + private String htmlDialogContent; + private String jsTableContent; + private String jsForeignKeyContent; + private String jsDateContent; + private String jsPrimaryKeyDoms; + private String primaryKeyColumn; + private String majorColumn; + private String systemPackagePath; + private String systemPackage; + private String itemName; + private String tableColumns; + private String formEditColumns; + private String formEditForeignKeyColumns; + + public void build() throws Exception { + init(); + for (String template : ALL_TEMPLATES){ + boolean pass = false; + String lowerCase = template.toLowerCase(); + String templatePath = lowerCase.contains("impl")?lowerCase.substring(0,lowerCase.length()-4)+"/"+lowerCase.substring(lowerCase.length()-4):lowerCase; + String directory=""; + String fileName=""; + switch (template){ + case "Controller": + pass = controller; + directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; + fileName = fullEntityName+template+".java"; + break; + case "Service": + pass = service; + directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; + fileName = fullEntityName+template+".java"; + break; + case "ServiceImpl": + pass = service; + directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; + fileName = fullEntityName+template+".java"; + break; + case "Mapper": + pass = mapper; + directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; + fileName = fullEntityName+template+".java"; + break; + case "Entity": + pass = entity; + directory = backendPrefixPath + JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/"; + fileName = fullEntityName+".java"; + break; + case "Xml": + pass = xml; + directory = backendPrefixPath + XML_DIR + itemName + "/"; + fileName = fullEntityName+"Mapper.xml"; + break; + case "Sql": + pass = sql; + directory = backendPrefixPath + JAVA_DIR; + fileName = simpleEntityName+".sql"; + break; + case "Index": + pass = vue; + directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; + fileName = "index.vue"; + break; + case "Edit": + pass = vue; + directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; + fileName = "edit.vue"; + break; + default: + break; + } + if (!pass){ continue; } + String content = readFile(template); + writeFile(content, directory, fileName, template); + } + } + + private void init() throws Exception { + gainDbInfo(); + fullEntityName = GeneratorUtils.getNameSpace(table); + simpleEntityName = fullEntityName.substring(0, 1).toLowerCase()+fullEntityName.substring(1); + entityContent = createEntityMsg(); + htmlContent = createHtmlMsg(); + htmlDialogContent = createHtmlDialogMsg(); + jsTableContent = createJsTableMsg(); + jsForeignKeyContent = createJsFkContent(); + jsDateContent = createJsDateContent(); + jsPrimaryKeyDoms = createJsPrimaryKeyMsg(); + primaryKeyColumn = createPrimaryMsg(); + majorColumn = createMajorMsg(); + String[] packagePathSplit = packagePath.split("\\."); + systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system"); + String[] split = systemPackagePath.split("\\."); + systemPackage = ""; + for (int i = 1;i <= split.length; i++) { + if (i != split.length) { + if (i == split.length - 1) { + systemPackage = systemPackage + split[i-1]; + } else { + systemPackage = systemPackage + split[i-1] + "."; + } + } + } + itemName = packagePathSplit[packagePathSplit.length - 1]; + tableColumns = createTableColumns(); + formEditColumns = createFormEditColumns(); + } + + private String readFile(String template){ + StringBuilder txtContentBuilder=new StringBuilder(); + ClassPathResource classPath=new ClassPathResource("templates/vue/"+template + ".txt"); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(classPath.getInputStream()))) { + String lineContent; + while ((lineContent = reader.readLine()) != null) { + txtContentBuilder.append(lineContent).append("\n"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return txtContentBuilder.toString(); + } + + private void writeFile(String content, String directory, String fileName, String template) throws IOException { + File codeDirectory=new File(directory); + if(!codeDirectory.exists()){ + codeDirectory.mkdirs(); + } + + File writerFile=new File(directory+fileName); + if(!writerFile.exists()){ + content=content. + replaceAll("@\\{TABLENAME}", table) + .replaceAll("@\\{TABLEDESC}", tableName) + .replaceAll("@\\{ENTITYIMPORT}", entityImport) + .replaceAll("@\\{ENTITYCONTENT}", entityContent) + .replaceAll("@\\{ENTITYNAME}", fullEntityName) + .replaceAll("@\\{SIMPLEENTITYNAME}", simpleEntityName) + .replaceAll("@\\{UENTITYNAME}", simpleEntityName) + .replaceAll("@\\{COMPANYNAME}",packagePath) + .replaceAll("@\\{ROOTPACKAGEPATH}",rootPackagePath) + .replaceAll("@\\{ITEMNAME}",itemName) +// .replaceAll("@\\{XMLCONTENT}", xmlContent) + .replaceAll("@\\{HTMLCONTENT}", htmlContent) + .replaceAll("@\\{HTMLDIALOGCONTENT}", htmlDialogContent) + .replaceAll("@\\{JSTABLECONTENT}", jsTableContent) + .replaceAll("@\\{JSFOREIGNKEYCONTENT}", jsForeignKeyContent) + .replaceAll("@\\{JSDATECONTENT}", jsDateContent) + .replaceAll("@\\{JSPRIMARYKEYDOMS}", jsPrimaryKeyDoms) + .replaceAll("@\\{MAJORCOLUMN}", GeneratorUtils.humpToLine(majorColumn)) + .replaceAll("@\\{MAJORCOLUMN0}", GeneratorUtils.firstCharConvert(majorColumn, false)) + .replaceAll("@\\{MAJORCOLUMN_UP}", GeneratorUtils.firstCharConvert(majorColumn, false)) + .replaceAll("@\\{PRIMARYKEYCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false)) + .replaceAll("@\\{PRIMARYKEYCOLUMN0}", GeneratorUtils.firstCharConvert(primaryKeyColumn, true)) + .replaceAll("@\\{UPCASEMARJORCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false)) + .replaceAll("@\\{SYSTEMPACKAGE}",systemPackage) + .replaceAll("@\\{TABLECOLUMNS}", tableColumns) + .replaceAll("@\\{FORMEDITCOLUMNS}", formEditColumns) + .replaceAll("@\\{FORMEDITFOREIGNKEYCOLUMNS}", formEditForeignKeyColumns) + ; + writerFile.createNewFile(); + BufferedWriter writer=new BufferedWriter(new FileWriter(writerFile)); + writer.write(content); + writer.flush(); + writer.close(); + System.out.println(fullEntityName+template+" 婧愭枃浠跺垱寤烘垚鍔燂紒"); + }else{ + System.out.println(fullEntityName+template+" 婧愭枃浠跺凡缁忓瓨鍦ㄥ垱寤哄け璐ワ紒"); + } + } + + private void gainDbInfo() throws Exception { + Connection conn; + if (null == this.sqlOsType) { + throw new RuntimeException("璇烽�夋嫨sqlOsType锛�"); + } + if (null == this.table) { + throw new RuntimeException("璇疯緭鍏able锛�"); + } + if (null == this.tableName) { + throw new RuntimeException("璇疯緭鍏ableName锛�"); + } + switch (this.sqlOsType) { + case MYSQL: + Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); + conn = DriverManager.getConnection("jdbc:mysql://"+url, username, password); + this.columns = getMysqlColumns(conn, table, true, sqlOsType); + break; + case SQL_SERVER: + Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); + conn = DriverManager.getConnection("jdbc:sqlserver://"+url, username, password); + this.columns = getSqlServerColumns(conn, table, true, sqlOsType); + break; + default: + throw new RuntimeException("璇锋寚瀹氭暟鎹簱绫诲瀷锛�"); + } + + } + + // mysql + public static List<Column> getMysqlColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception { + List<Column> result = new ArrayList<>(); + PreparedStatement ps = conn.prepareStatement("select * from " + table); + ResultSetMetaData meta = ps.executeQuery().getMetaData(); + // 鍗曡〃瀛楁鏁伴噺 + int count = meta.getColumnCount(); + ResultSet resultSet = ps.executeQuery("show full columns from " + table); + for (int i = 1; i < count + 1; i++) { + String columnName = meta.getColumnName(i); + if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){ + result.add(new Column( + conn, + meta.getColumnName(i), + GeneratorUtils.getType(meta.getColumnType(i)), + resultSet.getString("Comment"), + resultSet.getString("Key").equals("PRI"), + resultSet.getString("Key").equals("PRI"), + resultSet.getString("Null").equals("NO"), + GeneratorUtils.getColumnLength(resultSet.getString("Type")), + init, + sqlOsType + )); + } + result.forEach(column -> System.out.println(column.toString())); + } + return result; + } + + // sqlserver + public static List<Column> getSqlServerColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception { + List<Column> result = new ArrayList<>(); + PreparedStatement ps = conn.prepareStatement("select * from " + table); + ResultSetMetaData meta = ps.executeQuery().getMetaData(); + // 鍗曡〃瀛楁鏁伴噺 + int count = meta.getColumnCount(); + StringBuilder sql = new StringBuilder("SELECT \n" + + " 'Field'= a.name,\n" + + " 'Comment'= isnull(g.[value],''),\n" + + " 'Key'= case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 'PRI' else '' end,\n" + + " 'Main'= case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 'PRI' else '' end,"+ + " 'Type'= b.name,\n" + + " 'Length'= COLUMNPROPERTY(a.id,a.name,'PRECISION'),\n" + + " 'Decimals'= isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),\n" + + " 'Null'= case when a.isnullable=1 then 'Yes' else 'No' end,\n" + + " 'Default' = isnull(e.text,'')\n" + + "FROM syscolumns a\n" + + "LEFT JOIN systypes b on a.xusertype=b.xusertype\n" + + "INNER JOIN sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'\n" + + "LEFT JOIN syscomments e on a.cdefault=e.id\n" + + "LEFT JOIN sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id \n" + + "LEFT JOIN sys.extended_properties f on d.id=f.major_id and f.minor_id=0 where d.name = '") + .append(table).append("' ORDER BY a.colorder ASC"); + ResultSet resultSet = conn.prepareStatement(sql.toString()).executeQuery(); + for (int i = 1; i < count + 1; i++) { + String columnName = meta.getColumnName(i); + if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){ + result.add(new Column( + conn, + meta.getColumnName(i), + GeneratorUtils.getType(meta.getColumnType(i)), + resultSet.getString("Comment"), + resultSet.getString("Key").equals("PRI"), + resultSet.getString("Main").equals("PRI"), + resultSet.getString("Null").equals("No"), + GeneratorUtils.getColumnLength(resultSet.getString("Type")), + init, + sqlOsType + )); + } + } + result.forEach(column -> System.out.println(column.toString())); + return result; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /**********************************************************************************************/ + /************************************* Entity鍔ㄦ�佸瓧娈� *******************************************/ + /**********************************************************************************************/ + + private String createEntityMsg(){ + if (Cools.isEmpty(systemPackagePath)) { + String[] packagePathSplit = packagePath.split("\\."); + systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system"); + } + if (columns.isEmpty()){ + return null; + } + StringBuilder sb = new StringBuilder(); + StringBuilder entityIm = new StringBuilder(); + boolean setTableField = true; + boolean setTableId = true; + boolean setDateTimeFormat = true; + for (Column column : columns){ + if (column.getType().equals("Date")){ + entityIm.append("import java.text.SimpleDateFormat;\n") + .append("import java.util.Date;\n"); + } + + // 娉ㄩ噴 + if (!Cools.isEmpty(column.getComment())){ + sb.append(" /**\n") + .append(" * ") + .append(column.getWholeComment()) + .append("\n") + .append(" */") + .append("\n"); + } + + // swagger + sb.append(" @ApiModelProperty(value= \"") + .append(column.getWholeComment()) + .append("\")\n"); + + + // 涓婚敭淇グ + if (column.isMainKey()){ + if (column.isOnly()){ + sb.append(" ") + .append("@TableId(value = \"") + .append(column.getName()) + .append("\", type = IdType.AUTO)") + .append("\n"); + } else { + sb.append(" ") + .append("@TableId(value = \"") + .append(column.getName()) + .append("\", type = IdType.INPUT)") + .append("\n"); + } + + } + + if (column.getName().equals("deleted")) { + entityIm.append("import com.baomidou.mybatisplus.annotation.TableLogic;\n"); + sb.append(" ") + .append("@TableLogic\n"); + } + + if ("Date".equals(column.getType())){ + if (setDateTimeFormat){ + entityIm.append("import org.springframework.format.annotation.DateTimeFormat;").append("\n"); + setDateTimeFormat = false; + } + sb.append(" ") + .append("@DateTimeFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")") + .append("\n"); + } + + sb.append(" ") + .append("private ") + .append(column.getType()) + .append(" ") + .append(column.getHumpName()) + .append(";") + .append("\n") + .append("\n"); + } + + // default constructor + sb.append(" public ").append(fullEntityName).append("() {}\n\n"); + // full constructor + sb.append(" public ").append(fullEntityName).append("("); + for (Column column : columns){ + if (column.isOnly()){ continue;} + sb.append(column.getType()).append(" ").append(column.getHumpName()).append(","); + } + sb.deleteCharAt(sb.length()-1); + sb.append(") {\n"); + for (Column column : columns){ + if (column.isPrimaryKey()){ continue;} + sb.append(" this.").append(column.getHumpName()).append(" = ").append(column.getHumpName()).append(";\n"); + } + sb.append(" }\n\n"); + // constructor tips + sb.append("// ").append(fullEntityName).append(" ").append(simpleEntityName).append(" = new ").append(fullEntityName).append("(\n"); + for (int i = 0; i<columns.size(); i++) { + if (columns.get(i).isOnly()){ continue;} + sb.append("// null"); + if (i < columns.size()-1){ + sb.append(","); + } + sb.append(" // ").append(columns.get(i).getComment()).append(columns.get(i).isNotNull()?"[闈炵┖]":""); + if (i < columns.size()-1){ + sb.append("\n"); + } + } + sb.append("\n// );\n\n"); + + // get set + for (Column column : columns){ + // 鏃堕棿瀛楁澧炲姞$鏍煎紡鍖� + if ("Date".equals(column.getType())){ + sb.append(" public String get") + .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)) + .append("\\$") + .append("(){\n") + .append(" if (Cools.isEmpty(this.").append(column.getHumpName()).append(")){\n") + .append(" return \"\";\n") + .append(" }\n") + .append(" return new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").format(this.") + .append(column.getHumpName()) + .append(");\n") + .append(" }\n\n"); + // 鏋氫妇瀛楁澧炲姞$鏍煎紡鍖� + } else if (!Cools.isEmpty(column.getEnums())){ + sb.append(" public String get") + .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)) + .append("\\$") + .append("(){\n") + .append(" if (null == this.").append(column.getHumpName()).append("){ return null; }\n") + .append(" switch (this.").append(column.getHumpName()).append("){\n"); + for (Map<String, Object> map : column.getEnums()){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + sb.append(" case ").append(entry.getKey()).append(":\n") + .append(" return \"").append(entry.getValue()).append("\";\n"); + } + } + sb.append(" default:\n") + .append(" return String.valueOf(this.").append(column.getHumpName()).append(");\n") + .append(" }\n") + .append(" }\n\n"); + } + + // 澶栭敭淇グ + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" public String get").append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)).append("\\$").append("(){\n") + .append(" ").append(column.getForeignKey()).append("Service service = SpringUtils.getBean(").append(column.getForeignKey()).append("Service.class);\n") + .append(" ").append(column.getForeignKey()).append(" ").append(GeneratorUtils.firstCharConvert(column.getForeignKey())) + .append(" = service.getById(this.").append(column.getHumpName()).append(");\n") + .append(" if (!Cools.isEmpty(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(")){\n") + .append(" return String.valueOf(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(".get").append(column.getForeignKeyMajor()).append("());\n") + .append(" }\n") + .append(" return null;\n") + .append(" }\n\n"); + } + + } + entityImport = entityIm.toString(); + return sb.toString(); + } + + /**********************************************************************************************/ + /*********************************** Controller鍔ㄦ�佸瓧娈� *****************************************/ + /**********************************************************************************************/ + + private String createPrimaryMsg(){ + String defaultMajor = "id"; + boolean havePrimary = false; + for (Column column: columns){ + if (column.isPrimaryKey()){ + defaultMajor = column.getHumpName(); + havePrimary = true; + } + } + if (!havePrimary) { + for (Column column: columns){ + if (column.isMainKey()){ + defaultMajor = column.getHumpName(); + } + } + } + return defaultMajor; + } + + private String createMajorMsg(){ + String defaultMajor = "id"; + for (Column column: columns){ + if (column.isPrimaryKey()){ + defaultMajor = column.getHumpName(); + } + if (column.isMajor()){ + return column.getHumpName(); + } + } + return defaultMajor; + } + + /**********************************************************************************************/ + /************************************** Html鍔ㄦ�佸瓧娈� *******************************************/ + /**********************************************************************************************/ + + private String createHtmlMsg(){ + StringBuilder sb = new StringBuilder(); + for (Column column : columns){ + if (column.isPrimaryKey()){ continue;} + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" <div class=\"layui-inline\">\n") + .append(" <div class=\"layui-input-inline cool-auto-complete\">\n") + .append(" <input id=\"").append(column.getHumpName()).append("\"") + .append(" class=\"layui-input\" name=\"").append(column.getName()).append("\" type=\"text\" placeholder=\"璇疯緭鍏" autocomplete=\"off\" style=\"display: none\">\n") + .append(" <input id=\"").append(column.getHumpName()).append("\\$") + .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"").append(GeneratorUtils.supportHtmlName(column.getComment())).append("\" onfocus=this.blur()>\n") + .append(" <div class=\"cool-auto-complete-window\">\n") + .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n") + .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n") + .append(" </select>\n") + .append(" </div>\n") + .append(" </div>\n") + .append(" </div>\n"); + } + } + return sb.toString(); + } + + private String createHtmlDialogMsg() { + StringBuilder sb = new StringBuilder(); + for (Column column : columns){ + if (column.isPrimaryKey()) { + continue; + } + sb.append(" <div class=\"layui-form-item\">\n"); + sb.append(" <label class=\"layui-form-label"); + if (column.isNotNull()){ + sb.append(" layui-form-required"); + } + sb.append("\">").append(column.getComment()).append(": </label>\n"); + sb.append(" <div class=\"layui-input-block"); + // 鍏宠仈澶栭敭 + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" cool-auto-complete"); + } + sb.append("\">\n"); + // 杈撳叆妗嗙被鍨� + if (Cools.isEmpty(column.getEnums())){ + sb.append(" <input class=\"layui-input\" name=\"").append(column.getHumpName()); + if ("Date".equals(column.getType())){ + sb.append("\" id=\"").append(column.getHumpName()).append("\\$"); + } + sb.append("\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\""); + if (column.isNotNull()){ + sb.append(" lay-vertype=\"tips\" lay-verify=\"required\""); + } + // 鍏宠仈澶栭敭 + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" style=\"display: none\""); + } + sb.append(">\n"); + + // 鍏宠仈澶栭敭 + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" <input id=\"").append(column.getHumpName()).append("\\$").append("\" name=\"").append(column.getHumpName()).append("\\$") + .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\" onfocus=this.blur()>\n"); + sb.append(" <div class=\"cool-auto-complete-window\">\n") + .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"") + .append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n") + .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n") + .append(" </select>\n") + .append(" </div>\n"); + } + // 鏋氫妇绫诲瀷 + } else { + sb.append(" <select name=\"").append(column.getHumpName()).append("\""); + if (column.isNotNull()){ + sb.append(" lay-vertype=\"tips\" lay-verify=\"required\""); + } + sb.append(">\n"); + sb.append(" <option value=\"\">").append("璇烽�夋嫨").append(column.getComment()).append("</option>\n"); + for (Map<String, Object> map : column.getEnums()){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + sb.append(" <option value=\"") + .append(entry.getKey()) + .append("\">") + .append(entry.getValue()) + .append("</option>\n"); + } + } + sb.append(" </select>\n"); + } + + sb.append(" </div>\n"); + sb.append(" </div>\n"); + } + return sb.toString(); + } + + private String createJsTableMsg(){ + StringBuilder sb = new StringBuilder(); + for (Column column : columns){ +// if (column.isPrimaryKey()){ continue;} + sb.append(" ,{field: '"); + if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums())){ + // 鏃堕棿銆佹灇涓� 鏍煎紡鍖� + sb.append(column.getHumpName()).append("\\$"); + } else { + // 涓婚敭淇グ + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(column.getHumpName()).append("\\$"); + } else { + sb.append(column.getHumpName()); + } + } + sb.append("', align: 'center',title: '").append(column.getComment()).append("'"); + // 澶嶉�夋 + if (column.isCheckBox()){ + sb.append(", templet:function(row){\n") + .append(" var html = \"<input value='") + .append(column.getHumpName()).append("' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='\"+row.LAY_TABLE_INDEX+\"'\";\n") + .append(" if(row.").append(column.getHumpName()).append(" === 'Y'){html += \" checked \";}\n") + .append(" html += \">\";\n") + .append(" return html;\n") + .append(" }"); + } + sb.append("}\n"); + } + return sb.toString(); + } + + private String createJsFkContent(){ + StringBuilder sb = new StringBuilder(); + for (Column column : columns){ + // 濡傛灉鏈夊叧鑱斿鍋� + if (!Cools.isEmpty(column.getForeignKeyMajor())){ + sb.append(" window.load").append(column.getForeignKey()).append("Sel = function () {").append("\n") + .append(" return xmSelect.render({").append("\n") + .append(" el: '#").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("XmlSel',").append("\n") + .append(" autoRow: true,").append("\n") + .append(" filterable: true,").append("\n") + .append(" remoteSearch: true,").append("\n") + .append(" radio: true,").append("\n") + .append(" remoteMethod: function (val, cb, show) {").append("\n") + .append(" \\$.ajax({").append("\n") + .append(" url: baseUrl + \"/").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("/all/get/kv\",").append("\n") + .append(" headers: {'token': localStorage.getItem('token')},").append("\n") + .append(" data: {").append("\n") + .append(" condition: val").append("\n") + .append(" },").append("\n") + .append(" method: 'POST',").append("\n") + .append(" success: function (res) {").append("\n") + .append(" if (res.code === 200) {").append("\n") + .append(" cb(res.data)").append("\n") + .append(" } else {").append("\n") + .append(" cb([]);").append("\n") + .append(" layer.msg(res.msg, {icon: 2});").append("\n") + .append(" }").append("\n") + .append(" }").append("\n") + .append(" });").append("\n") + .append(" }").append("\n") + .append(" });").append("\n") + .append(" }").append("\n") + .append("\n"); + } + } + return sb.toString(); + } + + private String createJsDateContent(){ + StringBuilder sb = new StringBuilder(); + for (Column column : columns) { + if (column.isPrimaryKey()) { + continue; + } + if ("Date".equals(column.getType())){ + sb.append(" layDate.render({\n") + .append(" elem: '#").append(column.getHumpName()).append("\\\\\\\\\\$',\n") + .append(" type: 'datetime',\n") + .append(" value: data!==undefined?data['").append(column.getHumpName()).append("\\$'").append("]:null\n") + .append(" });\n"); + } + } + return sb.toString(); + } + + private String createJsPrimaryKeyMsg(){ + StringBuilder sb = new StringBuilder(); + for (Column column : columns) { + if (column.isPrimaryKey()) { + sb.append("#").append(column.getHumpName()).append(","); + } + } + if (sb.length() > 1){ + if (sb.substring(sb.length() - 1).equals(",")) { + sb.deleteCharAt(sb.length()-1); + } + } + return sb.toString(); + } + + /**********************************************************************************************/ + /************************************** Index鍔ㄦ�佸瓧娈� *******************************************/ + /**********************************************************************************************/ + + private String createTableColumns() { + StringBuilder sb = new StringBuilder(); + for (Column column : columns) { + if (column.isPrimaryKey() + || column.getHumpName().equals("deleted") + || column.getHumpName().equals("hostId") + ) { + continue; + } + sb.append(" {\n") + .append(" title: formatMessage('db.").append(table).append(".").append(column.getName()).append("', '").append(column.getComment()).append("'),").append("\n") + .append(" dataIndex: '"); + StringBuilder rowKey = new StringBuilder(); + if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums()) || !Cools.isEmpty(column.getForeignKeyMajor())){ + // 鏃堕棿銆佹灇涓� 鏍煎紡鍖� 涓婚敭淇グ + rowKey.append(column.getHumpName()).append("\\$"); + } else { + rowKey.append(column.getHumpName()); + } + sb.append(rowKey); + sb.append("',\n") + .append(" width: 140,\n") + .append(" ellipsis: true,\n") + .append(" ...getColumnSearchProps('").append(rowKey).append("'),\n"); +// if (!Cools.isEmpty(column.getEnums())) { +// sb.append(" customRender: (column) => {\n"); +// sb.append(" let typeMap = {"); +// for (Map<String, Object> map : column.getEnums()) { +// for (Map.Entry<String, Object> entry : map.entrySet()){ +// sb.append(" ").append(entry.getKey()).append(": "); +// sb.append(" { text: '").append(entry.getValue()).append("'").append(" },\n"); +// } +// } +// sb.append(" }\n"); +// sb.append(" return typeMap[column.value].text;"); +// sb.append(" }\n"); +// } + sb.append(" },\n"); + } + return sb.toString(); + } + + private String getAntProFilterType(Column column){ + String filter = "TextFilter"; + switch (column.getType()) { + case "Boolean": + filter = "TextFilter"; + break; + case "Short": + filter = "TextFilter"; + break; + case "Integer": + filter = "TextFilter"; + break; + case "Long": + filter = "TextFilter"; + break; + case "Double": + filter = "TextFilter"; + break; + case "String": + filter = "TextFilter"; + break; + case "Date": + filter = "DatetimeRangeFilter"; + break; + default: + break; + } + if (!Cools.isEmpty(column.getEnums())) { + filter = "SelectFilter"; + } + if (!Cools.isEmpty(column.getForeignKey())) { + filter = "LinkFilter"; + } + return filter; + } + + /**********************************************************************************************/ + /************************************** Edit鍔ㄦ�佸瓧娈� ********************************************/ + /**********************************************************************************************/ + + private String createFormEditColumns() { + StringBuilder sb = new StringBuilder(); + StringBuilder sb2 = new StringBuilder(); + ArrayList<String> foreignKeyContains = new ArrayList<>(); + for (Column column : columns) { + boolean has = true; + if (column.isPrimaryKey() + || column.getHumpName().equals("deleted") + || column.getHumpName().equals("hostId") + ) { + continue; + } + + sb.append(" <a-form-item \n"); + sb.append(" :label=\"formatMessage('db.").append(table).append(".").append(column.getName()).append("', '").append(column.getComment()).append("') ").append("\" \n"); + sb.append(" name=\"").append(column.getHumpName()).append("\" \n"); + sb.append(" style=\"width: 250px;\" \n"); + + // 闈炵┖ + if (column.isNotNull()) { + sb.append(" :rules=\"[{ required: true }]\"\n"); + } + sb.append(" >\n"); + + // 鏋氫妇 + if (!Cools.isEmpty(column.getEnums())) { + sb.append(" <a-select \n"); + sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); + sb.append(" :options=\"[\n"); + for (Map<String, Object> map : column.getEnums()) { + for (Map.Entry<String, Object> entry : map.entrySet()){ + sb.append(" { label: '").append(entry.getValue()).append("', value: ").append(entry.getKey()).append(" },\n"); + } + } + sb.append(" ]\"\n"); + sb.append(" >\n"); + sb.append(" </a-select>\n"); + has = false; + } + + // 鏃堕棿 + if ("Date".equals(column.getType())) { + sb.append(" <a-date-picker \n"); + sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); + sb.append(" show-time \n"); + sb.append(" format=\"YYYY-MM-DD HH:mm:ss\" \n"); + sb.append(" value-format=\"YYYY-MM-DD HH:mm:ss\" \n"); + sb.append(" /> \n"); + has = false; + } + + // 鍏宠仈琛� + if (!Cools.isEmpty(column.getForeignKey$())) { + if (!foreignKeyContains.contains(column.getForeignKey$())) { + sb2.append("const ").append(column.getForeignKey$()).append("QueryList = ref(null); \n"); + sb2.append(column.getForeignKey$()).append("Query();\n"); + sb2.append("function ").append(column.getForeignKey$()).append("Query() { \n"); + sb2.append(" postForm('/api/").append(column.getForeignKey$()).append("/query', {}).then(resp => { \n"); + sb2.append(" let result = resp.data;\n"); + sb2.append(" ").append(column.getForeignKey$()).append("QueryList.value = result.data;\n"); + sb2.append(" })\n"); + sb2.append("}\n"); + + foreignKeyContains.add(column.getForeignKey$()); + } + + sb.append(" <a-select \n"); + sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); + sb.append(" :placeholder=\"formatMessage('common.select', '璇烽�夋嫨')\" \n"); + sb.append(" style=\"width: 100%\" \n"); + sb.append(" show-search \n"); + sb.append(" :options=\"").append(column.getForeignKey$()).append("QueryList\" \n"); + sb.append(" optionFilterProp=\"label\" \n"); + sb.append(" optionLabelProp=\"label\" \n"); + sb.append(" > \n"); + sb.append(" </a-select>\n"); + has = false; + } + + if (has) { + sb.append(" <a-input \n"); + sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); + sb.append(" /> \n"); + has = false; + } + + sb.append(" </a-form-item>\n"); + + } + + formEditForeignKeyColumns = sb2.toString(); + return sb.toString(); + } + +} -- Gitblit v1.9.1