From 211840b64fa1132d76d6dff6c779e9ba2c0c450f Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期四, 07 四月 2022 19:13:54 +0800
Subject: [PATCH] 优化自动化代码

---
 src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java        |   10 
 src/main/java/org/yeshi/utils/generater/entity/ColumnData.java                  |   10 
 src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java                 |   42 ++
 src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java    |   12 
 src/main/resources/generater/admin/list.ftl                                     |   36 +
 src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java    |   14 
 src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java |   12 
 src/main/resources/schemas/generator.dtd                                        |    8 
 src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java              |   29 +
 src/main/java/org/yeshi/utils/generater/annotation/admin/Show.java              |    2 
 src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java     |   10 
 src/main/java/org/yeshi/utils/generater/GeneraterUtil.java                      |    7 
 src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ServiceData.java   |   10 
 src/main/resources/generater/admin/adminVO.template                             |   76 +++++
 src/main/resources/generater/admin/add.ftl                                      |   30 +
 src/main/resources/generater/admin/update.ftl                                   |   26 +
 src/main/resources/generater/dao/mybatisDBXML.ftl                               |    2 
 src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java           |   15 
 src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminVOVO.java      |  119 ++++++++
 src/main/java/org/yeshi/utils/generater/entity/admin/FormVerifyType.java        |    2 
 src/main/java/org/yeshi/utils/generater/mybatis/ColumnUtil.java                 |  364 ++++++++++++++-----------
 21 files changed, 597 insertions(+), 239 deletions(-)

diff --git a/src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java b/src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java
index 3f679a8..99af5a4 100644
--- a/src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java
+++ b/src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java
@@ -9,6 +9,7 @@
 import org.yeshi.utils.generater.util.NameUtil;
 import org.yeshi.utils.generater.vo.ExceptionVO;
 import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO;
+import org.yeshi.utils.generater.vo.admin.controller.AdminVOVO;
 import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO;
 import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO;
 import org.yeshi.utils.generater.vo.service.QueryVO;
@@ -82,7 +83,7 @@
         FileUtil.saveAsFileByte(data.getBytes("UTF-8"), path);
     }
 
-    public void createException(Class base) throws Exception {
+    public void createException(ClassInfo base) throws Exception {
         if (config.getService().getException() == null) {
             throw new Exception("灏氭湭閰嶇疆寮傚父淇℃伅");
         }
@@ -90,7 +91,7 @@
         String exceptionName = NameUtil.getDefaultExceptionName(config.getEntity());
         String path = getDirPath(config.getService().getException().getPkg());
         try {
-            ExceptionVO vo = new ExceptionVO.Builder().setEntity(config.getEntity()).setPackageName(config.getService().getException().getPkg()).setBase(new ClassInfo(base.getSimpleName(), base.getName())).build();
+            ExceptionVO vo = new ExceptionVO.Builder().setEntity(config.getEntity()).setPackageName(config.getService().getException().getPkg()).setBase(base).build();
             String result = GeneraterUtil.createException(vo);
             //淇濆瓨
             saveFile(result, new File(path, exceptionName + ".java").getAbsolutePath());
@@ -98,6 +99,25 @@
             e.printStackTrace();
         }
     }
+
+
+    public void createAdminVO() throws Exception {
+        if (StringUtil.isNullOrEmpty(config.getService().getAdminVOPackage())) {
+            throw new Exception("灏氭湭閰嶇疆AdminVO");
+        }
+
+        String name = NameUtil.getDefaultExceptionName(config.getEntity());
+        String path = getDirPath(config.getService().getAdminVOPackage());
+        try {
+            AdminVOVO vo = new AdminVOVO.Builder().setEntity(config.getEntity()).setPackageName(config.getService().getAdminVOPackage()).build();
+            String result = GeneraterUtil.createAdminVO(vo);
+            //淇濆瓨
+            saveFile(result, new File(path, name + ".java").getAbsolutePath());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 
     public void createDao() throws Exception {
 
@@ -220,7 +240,15 @@
         }
 
         if (config.getService().getException() != null) {
-            createException(Exception.class);
+            if (config.getService().getException().getBase() != null) {
+                createException(config.getService().getException().getBase());
+            } else {
+                createException(ClassInfo.create(Exception.class));
+            }
+        }
+
+        if (config.getService().getAdminVOPackage() != null) {
+            createAdminVO();
         }
 
         QueryVO queryVO = createQuery(config.getService().getQueryPackage());
@@ -388,8 +416,12 @@
     }
 
 
-    public static void main(String[] args) {
-        System.out.print(getHtmlNameFromEntityName("TTestEEntity"));
+    public static void main(String[] args) throws Exception {
+//        System.out.print(getHtmlNameFromEntityName("TTestEEntity"));
+//        AdminVOVO vo = new AdminVOVO.Builder().setEntity(TestEntity3.class).setPackageName("test.vo.admin").build();
+//        String result = GeneraterUtil.createAdminVO(vo);
+//        System.out.println(result);
+
     }
 
 
diff --git a/src/main/java/org/yeshi/utils/generater/GeneraterUtil.java b/src/main/java/org/yeshi/utils/generater/GeneraterUtil.java
index a51678a..b0b8fea 100644
--- a/src/main/java/org/yeshi/utils/generater/GeneraterUtil.java
+++ b/src/main/java/org/yeshi/utils/generater/GeneraterUtil.java
@@ -4,6 +4,7 @@
 import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo;
 import org.yeshi.utils.generater.vo.ExceptionVO;
 import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO;
+import org.yeshi.utils.generater.vo.admin.controller.AdminVOVO;
 import org.yeshi.utils.generater.vo.admin.page.FormAddInfoVO;
 import org.yeshi.utils.generater.vo.admin.page.FormUpdateInfoVO;
 import org.yeshi.utils.generater.vo.admin.page.ListInfoVO;
@@ -26,6 +27,12 @@
         return result;
     }
 
+    public static String createAdminVO(AdminVOVO vo) throws IOException {
+        String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater/admin/adminVO.template"));
+        System.out.println(result);
+        return result;
+    }
+
     public static String createMongoDBDao(MongoDBDaoVO vo) throws IOException {
         String result = FreemarkerUtils.generateInputStream(vo, GeneraterUtil.class.getClassLoader().getResourceAsStream("generater/dao/mongoDBDao.template"));
         System.out.println(result);
diff --git a/src/main/java/org/yeshi/utils/generater/annotation/admin/Show.java b/src/main/java/org/yeshi/utils/generater/annotation/admin/Show.java
index 7512520..c624369 100644
--- a/src/main/java/org/yeshi/utils/generater/annotation/admin/Show.java
+++ b/src/main/java/org/yeshi/utils/generater/annotation/admin/Show.java
@@ -37,7 +37,7 @@
 
     //鏄剧ず绫诲瀷
     enum ShowType {
-        TEXT, IMG,SWITCH;
+        TEXT,DATETIME, IMG,SWITCH;
     }
 
 
diff --git a/src/main/java/org/yeshi/utils/generater/entity/ColumnData.java b/src/main/java/org/yeshi/utils/generater/entity/ColumnData.java
index 61e39d2..6066cbd 100644
--- a/src/main/java/org/yeshi/utils/generater/entity/ColumnData.java
+++ b/src/main/java/org/yeshi/utils/generater/entity/ColumnData.java
@@ -4,6 +4,7 @@
     private String columnName;
     private String columnMehtod;
     private String type;
+    private String setColumnMehtodName;
 
 
     public ColumnData() {
@@ -13,6 +14,7 @@
         this.columnName = columnName;
         this.type = type;
         this.columnMehtod = "get" + (columnName.subSequence(0, 1) + "").toUpperCase() + columnName.subSequence(1, columnName.length()) + "()";
+        this.setColumnMehtodName = "set" + (columnName.subSequence(0, 1) + "").toUpperCase() + columnName.subSequence(1, columnName.length());
     }
 
     public String getColumnName() {
@@ -39,4 +41,12 @@
     public void setType(String type) {
         this.type = type;
     }
+
+    public String getSetColumnMehtodName() {
+        return setColumnMehtodName;
+    }
+
+    public void setSetColumnMehtodName(String setColumnMehtodName) {
+        this.setColumnMehtodName = setColumnMehtodName;
+    }
 }
diff --git a/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java b/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java
index ab34430..680df76 100644
--- a/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java
+++ b/src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java
@@ -331,12 +331,14 @@
                 FormComponentSelect formComponentSelect = (FormComponentSelect) component;
                 if (formComponentSelect.getApi() != null) {
                     params.put("apiPath", formComponentSelect.getApi().getPath());
-                    List<KeyValue> list = new ArrayList<>();
-                    for (Iterator<String> its = formComponentSelect.getApi().getParams().keySet().iterator(); its.hasNext(); ) {
-                        String key = its.next();
-                        list.add(new KeyValue(key, formComponentSelect.getApi().getParams().get(key) + ""));
+                    if(formComponentSelect.getApi().getParams()!=null) {
+                        List<KeyValue> list = new ArrayList<>();
+                        for (Iterator<String> its = formComponentSelect.getApi().getParams().keySet().iterator(); its.hasNext(); ) {
+                            String key = its.next();
+                            list.add(new KeyValue(key, formComponentSelect.getApi().getParams().get(key) + ""));
+                        }
+                        params.put("apiParams", list);
                     }
-                    params.put("apiParams", list);
                 }
 
                 if (formComponentSelect.getValues() != null) {
diff --git a/src/main/java/org/yeshi/utils/generater/entity/admin/FormVerifyType.java b/src/main/java/org/yeshi/utils/generater/entity/admin/FormVerifyType.java
index ad69201..03d4aaa 100644
--- a/src/main/java/org/yeshi/utils/generater/entity/admin/FormVerifyType.java
+++ b/src/main/java/org/yeshi/utils/generater/entity/admin/FormVerifyType.java
@@ -7,7 +7,7 @@
  * @date 2021/9/23 14:00
  */
 public enum FormVerifyType {
-    number("鏁板瓧"), phone("鐢佃瘽鍙风爜"), email("閭"), date("鏃ユ湡"), url("閾炬帴"), identity("韬唤璇�"), regex("姝e垯"),none("鏃犻獙璇佽鍒�");
+    number("鏁板瓧"), phone("鐢佃瘽鍙风爜"), email("閭"), date("鏃ユ湡"),datetime("鏃堕棿"), url("閾炬帴"), identity("韬唤璇�"), regex("姝e垯"),none("鏃犻獙璇佽鍒�");
 
 
     private FormVerifyType(String desc) {
diff --git a/src/main/java/org/yeshi/utils/generater/mybatis/ColumnUtil.java b/src/main/java/org/yeshi/utils/generater/mybatis/ColumnUtil.java
index 39d136f..a9793c5 100644
--- a/src/main/java/org/yeshi/utils/generater/mybatis/ColumnUtil.java
+++ b/src/main/java/org/yeshi/utils/generater/mybatis/ColumnUtil.java
@@ -13,187 +13,221 @@
 import org.dom4j.io.SAXReader;
 import org.dom4j.io.XMLWriter;
 import org.dom4j.tree.AbstractAttribute;
+import org.yeshi.utils.StringUtil;
 
 public class ColumnUtil {
 
-	@SuppressWarnings("rawtypes")
-	public static void addColumnToMapper(String path, String columnName, String property, String type) {
-		File xmlPath = new File(path);
-		SAXReader reader = new SAXReader();
-		Document document = null;
-		try {
-			document = reader.read(xmlPath);
-			Element root = document.getRootElement();
-			// 寰楀埌鏍瑰厓绱犵殑鎵�鏈夊瓙鑺傜偣
-			List<Element> elementList = root.elements();
-			// 閬嶅巻鎵�鏈夊瓙鑺傜偣
-			for (Element e : elementList) {
-				if (e.getName().equals("resultMap")) {
-					AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
-					if ("BaseResultMap".equalsIgnoreCase(attr.getValue())) {
-						List list = e.elements("result");
-						boolean isE = false;
-						for (int i = 0; i < list.size(); i++) {
-							Element item = (Element) list.get(i);
-							attr = (AbstractAttribute) item.attribute("property");
-							if (attr.getValue().trim().equalsIgnoreCase(property)) {
-								isE = true;
-								break;
-							}
-						}
-						if (!isE) {
-							List<KeyPair> li = new ArrayList<>();
-							li.add(new KeyPair("column", columnName));
-							li.add(new KeyPair("property", property));
-							li.add(new KeyPair("jdbcType", type));
-							e.add(createElement("result", li, null));
-						}
-					}
-				} else if (e.getName().equals("sql")) {
-					AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
-					if ("Base_Column_List".equalsIgnoreCase(attr.getValue())) {
-						String columns = e.getText();
-						String[] cs = columns.split(",");
-						boolean isE = false;
-						for (String c : cs) {
-							if (c.trim().equalsIgnoreCase(columnName)) {
-								isE = true;
-								break;
-							}
-						}
-						if (!isE) {
-							columns += ("," + columnName);
-							e.setText(columns);
-						}
-					}
 
-				} else if (e.getName().equals("insert")) {
-					AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
-					if ("insert".equalsIgnoreCase(attr.getValue())) {
-						String insert = e.getText();
-						String[] cs = insert.split("values ");
-						if (cs.length > 1) {
-							int start = cs[0].indexOf("(");
-							int end = cs[0].indexOf(")");
-							String columns = cs[0].substring(start, end);
-							String[] cols = columns.split(",");
-							boolean isE = false;
-							for (String col : cols) {
-								if (col.trim().equalsIgnoreCase(columnName)) {
-									isE = true;
-									break;
-								}
-							}
-							if (!isE) {
-								cs[0] = cs[0].replace(columns, columns + ("," + columnName));
-								start = cs[1].indexOf("(");
-								end = cs[1].indexOf(")");
-								String columns2 = cs[1].substring(start, end);
-								cs[1] = cs[1].replace(columns2,
-										columns2 + String.format(",#{%s,jdbcType=%s}", property, type));
-								insert = cs[0] + " values " + cs[1];
-								e.setText(insert);
-							}
-						}
+    /**
+     * @author hxh
+     * @description 鏍规嵁灞炴�ц幏鍙杝ql涓殑椹煎嘲瀛楁
+     * @date 15:44 2022/3/31
+     * @param: property
+     * @return java.lang.String
+     **/
+    public static String getColumnFromProperty(String property) {
+        StringBuffer buffer = new StringBuffer();
+        List<String> temp = new ArrayList<>();
+        for (int i = 0; i < property.length(); i++) {
+            //鏄惁涓哄ぇ鍐�
+            if (property.charAt(i) >= 65 && property.charAt(i) <= 90) {
+                temp.add(property.charAt(i) + "");
+            } else {
+                //娑堣垂涔嬪墠鐨�
+                if (temp.size() > 0) {
+                    buffer.append(("_" + StringUtil.concat(temp, "")).toLowerCase());
+                    temp.clear();
+                }
+                buffer.append(property.charAt(i));
+            }
+        }
 
-					} else if ("insertSelective".equalsIgnoreCase(attr.getValue())) {
-						List trims = e.elements("trim");
-						Element els = (Element) trims.get(0);
-						boolean isE = false;
-						for (int i = 0; i < els.elements("if").size(); i++) {
-							String cn = ((Element) els.elements("if").get(i)).getText().replace(",", "").trim();
-							if (columnName.equalsIgnoreCase(cn)) {
-								isE = true;
-								break;
-							}
-						}
-						if (!isE) {
-							List<KeyPair> list = new ArrayList<>();
-							list.add(new KeyPair("test", String.format("%s != null", property)));
-							els.add(createElement("if", list, columnName + ","));
+        if (temp.size() > 0) {
+            buffer.append(("_" + StringUtil.concat(temp, "")).toLowerCase());
+            temp.clear();
+        }
+        return buffer.toString();
+    }
 
-							els = (Element) trims.get(1);
-							list = new ArrayList<>();
-							list.add(new KeyPair("test", String.format("%s != null", property)));
-							els.add(createElement("if", list, String.format("#{%s,jdbcType=%s}", property, type)));
-						}
-					}
 
-				} else if (e.getName().equals("update")) {
-					AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
-					if ("updateByPrimaryKeySelective".equalsIgnoreCase(attr.getValue())) {
-						List list = ((Element) e.elements("set").get(0)).elements("if");
-						boolean isE = false;
-						for (int i = 0; i < list.size(); i++) {
-							if (((Element) list.get(i)).getText().indexOf(columnName) > -1) {
-								isE = true;
-								break;
-							}
-						}
-						if (!isE) {
-							List<KeyPair> klist = new ArrayList<>();
-							klist.add(new KeyPair("test", String.format("%s !=null", property)));
-							((Element) e.elements("set").get(0)).add(createElement("if", klist,
-									String.format("%s =#{%s,jdbcType=%s},", columnName, property, type)));
-						}
-					} else if ("updateByPrimaryKey".equalsIgnoreCase(attr.getValue())) {
-						String value = e.getText();
-						// 涓嶅瓨鍦ㄨ鍒�
-						if (value.indexOf(columnName) <= -1) {
-							int wpos = value.indexOf("where ");
-							if (value.substring(0, wpos).trim().endsWith(","))
-								value = value.substring(0, wpos)
-										+ String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
-										+ value.substring(wpos);
-							else
-								value = value.substring(0, wpos) + ","
-										+ String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
-										+ value.substring(wpos);
+    @SuppressWarnings("rawtypes")
+    public static void addColumnToMapper(String path, String columnName, String property, String type) {
+        File xmlPath = new File(path);
+        SAXReader reader = new SAXReader();
+        Document document = null;
+        try {
+            document = reader.read(xmlPath);
+            Element root = document.getRootElement();
+            // 寰楀埌鏍瑰厓绱犵殑鎵�鏈夊瓙鑺傜偣
+            List<Element> elementList = root.elements();
+            // 閬嶅巻鎵�鏈夊瓙鑺傜偣
+            for (Element e : elementList) {
+                if (e.getName().equals("resultMap")) {
+                    AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
+                    if ("BaseResultMap".equalsIgnoreCase(attr.getValue())) {
+                        List list = e.elements("result");
+                        boolean isE = false;
+                        for (int i = 0; i < list.size(); i++) {
+                            Element item = (Element) list.get(i);
+                            attr = (AbstractAttribute) item.attribute("property");
+                            if (attr.getValue().trim().equalsIgnoreCase(property)) {
+                                isE = true;
+                                break;
+                            }
+                        }
+                        if (!isE) {
+                            List<KeyPair> li = new ArrayList<>();
+                            li.add(new KeyPair("column", columnName));
+                            li.add(new KeyPair("property", property));
+                            li.add(new KeyPair("jdbcType", type));
+                            e.add(createElement("result", li, null));
+                        }
+                    }
+                } else if (e.getName().equals("sql")) {
+                    AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
+                    if ("Base_Column_List".equalsIgnoreCase(attr.getValue())) {
+                        String columns = e.getText();
+                        String[] cs = columns.split(",");
+                        boolean isE = false;
+                        for (String c : cs) {
+                            if (c.trim().equalsIgnoreCase(columnName)) {
+                                isE = true;
+                                break;
+                            }
+                        }
+                        if (!isE) {
+                            columns += ("," + columnName);
+                            e.setText(columns);
+                        }
+                    }
 
-							e.setText(value);
-						}
-					}
+                } else if (e.getName().equals("insert")) {
+                    AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
+                    if ("insert".equalsIgnoreCase(attr.getValue())) {
+                        String insert = e.getText();
+                        String[] cs = insert.split("values ");
+                        if (cs.length > 1) {
+                            int start = cs[0].indexOf("(");
+                            int end = cs[0].indexOf(")");
+                            String columns = cs[0].substring(start, end);
+                            String[] cols = columns.split(",");
+                            boolean isE = false;
+                            for (String col : cols) {
+                                if (col.trim().equalsIgnoreCase(columnName)) {
+                                    isE = true;
+                                    break;
+                                }
+                            }
+                            if (!isE) {
+                                cs[0] = cs[0].replace(columns, columns + ("," + columnName));
+                                start = cs[1].indexOf("(");
+                                end = cs[1].indexOf(")");
+                                String columns2 = cs[1].substring(start, end);
+                                cs[1] = cs[1].replace(columns2,
+                                        columns2 + String.format(",#{%s,jdbcType=%s}", property, type));
+                                insert = cs[0] + " values " + cs[1];
+                                e.setText(insert);
+                            }
+                        }
 
-				}
-			}
-		} catch (DocumentException e1) {
-			e1.printStackTrace();
-		}
-		if (document != null) {
-			OutputFormat format = OutputFormat.createPrettyPrint();
-			format.setEncoding("UTF-8");
-			try {
-				XMLWriter writer = new XMLWriter(new FileOutputStream(path), format);
-				writer.write(document);
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-	}
+                    } else if ("insertSelective".equalsIgnoreCase(attr.getValue())) {
+                        List trims = e.elements("trim");
+                        Element els = (Element) trims.get(0);
+                        boolean isE = false;
+                        for (int i = 0; i < els.elements("if").size(); i++) {
+                            String cn = ((Element) els.elements("if").get(i)).getText().replace(",", "").trim();
+                            if (columnName.equalsIgnoreCase(cn)) {
+                                isE = true;
+                                break;
+                            }
+                        }
+                        if (!isE) {
+                            List<KeyPair> list = new ArrayList<>();
+                            list.add(new KeyPair("test", String.format("%s != null", property)));
+                            els.add(createElement("if", list, columnName + ","));
 
-	private static Element createElement(String qName, List<KeyPair> keyPairList, String value) {
-		Element element = DocumentHelper.createElement(qName);
-		for (KeyPair kp : keyPairList) {
-			element.addAttribute(kp.key, kp.value);
-		}
-		if (value != null)
-			element.setText(value);
-		return element;
-	}
+                            els = (Element) trims.get(1);
+                            list = new ArrayList<>();
+                            list.add(new KeyPair("test", String.format("%s != null", property)));
+                            els.add(createElement("if", list, String.format("#{%s,jdbcType=%s}", property, type)));
+                        }
+                    }
+
+                } else if (e.getName().equals("update")) {
+                    AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
+                    if ("updateByPrimaryKeySelective".equalsIgnoreCase(attr.getValue())) {
+                        List list = ((Element) e.elements("set").get(0)).elements("if");
+                        boolean isE = false;
+                        for (int i = 0; i < list.size(); i++) {
+                            if (((Element) list.get(i)).getText().indexOf(columnName) > -1) {
+                                isE = true;
+                                break;
+                            }
+                        }
+                        if (!isE) {
+                            List<KeyPair> klist = new ArrayList<>();
+                            klist.add(new KeyPair("test", String.format("%s !=null", property)));
+                            ((Element) e.elements("set").get(0)).add(createElement("if", klist,
+                                    String.format("%s =#{%s,jdbcType=%s},", columnName, property, type)));
+                        }
+                    } else if ("updateByPrimaryKey".equalsIgnoreCase(attr.getValue())) {
+                        String value = e.getText();
+                        // 涓嶅瓨鍦ㄨ鍒�
+                        if (value.indexOf(columnName) <= -1) {
+                            int wpos = value.indexOf("where ");
+                            if (value.substring(0, wpos).trim().endsWith(","))
+                                value = value.substring(0, wpos)
+                                        + String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
+                                        + value.substring(wpos);
+                            else
+                                value = value.substring(0, wpos) + ","
+                                        + String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
+                                        + value.substring(wpos);
+
+                            e.setText(value);
+                        }
+                    }
+
+                }
+            }
+        } catch (DocumentException e1) {
+            e1.printStackTrace();
+        }
+        if (document != null) {
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            format.setEncoding("UTF-8");
+            try {
+                XMLWriter writer = new XMLWriter(new FileOutputStream(path), format);
+                writer.write(document);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private static Element createElement(String qName, List<KeyPair> keyPairList, String value) {
+        Element element = DocumentHelper.createElement(qName);
+        for (KeyPair kp : keyPairList) {
+            element.addAttribute(kp.key, kp.value);
+        }
+        if (value != null)
+            element.setText(value);
+        return element;
+    }
 
 }
 
 class KeyPair {
-	String key;
-	String value;
+    String key;
+    String value;
 
-	public KeyPair(String key, String value) {
-		this.key = key;
-		this.value = value;
-	}
+    public KeyPair(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
 
-	public KeyPair() {
+    public KeyPair() {
 
-	}
+    }
 
 }
diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminVOVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminVOVO.java
new file mode 100644
index 0000000..9dc3015
--- /dev/null
+++ b/src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminVOVO.java
@@ -0,0 +1,119 @@
+package org.yeshi.utils.generater.vo.admin.controller;
+
+import org.springframework.data.annotation.Transient;
+import org.yeshi.utils.generater.entity.ClassInfo;
+import org.yeshi.utils.generater.entity.ColumnData;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author hxh
+ * @title: AdminVO
+ * @description: TODO
+ * @date 2022/4/7 18:24
+ */
+public class AdminVOVO {
+
+    private String name;
+    private String packageName;
+    private ClassInfo entity;
+    private List<ColumnData> columns;
+
+    public static class Builder {
+        private Class entity;
+        private String packageName;
+
+        public Builder setEntity(Class entity) {
+            this.entity = entity;
+            return this;
+        }
+
+        public Builder setPackageName(String packageName) {
+            this.packageName = packageName;
+            return this;
+        }
+
+        public AdminVOVO build() throws Exception {
+            if (entity == null) {
+                throw new Exception("entity涓嶈兘涓虹┖");
+            }
+            if (packageName == null) {
+                throw new Exception("packageName涓嶈兘涓虹┖");
+            }
+            AdminVOVO vo = new AdminVOVO();
+            vo.setEntity(ClassInfo.create(entity));
+            vo.setName(entity.getSimpleName() + "AdminVO");
+            vo.setPackageName(packageName);
+            List<ColumnData> columnList = new ArrayList<>();
+            Field[] fields = entity.getDeclaredFields();
+            for (Field fd : fields) {
+                //private/public 闈瀎inal锛宻tatic灞炴�ф墠浼氬弬涓庤В鏋�
+                if (fd.getModifiers() != 1 && fd.getModifiers() != 2) {
+                    continue;
+                }
+                boolean valid = true;
+
+                Annotation[] as = fd.getAnnotations();
+                for (Annotation a : as) {
+                    //涓嶅弬涓庤В鏋�
+                    if (a instanceof Transient || a instanceof java.beans.Transient) {
+                        valid = false;
+                        break;
+                    }
+                }
+                if (!valid) {
+                    continue;
+                }
+
+                String property = fd.getName();
+
+                if(property.equalsIgnoreCase("createTime")||property.equalsIgnoreCase("updateTime")){
+                    continue;
+                }
+
+                String type = fd.getType().getSimpleName();
+                ColumnData columnData = new ColumnData(property, type);
+                columnList.add(columnData);
+            }
+            vo.setColumns(columnList);
+            return vo;
+        }
+
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName) {
+        this.packageName = packageName;
+    }
+
+    public ClassInfo getEntity() {
+        return entity;
+    }
+
+    public void setEntity(ClassInfo entity) {
+        this.entity = entity;
+    }
+
+    public List<ColumnData> getColumns() {
+        return columns;
+    }
+
+    public void setColumns(List<ColumnData> columns) {
+        this.columns = columns;
+    }
+}
diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java
index c8292a7..0c29421 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java
@@ -75,10 +75,12 @@
                 }
                 FormHttpRequestInfoVO requestInfoVO = new FormHttpRequestInfoVO();
                 Map<String, String> apiParams = new HashMap<>();
-                if (((List) row.getParams().get("apiParams")).size() > 0) {
-                    List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
-                    for (KeyValue kv : apiParamsList) {
-                        apiParams.put(kv.getKey(), kv.getValue());
+                if (row.getParams().get("apiParams") != null) {
+                    if (((List) row.getParams().get("apiParams")).size() > 0) {
+                        List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
+                        for (KeyValue kv : apiParamsList) {
+                            apiParams.put(kv.getKey(), kv.getValue());
+                        }
                     }
                 }
                 requestInfoVO.setParams(apiParams);
diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java
index 04da1ed..8704a00 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java
@@ -77,10 +77,12 @@
                 }
                 FormHttpRequestInfoVO requestInfoVO = new FormHttpRequestInfoVO();
                 Map<String, String> apiParams = new HashMap<>();
-                if (((List) row.getParams().get("apiParams")).size() > 0) {
-                    List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
-                    for (KeyValue kv : apiParamsList) {
-                        apiParams.put(kv.getKey(), kv.getValue());
+                if(row.getParams().get("apiParams")!=null) {
+                    if (((List) row.getParams().get("apiParams")).size() > 0) {
+                        List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
+                        for (KeyValue kv : apiParamsList) {
+                            apiParams.put(kv.getKey(), kv.getValue());
+                        }
                     }
                 }
                 requestInfoVO.setParams(apiParams);
diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java
index 2432a60..757c026 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java
@@ -8,6 +8,7 @@
 import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo;
 import org.yeshi.utils.generater.entity.admin.FormRowData;
 import org.yeshi.utils.generater.entity.admin.FormVerifyType;
+import org.yeshi.utils.generater.mybatis.ColumnUtil;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -53,11 +54,11 @@
             ListInfoVO vo = new ListInfoVO();
             vo.setListApi(generaterInfo.getControllerData().getMapping() + "/list");
             if (generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) {
-                vo.setAddPagePath(generaterInfo.getEntity().getSimpleName().toLowerCase() + "_add.html");
+                vo.setAddPagePath(ColumnUtil.getColumnFromProperty(generaterInfo.getEntity().getSimpleName()) + "_add.html");
             }
 
             if (generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0) {
-                vo.setUpdatePagePath(generaterInfo.getEntity().getSimpleName().toLowerCase() + "_update.html");
+                vo.setUpdatePagePath(ColumnUtil.getColumnFromProperty(generaterInfo.getEntity().getSimpleName()) + "_update.html");
             }
             vo.setSearchFormRows(generaterInfo.getSearchFormRows());
             vo.setShowFileds(generaterInfo.getShowDataList());
@@ -99,10 +100,12 @@
                 }
                 FormHttpRequestInfoVO requestInfoVO = new FormHttpRequestInfoVO();
                 Map<String, String> apiParams = new HashMap<>();
-                if (((List) row.getParams().get("apiParams")).size() > 0) {
-                    List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
-                    for (KeyValue kv : apiParamsList) {
-                        apiParams.put(kv.getKey(), kv.getValue());
+                if (row.getParams().get("apiParams") != null) {
+                    if (((List) row.getParams().get("apiParams")).size() > 0) {
+                        List<KeyValue> apiParamsList = (List<KeyValue>) row.getParams().get("apiParams");
+                        for (KeyValue kv : apiParamsList) {
+                            apiParams.put(kv.getKey(), kv.getValue());
+                        }
                     }
                 }
                 requestInfoVO.setParams(apiParams);
diff --git a/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java b/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java
index b86b3bc..347b1d1 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java
@@ -7,6 +7,7 @@
 import org.yeshi.utils.generater.entity.*;
 import org.yeshi.utils.generater.mybatis.Column;
 import org.yeshi.utils.generater.mybatis.ColumnParseUtil;
+import org.yeshi.utils.generater.mybatis.ColumnUtil;
 import org.yeshi.utils.generater.mybatis.Table;
 import org.yeshi.utils.generater.vo.ExceptionVO;
 import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData;
@@ -113,13 +114,18 @@
                 }
 
                 String property = fd.getName();
-                String column = fd.getName();
+                String column = null;
                 for (Annotation a : as) {
                     //涓嶅弬涓庤В鏋�
                     if (a instanceof Column) {
                         column = ((Column) a).name();
                         break;
                     }
+                }
+
+                //椹煎嘲鍐欐硶锛岄瀛楁瘝灏忓啓
+                if (column == null) {
+                    column = ColumnUtil.getColumnFromProperty(fd.getName());
                 }
 
                 MybatisColumnData columData = new MybatisColumnData(column, property, fd.getType().getSimpleName(), ColumnParseUtil.getJDBCType(fd.getType().getName()));
@@ -144,16 +150,19 @@
 
                 if (daoData != null) {
                     //鏌ヨ鏉′欢浠庡閮ㄤ紶鍏�
-                    for (DaoQuery query : daoData.getQueryList()) {
-                        if (query.getName().equalsIgnoreCase(columData.getProperty())) {
-                            if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) {
-                                daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt));
-                                daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte));
-                            } else {
-                                daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), query.getQueryType()));
+                    if (daoData.getQueryList() != null)
+                        for (DaoQuery query : daoData.getQueryList()) {
+                            if (query.getName().equalsIgnoreCase(columData.getProperty())) {
+                                if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) {
+                                    daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt));
+                                    daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte));
+                                } else {
+                                    daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), query.getQueryType()));
+                                }
+                            } else if (query.getName().equalsIgnoreCase(columData.getColumn())) {
+                                daoQueryColumnList.add(new DaoQueryColumnData(columData.getColumn(), columData, fd.getType().getSimpleName(), query.getQueryType()));
                             }
                         }
-                    }
 
                 } else {
                     //鑾峰彇娉ㄨВ鏌ヨ鏉′欢
@@ -236,4 +245,6 @@
     public void setTable(String table) {
         this.table = table;
     }
+
+
 }
diff --git a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java
index a14bee6..c7bffe1 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java
@@ -7,6 +7,7 @@
 import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition;
 import org.yeshi.utils.generater.annotation.admin.Show;
 import org.yeshi.utils.generater.annotation.admin.form.Text;
+import org.yeshi.utils.generater.entity.ClassInfo;
 import org.yeshi.utils.generater.entity.admin.FormVerifyType;
 import org.yeshi.utils.generater.vo.xmlconfig.admin.*;
 import org.yeshi.utils.generater.vo.xmlconfig.admin.form.*;
@@ -36,7 +37,7 @@
  */
 public class XmlConfigParseUtil {
 
-    public static GenertorConfig parse(InputStream inputStream) throws Exception {
+    public static GenertorConfig parse(InputStream inputStream, ClassLoader classLoader) throws Exception {
         if (inputStream == null) {
             throw new FileNotFoundException();
         }
@@ -50,7 +51,7 @@
         }
         Node rootNode = nodelist.item(0);
         String clazz = rootNode.getAttributes().getNamedItem("class").getNodeValue();
-        genertorConfig.setEntity(Class.forName(clazz));
+        genertorConfig.setEntity(classLoader.loadClass(clazz));
 
         nodelist = rootNode.getChildNodes();
         for (int i = 0; i < nodelist.getLength(); i++) {
@@ -69,8 +70,6 @@
                     genertorConfig.setAdmin(parseAdmin(node));
                 }
                 break;
-
-
             }
 
 
@@ -110,6 +109,7 @@
         data.setInterPackage(getNodeAttributeValue(node, "interPackage"));
         data.setImplPackage(getNodeAttributeValue(node, "implPackage"));
         data.setQueryPackage(getNodeAttributeValue(node, "queryPackage"));
+        data.setAdminVOPackage(getNodeAttributeValue(node, "adminVOPackage"));
 
         NodeList nodeList = node.getChildNodes();
         for (int i = 0; i < nodeList.getLength(); i++) {
@@ -117,6 +117,10 @@
                 ExceptionData exceptionData = new ExceptionData();
                 exceptionData.setPkg(getNodeAttributeValue(nodeList.item(i), "package"));
                 exceptionData.setName(getNodeAttributeValue(nodeList.item(i), "name"));
+                String base = getNodeAttributeValue(nodeList.item(i), "base");
+                if (base != null) {
+                    exceptionData.setBase(new ClassInfo(base.split("\\.")[base.split("\\.").length - 1], base));
+                }
                 data.setException(exceptionData);
                 break;
             }
@@ -418,7 +422,7 @@
 
 
     public static void main(String[] args) throws Exception {
-        GenertorConfig config = XmlConfigParseUtil.parse(new FileInputStream("D:\\workspace\\server\\utils\\src\\test\\test.xml"));
+        GenertorConfig config = XmlConfigParseUtil.parse(new FileInputStream("D:\\workspace\\server\\utils\\src\\test\\test.xml"), null);
         GeneraterManagerV2.getInstance().init("D:\\workspace\\server\\utils\\src\\test\\java", config);
         GeneraterManagerV2.getInstance().createWholeFunction();
         System.out.println(config);
diff --git a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java
index 18a72d2..69b0374 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java
@@ -1,5 +1,7 @@
 package org.yeshi.utils.generater.vo.xmlconfig.service;
 
+import org.yeshi.utils.generater.entity.ClassInfo;
+
 /**
  * @author hxh
  * @title: ExceptionData
@@ -10,6 +12,8 @@
 
     private String pkg;
     private String name;
+    private ClassInfo base;
+
 
     public String getPkg() {
         return pkg;
@@ -26,4 +30,12 @@
     public void setName(String name) {
         this.name = name;
     }
+
+    public ClassInfo getBase() {
+        return base;
+    }
+
+    public void setBase(ClassInfo base) {
+        this.base = base;
+    }
 }
diff --git a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ServiceData.java b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ServiceData.java
index 623dc3b..3b1c4d4 100644
--- a/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ServiceData.java
+++ b/src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ServiceData.java
@@ -12,6 +12,8 @@
     private String queryPackage;
     private ExceptionData exception;
 
+    private String adminVOPackage;
+
     public String getInterPackage() {
         return interPackage;
     }
@@ -43,4 +45,12 @@
     public void setQueryPackage(String queryPackage) {
         this.queryPackage = queryPackage;
     }
+
+    public String getAdminVOPackage() {
+        return adminVOPackage;
+    }
+
+    public void setAdminVOPackage(String adminVOPackage) {
+        this.adminVOPackage = adminVOPackage;
+    }
 }
diff --git a/src/main/resources/generater/admin/add.ftl b/src/main/resources/generater/admin/add.ftl
index 92fad6e..5c2a16e 100644
--- a/src/main/resources/generater/admin/add.ftl
+++ b/src/main/resources/generater/admin/add.ftl
@@ -8,12 +8,12 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport"
           content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="./js/xadmin.js"></script>
-    <script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="js/http.js" type="text/javascript" charset="utf-8"></script>
+    <link rel="stylesheet" href="../css/font.css">
+    <link rel="stylesheet" href="../css/xadmin.css">
+    <script type="text/javascript" src="../lib/layui/layui.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../js/xadmin.js"></script>
+    <script src="../js/vue.min.js" type="text/javascript" charset="utf-8"></script>
+    <script src="../js/http.js" type="text/javascript" charset="utf-8"></script>
     <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
     <!-- 璁㊣E8/9鏀寔濯掍綋鏌ヨ锛屼粠鑰屽吋瀹规爡鏍� -->
     <!--[if lt IE 9]>
@@ -33,7 +33,7 @@
                            <span class="x-red">*</span>
                         </#if>
                         ${value.params.title}</label>
-                     <div class="layui-input-block">
+                    <div class="layui-input-block">
                     <#switch value.type>
                         <#case "CheckBox"><#include "/admin/form/checkBox.ftl" ><#break>
                         <#case "Img">  <#include "/admin/form/img.ftl"><#break>
@@ -141,11 +141,12 @@
 </script>
 
 <script>
-    layui.use(['form', 'layer', 'jquery', 'upload'], function () {
+    layui.use(['form', 'layer', 'jquery', 'upload', 'laydate'], function () {
         $ = layui.jquery;
         var form = layui.form,
                 layer = layui.layer,
-                upload = layui.upload;
+                upload = layui.upload,
+                laydate = layui.laydate;
 
         var verify = {};
         <#list regexVerifyList as regex>
@@ -156,6 +157,15 @@
 
         //娓叉煋涓婁紶鎺т欢
         uploadTool.init(upload);
+
+        <#list rowsList as row >
+               <#if (row.type=="Text" && (row.params.inputType=="DATE"||row.params.inputType=="DATETIME"))>
+                    laydate.render({
+                          elem: "intput[name=${row.key}]", //鎸囧畾鍏冪礌
+                          type: ${row.params.inputType?lower_case}
+                    });
+               </#if>
+        </#list>
 
 
         //鐩戝惉鎻愪氦
@@ -175,7 +185,7 @@
                             data.field[onkeys[0]][onkeys[1]] = value;
                         }
                     }
-                    uploadTool.upload(function(){
+                    uploadTool.upload(function () {
                         //鍙戝紓姝ワ紝鎶婃暟鎹彁浜ょ粰php
                         ksapp.post('${addApi}', data.field, function (res) {
                             if (res.code == 0) {
diff --git a/src/main/resources/generater/admin/adminVO.template b/src/main/resources/generater/admin/adminVO.template
new file mode 100644
index 0000000..887ab7a
--- /dev/null
+++ b/src/main/resources/generater/admin/adminVO.template
@@ -0,0 +1,76 @@
+package ${packageName};
+
+import org.yeshi.utils.TimeUtil;
+import ${entity.clazz};
+
+import java.util.Date;
+
+public class ${name} {
+<#list columns as column >
+   <#if column.type=='Date'>
+    private String ${column.columnName};
+   <#elseif column.type=='Boolean'>
+    private String ${column.columnName};
+   <#else>
+    private ${column.type} ${column.columnName};
+   </#if>
+</#list>
+
+    public ${entity.name} toEntity(SystemEnum system) {
+        ${entity.name} entity = new ${entity.name}();
+        <#list columns as column >
+          <#if column.type=='Date'>
+        entity.${column.setColumnMehtodName}(new Date(TimeUtil.convertToTimeTemp(${column.columnName}, "yyyy-MM-dd HH:mm:ss")));
+         <#elseif column.type=='Boolean'>
+        entity.${column.setColumnMehtodName}("on".equalsIgnoreCase(${column.columnName}) ? true : false);
+         <#else>
+        entity.${column.setColumnMehtodName}(${column.columnName});
+          </#if>
+        </#list>
+        return entity;
+    }
+
+
+    public static ${name} create(${entity.name} entity) {
+        ${name} vo = new ${name}();
+        <#list columns as column >
+         <#if column.type=='Date'>
+        vo.${column.setColumnMehtodName}(TimeUtil.getGernalTime(entity.${column.columnMehtod}.getTime(), "yyyy-MM-dd HH:mm:ss"));
+         <#elseif column.type=='Boolean'>
+        vo.${column.setColumnMehtodName}(entity.${column.columnMehtod} ? "on" : null);
+          <#else>
+        vo.${column.setColumnMehtodName}(entity.${column.columnMehtod});
+          </#if>
+        </#list>
+        return vo;
+    }
+
+    <#list columns as column >
+     <#if column.type=='Date'>
+     public String ${column.columnMehtod} {
+        return ${column.columnName};
+     }
+
+      public void ${column.setColumnMehtodName}(String ${column.columnName}) {
+        this.${column.columnName} = ${column.columnName};
+      }
+      <#elseif column.type=='Boolean'>
+     public String ${column.columnMehtod} {
+        return ${column.columnName};
+     }
+
+      public void ${column.setColumnMehtodName}(String ${column.columnName}) {
+        this.${column.columnName} = ${column.columnName};
+      }
+      <#else>
+     public ${column.type} ${column.columnMehtod} {
+        return ${column.columnName};
+     }
+
+      public void ${column.setColumnMehtodName}(${column.type} ${column.columnName}) {
+        this.${column.columnName} = ${column.columnName};
+      }
+      </#if>
+    </#list>
+
+}
diff --git a/src/main/resources/generater/admin/list.ftl b/src/main/resources/generater/admin/list.ftl
index 31e4386..fe300e6 100644
--- a/src/main/resources/generater/admin/list.ftl
+++ b/src/main/resources/generater/admin/list.ftl
@@ -8,19 +8,19 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport"
           content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script src="./lib/layui/layui.js" charset="utf-8"></script>
-    <link rel="stylesheet" href="./css/theme3049.min.css">
-    <script src="./js/vue.min.js" type="text/javascript" charset="utf-8"></script>
-    <script type="text/javascript" src="./js/xadmin.js"></script>
-    <script src="./js/http.js" type="text/javascript" charset="utf-8"></script>
+    <link rel="stylesheet" href="../css/font.css">
+    <link rel="stylesheet" href="../css/xadmin.css">
+    <script src="../lib/layui/layui.js" charset="utf-8"></script>
+    <link rel="stylesheet" href="../css/theme3049.min.css">
+    <script src="../js/vue.min.js" type="text/javascript" charset="utf-8"></script>
+    <script type="text/javascript" src="../js/xadmin.js"></script>
+    <script src="../js/http.js" type="text/javascript" charset="utf-8"></script>
     <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
     <!--[if lt IE 9]>
     <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
     <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
     <![endif]-->
-    <script src="./js/utils.js"></script>
+    <script src="../js/utils.js"></script>
 </head>
 
 <body>
@@ -145,9 +145,9 @@
 
 <script>
     var tableIns = null;
+    var app=null;
     $(function () {
-
-        var app = new Vue({
+        app = new Vue({
             el: "#app",
             data: {
                 key: '',
@@ -170,7 +170,7 @@
                                 <#list searchFormRows as row >
                                     <#if (row.type=="Text" && row.params.inputType=="DATE")>
                                 laydate.render({
-                                    elem: "intput[name=${row.key}]" //鎸囧畾鍏冪礌
+                                    elem: "input[name=${row.key}]" //鎸囧畾鍏冪礌
                                 });
                                     </#if>
                                 </#list>
@@ -189,8 +189,10 @@
                                  <#list showFileds as field >
                                     <#if field.showType=='TEXT'>
                                     {field: '${field.identifier}', width: 120, sort: false, title: "${field.title}"},
+                                    <#elseif field.showType=='DATETIME'>
+                                    {field: '${field.identifier}', width: 150, sort: false, title: "${field.title}"},
                                     <#elseif field.showType=='SWITCH'>
-                                    {field: '${field.identifier}', width: 120, sort: false, title: "${field.title}",templet:function(res){
+                                    {field: '${field.identifier}', width: 80, sort: false, title: "${field.title}",templet:function(res){
                                          if(res.${field.identifier}){
                                              return " <input type=\"checkbox\" checked='true'  disabled  lay-skin=\"switch\"";
                                          }else{
@@ -269,6 +271,7 @@
                              if (res.code == 0) {
                                  //濉厖鏁版嵁
                                  $("${request.fillTarget}").empty();
+                                 $("${request.fillTarget}").append("<option value=''>璇烽�夋嫨</option>");
                                  for (var i = 0; i < res.data.length; i++) {
                                      var html = "<option value='" + res.data[i].key + "'>";
                                      html += res.data[i].value + "</option>";
@@ -316,9 +319,16 @@
                 },
                 </#if>
                 search: function (params) {
+
+                    var ps = {};
+                    for (var key in params) {
+                        if (params[key].length > 0) {
+                            ps[key] = params[key];
+                        }
+                    }
                     //鏁版嵁閲嶈浇
                     tableIns.reload({
-                        where: params,
+                        where: ps,
                         page: {
                             curr: 1 //閲嶆柊浠庣 1 椤靛紑濮�
                         }
diff --git a/src/main/resources/generater/admin/update.ftl b/src/main/resources/generater/admin/update.ftl
index 23cbc86..4134409 100644
--- a/src/main/resources/generater/admin/update.ftl
+++ b/src/main/resources/generater/admin/update.ftl
@@ -8,12 +8,12 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport"
           content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="./js/xadmin.js"></script>
-    <script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
-    <script src="js/http.js" type="text/javascript" charset="utf-8"></script>
+    <link rel="stylesheet" href="../css/font.css">
+    <link rel="stylesheet" href="../css/xadmin.css">
+    <script type="text/javascript" src="../lib/layui/layui.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../js/xadmin.js"></script>
+    <script src="../js/vue.min.js" type="text/javascript" charset="utf-8"></script>
+    <script src="../js/http.js" type="text/javascript" charset="utf-8"></script>
     <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
     <!-- 璁㊣E8/9鏀寔濯掍綋鏌ヨ锛屼粠鑰屽吋瀹规爡鏍� -->
     <!--[if lt IE 9]>
@@ -163,11 +163,12 @@
 </script>
 
 <script>
-    layui.use(['form', 'layer', 'jquery', 'upload'], function () {
+    layui.use(['form', 'layer', 'jquery', 'upload','laydate'], function () {
         $ = layui.jquery;
         var form = layui.form,
                 layer = layui.layer,
-                upload = layui.upload;
+                upload = layui.upload,
+                laydate= layui.laydate;
 
         var verify = {};
         <#list regexVerifyList as regex>
@@ -176,6 +177,15 @@
         //鑷畾涔夐獙璇佽鍒�
         form.verify(verify);
 
+        <#list rowsList as row >
+            <#if (row.type=="Text" && (row.params.inputType=="DATE"||row.params.inputType=="DATETIME"))>
+                    laydate.render({
+                        elem: "intput[name=${row.key}]", //鎸囧畾鍏冪礌
+                        type: ${row.params.inputType?lower_case}
+                    });
+            </#if>
+        </#list>
+
         //娓叉煋涓婁紶鎺т欢
         uploadTool.init(upload);
 
diff --git a/src/main/resources/generater/dao/mybatisDBXML.ftl b/src/main/resources/generater/dao/mybatisDBXML.ftl
index 1b420d4..59939c2 100644
--- a/src/main/resources/generater/dao/mybatisDBXML.ftl
+++ b/src/main/resources/generater/dao/mybatisDBXML.ftl
@@ -49,7 +49,7 @@
         values
         <trim prefix="(" suffix=")" suffixOverrides=",">
         <#list columnList as column>
-            <#noparse>#{</#noparse>${column.property}},jdbcType=${column.jdbcType}},
+            <#noparse>#{</#noparse>${column.property},jdbcType=${column.jdbcType}},
         </#list>
 
         </trim>
diff --git a/src/main/resources/schemas/generator.dtd b/src/main/resources/schemas/generator.dtd
index 63026be..046b776 100644
--- a/src/main/resources/schemas/generator.dtd
+++ b/src/main/resources/schemas/generator.dtd
@@ -19,9 +19,13 @@
         <!ATTLIST service interPackage CDATA #REQUIRED>
         <!ATTLIST service implPackage CDATA #REQUIRED>
         <!ATTLIST service queryPackage CDATA #REQUIRED>
+        <!ATTLIST service adminVOPackage CDATA #IMPLIED>
+
+
         <!ELEMENT exception  EMPTY>
         <!ATTLIST exception package CDATA #REQUIRED>
         <!ATTLIST exception name CDATA #IMPLIED>
+        <!ATTLIST exception base CDATA #IMPLIED>
 
 
         <!--琛ㄥ崟閰嶇疆淇℃伅 -->
@@ -52,7 +56,7 @@
         <!ATTLIST column property CDATA #REQUIRED>
         <!ATTLIST column title CDATA #REQUIRED>
         <!ATTLIST column order CDATA "0">
-        <!ATTLIST column showType (TEXT|IMG|SWITCH) #IMPLIED>
+        <!ATTLIST column showType (TEXT|DATETIME|IMG|SWITCH) #IMPLIED>
         <!ATTLIST column imgWidth CDATA "-1">
         <!ATTLIST column imgHeight CDATA "-1">
 
@@ -74,7 +78,7 @@
 
 
         <!ELEMENT verify  EMPTY>
-        <!ATTLIST verify type (number|phone|email|date|url|identity|regex|none) #REQUIRED>
+        <!ATTLIST verify type (number|phone|email|date|datetime|url|identity|regex|none) #REQUIRED>
         <!ATTLIST verify express CDATA #IMPLIED>
         <!ATTLIST verify notify CDATA #IMPLIED>
         <!ATTLIST verify require (true|false) #IMPLIED>

--
Gitblit v1.8.0