th 7 年之前
父節點
當前提交
01e75d02d3

+ 7 - 0
pom.xml

@@ -19,6 +19,13 @@
 			<artifactId>mysql-connector-java</artifactId>
 			<version>6.0.6</version>
 		</dependency>
+		
+		<dependency>
+		    <groupId>commons-io</groupId>
+		    <artifactId>commons-io</artifactId>
+		    <version>2.6</version>
+		</dependency>
+		
 
 		<dependency>
 			<groupId>junit</groupId>

+ 34 - 5
src/main/java/org/geek/szbay/assistant/code/CodeHelpper.java

@@ -19,7 +19,9 @@ import org.geek.szbay.assistant.code.generator.EntityMysqlMaker;
 import org.geek.szbay.assistant.code.generator.MapperXmlMaker;
 import org.geek.szbay.assistant.code.generator.ServiceImplMysqlMaker;
 import org.geek.szbay.assistant.code.generator.ServiceMysqlMaker;
+import org.geek.szbay.assistant.code.generator.UpdateFtlMaker;
 import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
 
 /**
  * @author wutianbin
@@ -28,18 +30,18 @@ import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
  */
 public class CodeHelpper {
     //private static final String DB_URL ="jdbc:mysql://127.0.0.1/demo?useEncodingUnicode=true&amp;zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf-8&amp;useOldAliasMetadataBehavior=true&amp;allowMultiQueries=true";  
-	private static final String DB_URL ="jdbc:mysql://127.0.0.1/demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull";
-    private static final String DB_NAME = "root";  
-    private static final String DB_PASS = "admin";  
+	private static final String DB_URL ="jdbc:mysql://121.43.149.208:3308/air_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull";
+    private static final String DB_NAME = "dhair";  
+    private static final String DB_PASS = "pWt$9Ew4+ekJe84";  
     private static final String DB_DRIVER ="com.mysql.jdbc.Driver";
-    private static final String DB_SCHEMA = "demo";
+    private static final String DB_SCHEMA = "air_db";
 
     /** 作者名字 */
     private String authorName = "wutianbin";
     
     /** 表的前导字符 */
     //private String preTableName = "*";
-    private String preTableName = "oa\\_";
+    private String preTableName = "fp_exam";
     //private String preTableName = "fp\\_exam";
     //private String preTableName = "sys\\_";
     
@@ -61,6 +63,9 @@ public class CodeHelpper {
     /** 指定Mapper生成所在包的路径 */
     private String mapperOutPath = "mappers";
 
+    /** 指定ftl生成所在包的路径 */
+    private String ftlOutPath = "ftl";
+
     public void generate() {
         Connection con = initDB();
         if (con == null) {
@@ -90,6 +95,14 @@ public class CodeHelpper {
             	continue;
             } 
             
+            System.out.println(tableName);
+            System.out.println(tableComment);
+            System.out.println(key);
+            System.out.println(attrNames);
+            System.out.println(colNames);
+            System.out.println(colTypes);
+            System.out.println(colComments);
+            
             generateEntity(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
 
             // 不做读写分离的dao
@@ -102,9 +115,25 @@ public class CodeHelpper {
             generateServiceImpl(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
 
             generateController(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+            
+            generateUpdateFtl(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
         }
     }
     
+	private void generateUpdateFtl(String tableName, String tableComment, String key, List<String> attrNames,
+			List<String> colNames, List<String> colTypes, List<String> colComments) {
+		String tname = TableHelpper.tableNameToClassName(tableName);
+		String keyName = TableHelpper.columnNameToAttrName(key);
+		String path = ftlOutPath + "/" + StringUtils.firstToLowerCase(tname);
+		
+		String content = UpdateFtlMaker.parse(true, tableComment, keyName, attrNames, colTypes, colComments);
+		saveToFile(tableName, path, content, "update.ftl");
+		content = UpdateFtlMaker.parse(false, tableComment, keyName, attrNames, colTypes, colComments);
+		saveToFile(tableName, path, content, "save.ftl");
+		content = UpdateFtlMaker.parseList(tableComment, keyName, attrNames, colTypes, colComments);
+		saveToFile(tableName, path, content, "list.ftl");
+	}
+
 	private Connection initDB() {
         // 连接数据库
         

+ 114 - 0
src/main/java/org/geek/szbay/assistant/code/generator/UpdateFtlMaker.java

@@ -0,0 +1,114 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+
+public class UpdateFtlMaker {
+
+	public static String parseList(String tableComment, String keyName, List<String> attrNames, List<String> colTypes,
+			List<String> colComments) {
+		ClassLoader classLoader = UpdateFtlMaker.class.getClassLoader();
+		URL url = classLoader.getResource("list.ftl");
+		System.out.println(url.getFile());
+		String fileContent = null;
+		try {
+			fileContent = FileUtils.readFileToString(new File(url.getFile()), "utf-8");
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		StringBuilder sb1 = new StringBuilder();
+		StringBuilder sb2 = new StringBuilder();
+		sb1.append(
+				"\t\t\t\t\t\t\t\t\t<th><input type=\"button\" value=\"全选\" onclick=\"multiSelectCheck()\" /></th>\r\n");
+		sb2.append("\t\t\t\t\t\t\t\t\t<td><input type=\"checkbox\" name=\"multiSelect\" value=\"${item." + keyName
+				+ "}\" /></td>\r\n");
+		sb1.append("\t\t\t\t\t\t\t\t\t<th>序号</th>\r\n");
+		sb2.append(String.format(
+				"\t\t\t\t\t\t\t\t\t<td>${item_index+1}<input type=\"hidden\" name=\"%s\" value=\"${item.%s}\" /></td>\r\n",
+				keyName, keyName));
+		int size = attrNames.size();
+		for (int i = 0; i < size; i++) {
+			String attrName = attrNames.get(i);
+			String attrDescr = colComments.get(i);
+			String attrType = colTypes.get(i);
+
+			if (attrName.equals(keyName)) {
+				continue;
+			}
+
+			sb1.append(String.format("\t\t\t\t\t\t\t\t\t<th>%s</th>\r\n", attrDescr));
+			if (attrType.contains("Date")) {
+				sb2.append(String.format("\t\t\t\t\t\t\t\t\t<th>${(item.%s?string('yyyy-MM-dd HH:mm:ss'))!}</th>\r\n",
+						attrName));
+			} else {
+				sb2.append(String.format(
+						"\t\t\t\t\t\t\t\t\t<td><#if globalDict['%s']?exists && globalDict['%s'][item.%s]?exists> ${globalDict['%s'][item.%s]!} <#else> ${item.%s!} </#if></td>\r\n",
+						attrName, attrName, attrName, attrName, attrName, attrName));
+			}
+		}
+		sb1.append("\t\t\t\t\t\t\t\t\t<th>操作</th>");
+		sb2.append(String.format(
+				"\t\t\t\t\t\t\t\t\t<td><a href=\"###\" onclick=\"showModal('updatePage?%s=${item.%s}')\">编辑</a></td>",
+				keyName, keyName));
+		return String.format(fileContent, sb1.toString(), sb2.toString());
+	}
+
+	public static String parse(boolean update, String tableComment, String keyName, List<String> attrNames,
+			List<String> colTypes, List<String> colComments) {
+		StringBuilder sb = new StringBuilder();
+		sb.append(String.format("<form title=\"%s\" class=\"form-horizontal \">\r\n", update ? "更新" : "添加"));
+		int size = attrNames.size();
+		for (int i = 0; i < size; i++) {
+			String attrName = attrNames.get(i);
+			if ((attrName.contains("createdOn") || attrName.contains("modifiedOn"))
+					&& colTypes.get(i).contains("Date")) {
+				continue;
+			} else if (keyName.equals(attrNames.get(i)) && update) {
+				sb.append(String.format(
+						"\t<input id=\"updateKey\" type=\"hidden\" name=\"%s\" value=\"${ret.model.%s!}\" />\r\n",
+						attrName, attrName));
+			} else {
+				sb.append("\t<div class=\"form-group row\">\r\n");
+
+				sb.append(String.format("\t\t<label class=\"col-md-3 form-control-label\" for=\"%s\">%s</label>\r\n",
+						attrName, colComments.get(i)));
+
+				sb.append("\t\t<div class=\"col-md-9\">\r\n");
+
+				if (colTypes.get(i).contains("Date")) {
+					sb.append(String.format(
+							"\t\t\t<input type=\"text\" class=\"form-control\" name=\"%s\" value=\"%s\" />\r\n",
+							attrName,
+							update ? String.format("${(item.%s?string('yyyy-MM-dd HH:mm:ss'))!}", attrName) : ""));
+				} else {
+					sb.append(String.format(
+							"\t\t\t<#if globalDict['%s']?exists> <select class=\"form-control\" name=\"%s\">\r\n",
+							attrName, attrName));
+
+					sb.append(String.format("\t\t\t\t<#list globalDict['%s']?keys as key>\r\n", attrName));
+
+					sb.append(String.format("\t\t\t\t<option value=\"${key}\"%s>${globalDict['%s'][key]!}</option>\r\n",
+							update ? (" ${(key==ret.model." + attrName + ")?string( 'selected=\"selected\"','')}") : "",
+							attrName));
+
+					sb.append("\t\t\t\t</#list>\r\n");
+
+					sb.append(String.format(
+							"\t\t\t</select> <#else /> <input type=\"text\" class=\"form-control\" name=\"%s\" value=\"%s\" /> </#if>\r\n",
+							attrName, update ? "${ret.model." + attrName + "!}" : ""));
+				}
+
+				sb.append("\t\t</div>\r\n");
+				sb.append("\t</div>\r\n");
+			}
+
+		}
+		sb.append("</form>\r\n");
+		return sb.toString();
+	}
+
+}

+ 62 - 0
src/main/resources/list.ftl

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>东海航空</title>
+<!-- head  -->
+<#include "/common/head.ftl" />
+</head>
+<body class="app header-fixed sidebar-fixed aside-menu-fixed aside-menu-hidden">
+	<!-- header -->
+	<#include "/common/header.ftl" />
+	<div class="app-body">
+		<!-- sidebar -->
+		<#include "/common/sidebar.ftl" />
+		<!-- content -->
+		<main class="main">
+		<div class="container-fluid">
+			<!-- 弹出框 -->
+			<#include "/common/model.ftl" />
+			<div class="animated fadeIn">
+				<div class="card">
+					<div class="card-block">
+						<!-- 功能操作区 -->
+						<div class="row mb-1">
+							<div class="col-sm-2">
+								<button type="button" class="btn btn-primary" onclick="showModal('savePage')">添加</button>
+								<button type="button" class="btn btn-danger" onclick="deleteBatch()">删除</button>
+							</div>
+							<div class="col-sm-10">
+								<form id="searchform" action="listPage" method="get">
+									<input type="text" hidden="true" name="page" value="${ret.model.page}">
+									<input type="submit" hidden="true" class="btn btn btn-success" style="float: right;" value="查询">
+								</form>
+							</div>
+						</div>
+						<!-- 列表 -->
+						<table class="table table-bordered table-striped table-condensed">
+							<thead>
+								<tr>
+%s
+								</tr>
+							</thead>
+							<tbody id="table_data">
+								<#list ret.model.list as item>
+								<tr>
+%s
+								</tr>
+								</#list>
+							</tbody>
+						</table>
+						<!-- 分页 -->
+						<#include "/common/page.ftl" />
+					</div>
+				</div>
+			</div>
+		</div>
+		</main>
+	</div>
+	<!-- footer	-->
+	<#include "/common/footer.ftl" />
+</body>
+
+</html>