From 1a1a315efb1b5dc294013126f35819e36565040c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 30 九月 2021 18:06:48 +0800 Subject: [PATCH] 后台管理自动化代码生成 --- src/main/java/org/yeshi/utils/generater/util/AnotationUtil.java | 2 src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java | 128 ++ src/main/resources/generater/service/service.template | 14 src/main/resources/generater/admin/form/textArea.ftl | 4 src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java | 128 ++ src/main/resources/generater/service/method/save.template | 6 src/main/java/org/yeshi/utils/StringUtil.java | 565 +++++----- src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java | 9 src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java | 170 +++ src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java | 160 +++ src/main/resources/generater/admin/form/switch.ftl | 4 src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java | 34 src/main/resources/generater/admin/adminController.template | 172 +- src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java | 86 + src/main/resources/generater/admin/form/select.ftl | 4 src/main/resources/generater/service/queryVO.ftl | 17 src/main/resources/generater/admin/update.ftl | 338 +++++- src/main/java/org/yeshi/utils/generater/util/FormAnotationValidUtil.java | 12 src/main/resources/generater/service/method/delete.template | 14 src/main/resources/generater/service/serviceImpl.template | 23 src/main/resources/generater/admin/form/checkBox.ftl | 4 src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java | 10 src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java | 39 src/main/resources/generater/admin/form/img.ftl | 13 src/main/resources/generater/admin/list.ftl | 330 ++++++ src/main/resources/generater/admin/form/text.ftl | 4 src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java | 55 + src/test/java/com/generater/GeneratorTest.java | 14 src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java | 193 +++ src/main/java/org/yeshi/utils/generater/annotation/admin/form/Img.java | 7 src/main/resources/generater/admin/form/password.ftl | 4 src/main/resources/generater/service/method/list.template | 14 src/test/java/com/generater/TestEntity.java | 10 /dev/null | 16 src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java | 77 + src/main/java/org/yeshi/utils/generater/annotation/admin/form/Select.java | 4 src/main/resources/generater/service/method/add.template | 4 src/main/resources/generater/admin/form/radioGroup.ftl | 6 src/main/resources/generater/admin/add.ftl | 226 ++- src/main/java/org/yeshi/utils/generater/entity/BaseData.java | 10 src/main/resources/generater/service/method/count.template | 14 src/main/resources/generater/service/method/updateSlective.template | 2 src/main/resources/generater/service/method/selectByPrimaryKey.template | 4 43 files changed, 2,347 insertions(+), 603 deletions(-) diff --git a/src/main/java/org/yeshi/utils/StringUtil.java b/src/main/java/org/yeshi/utils/StringUtil.java index 61db38d..bce6048 100644 --- a/src/main/java/org/yeshi/utils/StringUtil.java +++ b/src/main/java/org/yeshi/utils/StringUtil.java @@ -17,314 +17,321 @@ public class StringUtil { - // 鍒ゆ柇鏄惁涓烘墜鏈哄彿鐮� - public static boolean isMobile(String mobile) { + // 鍒ゆ柇鏄惁涓烘墜鏈哄彿鐮� + public static boolean isMobile(String mobile) { - String regex = "^((13[0-9])|(17[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$"; - Pattern p = Pattern.compile(regex); - Matcher m = p.matcher(mobile); + String regex = "^((13[0-9])|(17[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$"; + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(mobile); - if (mobile == null || mobile.equals("") || mobile.length() != 11) { + if (mobile == null || mobile.equals("") || mobile.length() != 11) { - return false; + return false; - } else { - return m.find(); - } - } + } else { + return m.find(); + } + } - /** - * 鑾峰彇鏁板瓧鍜屽瓧姣嶇殑闅忔満鐮� - * - * @param count - * @return - */ - public static String getRandomCode(int count) { - String sts = "0123456789abcdefghijklmnopqrsduvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String code = ""; - for (int i = 0; i < count; i++) { - int p = (int) (Math.random() * 62); - code += sts.charAt(p); - } - return code; - } + /** + * 鑾峰彇鏁板瓧鍜屽瓧姣嶇殑闅忔満鐮� + * + * @param count + * @return + */ + public static String getRandomCode(int count) { + String sts = "0123456789abcdefghijklmnopqrsduvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String code = ""; + for (int i = 0; i < count; i++) { + int p = (int) (Math.random() * 62); + code += sts.charAt(p); + } + return code; + } - /** - * 鑾峰彇6浣嶆暟瀛楅獙璇佺爜 - * - * @return - */ - public static String getVerifyCode() { - String sts = "0123456789"; - String code = ""; - for (int i = 0; i < 6; i++) { - int p = (int) (Math.random() * 10); - code += sts.charAt(p); - } - return code; - } + /** + * 鑾峰彇6浣嶆暟瀛楅獙璇佺爜 + * + * @return + */ + public static String getVerifyCode() { + String sts = "0123456789"; + String code = ""; + for (int i = 0; i < 6; i++) { + int p = (int) (Math.random() * 10); + code += sts.charAt(p); + } + return code; + } - /** - * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌� - * - * @param text - * @return - */ - public static boolean isNullOrEmpty(String text) { - if (text == null || text.trim().length() == 0 || text.equalsIgnoreCase("null")) { - return true; - } - return false; - } + /** + * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌� + * + * @param text + * @return + */ + public static boolean isNullOrEmpty(String text) { + if (text == null || text.trim().length() == 0 || text.equalsIgnoreCase("null")) { + return true; + } + return false; + } - /** - * 32涓篗D5灏忓啓鍔犲瘑 - * - * @param st - * @return - */ - public static String Md5(String st) { - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - try { - md.update(st.getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - byte b[] = md.digest(); + /** + * 32涓篗D5灏忓啓鍔犲瘑 + * + * @param st + * @return + */ + public static String Md5(String st) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + try { + md.update(st.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + byte b[] = md.digest(); - int i; + int i; - StringBuffer buf = new StringBuffer(""); - for (int offset = 0; offset < b.length; offset++) { - i = b[offset]; - if (i < 0) - i += 256; - if (i < 16) - buf.append("0"); - buf.append(Integer.toHexString(i)); - } - return buf.toString(); - // LogUtil.i("result: " + buf.toString());// 32位锟侥硷拷锟斤拷 - // LogUtil.i("result: " + buf.toString().substring(8, - // 24));// 16位锟侥硷拷锟斤拷 - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return null; - } + StringBuffer buf = new StringBuffer(""); + for (int offset = 0; offset < b.length; offset++) { + i = b[offset]; + if (i < 0) + i += 256; + if (i < 16) + buf.append("0"); + buf.append(Integer.toHexString(i)); + } + return buf.toString(); + // LogUtil.i("result: " + buf.toString());// 32位锟侥硷拷锟斤拷 + // LogUtil.i("result: " + buf.toString().substring(8, + // 24));// 16位锟侥硷拷锟斤拷 + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return null; + } - public static String MD5Hmac(String st, String key) { - try { - return HmacUtils.byte2hex(HmacUtils.encryptHMAC(st, key)); - } catch (InvalidKeyException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + public static String MD5Hmac(String st, String key) { + try { + return HmacUtils.byte2hex(HmacUtils.encryptHMAC(st, key)); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } - /** - * 灏唍ull杞负绌哄瓧绗︿覆 - * - * @param st - * @return - */ - public static String getString(String st) { - return isNullOrEmpty(st) ? "" : st; - } + /** + * 灏唍ull杞负绌哄瓧绗︿覆 + * + * @param st + * @return + */ + public static String getString(String st) { + return isNullOrEmpty(st) ? "" : st; + } - /** - * 灏嗘暣鏁拌浆涓哄瓧绗︿覆 - * - * @param i - * @return - */ - public static String getString(int i) { - return getString(i + ""); - } + /** + * 灏嗘暣鏁拌浆涓哄瓧绗︿覆 + * + * @param i + * @return + */ + public static String getString(int i) { + return getString(i + ""); + } - /** - * 灏嗛暱鏁村舰杞负瀛楃涓� - * - * @param i - * @return - */ - public static String getString(long i) { - return getString(i + ""); - } + /** + * 灏嗛暱鏁村舰杞负瀛楃涓� + * + * @param i + * @return + */ + public static String getString(long i) { + return getString(i + ""); + } - /** - * 鑾峰彇鐢佃瘽鍙风爜鐨勯殣钘忔牸寮� - * - * @param mobile - * @return - */ - public static String getSubMobile(String mobile) { - if (!StringUtil.isNullOrEmpty(mobile) && mobile.length() > 10) { - return mobile.subSequence(0, 3).toString() + "****" + mobile.subSequence(7, mobile.length()).toString(); - } else - return mobile; - } + /** + * 鑾峰彇鐢佃瘽鍙风爜鐨勯殣钘忔牸寮� + * + * @param mobile + * @return + */ + public static String getSubMobile(String mobile) { + if (!StringUtil.isNullOrEmpty(mobile) && mobile.length() > 10) { + return mobile.subSequence(0, 3).toString() + "****" + mobile.subSequence(7, mobile.length()).toString(); + } else + return mobile; + } - /** - * BASE64鍔犲瘑 - * - * @param b - * @return - */ - @SuppressWarnings("restriction") - public static String getBase64FromByte(byte[] b) { + /** + * BASE64鍔犲瘑 + * + * @param b + * @return + */ + @SuppressWarnings("restriction") + public static String getBase64FromByte(byte[] b) { - String s = null; - if (b != null) { - s = new BASE64Encoder().encode(b); - } - return s; - } + String s = null; + if (b != null) { + s = new BASE64Encoder().encode(b); + } + return s; + } - /** - * 鎻愬彇瀛楃涓蹭腑鐨勬墍鏈夋暟瀛� - * - * @param st - * @return - */ - public static String getNumberFromString(String st) { - String number = ""; - Pattern p = Pattern.compile("[0-9\\.]+"); - Matcher m = p.matcher(st); + /** + * 鎻愬彇瀛楃涓蹭腑鐨勬墍鏈夋暟瀛� + * + * @param st + * @return + */ + public static String getNumberFromString(String st) { + String number = ""; + Pattern p = Pattern.compile("[0-9\\.]+"); + Matcher m = p.matcher(st); - while (m.find()) { - number += (m.group() + ","); - } - return number; - } + while (m.find()) { + number += (m.group() + ","); + } + return number; + } - /** - * 灏嗗瓧绗︿覆杞负UTF-8缂栫爜 - * - * @param resource - * @param chactor - * @return - */ - public static String getUTF8String(String resource, String chactor) { - if (!isNullOrEmpty(resource)) { - try { - return new String(resource.getBytes(chactor), "UTF-8"); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return ""; - } + /** + * 灏嗗瓧绗︿覆杞负UTF-8缂栫爜 + * + * @param resource + * @param chactor + * @return + */ + public static String getUTF8String(String resource, String chactor) { + if (!isNullOrEmpty(resource)) { + try { + return new String(resource.getBytes(chactor), "UTF-8"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return ""; + } - /** - * Base64鍔犲瘑 - * - * @param str - * @return - * @throws Exception - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static String getBase64String(String str) throws Exception { - byte[] input = str.getBytes("UTF-8"); - Class clazz = Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64"); - Method mainMethod = clazz.getMethod("encode", byte[].class); - mainMethod.setAccessible(true); - Object retObj = mainMethod.invoke(null, new Object[] { input }); - return (String) retObj; - } - + /** + * Base64鍔犲瘑 + * + * @param str + * @return + * @throws Exception + */ + @SuppressWarnings({"unchecked", "rawtypes"}) + public static String getBase64String(String str) throws Exception { + byte[] input = str.getBytes("UTF-8"); + Class clazz = Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64"); + Method mainMethod = clazz.getMethod("encode", byte[].class); + mainMethod.setAccessible(true); + Object retObj = mainMethod.invoke(null, new Object[]{input}); + return (String) retObj; + } - /** - * BASE64瑙e瘑 - * - * @param s - * @return - */ - public static String getFromBase64(String s) { - byte[] b = null; - String result = null; - if (s != null) { - final Base64 base64 = new Base64(); - try { - b = base64.decode(s.getBytes("UTF-8")); - result = new String(b, "utf-8"); - } catch (Exception e) { - e.printStackTrace(); - } - } - return result; - } - /** - * SHA1鍔犲瘑 - * - * @param decript - * @return - */ - public static String SHA1(String decript) { - try { - MessageDigest digest = MessageDigest.getInstance("SHA-1"); - digest.update(decript.getBytes()); - byte messageDigest[] = digest.digest(); - // Create Hex String - StringBuffer hexString = new StringBuffer(); - // 瀛楄妭鏁扮粍杞崲锟�?鍗佸叚杩涘埗 锟�? - for (int i = 0; i < messageDigest.length; i++) { - String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); - if (shaHex.length() < 2) { - hexString.append(0); - } - hexString.append(shaHex); - } - return hexString.toString(); + /** + * BASE64瑙e瘑 + * + * @param s + * @return + */ + public static String getFromBase64(String s) { + byte[] b = null; + String result = null; + if (s != null) { + final Base64 base64 = new Base64(); + try { + b = base64.decode(s.getBytes("UTF-8")); + result = new String(b, "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } + } + return result; + } - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return ""; - } + /** + * SHA1鍔犲瘑 + * + * @param decript + * @return + */ + public static String SHA1(String decript) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-1"); + digest.update(decript.getBytes()); + byte messageDigest[] = digest.digest(); + // Create Hex String + StringBuffer hexString = new StringBuffer(); + // 瀛楄妭鏁扮粍杞崲锟�?鍗佸叚杩涘埗 锟�? + for (int i = 0; i < messageDigest.length; i++) { + String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); + if (shaHex.length() < 2) { + hexString.append(0); + } + hexString.append(shaHex); + } + return hexString.toString(); - public static long[] parseLong(String[] arr) { - long[] lArr = new long[arr.length]; - int ii = 0; - for (String str : arr) { - lArr[ii] = Long.parseLong(str); - ii++; - } - return lArr; - } + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } - public static String concat(List list, String sperator) { - if (list == null) - return null; - String str = ""; - for (Object obj : list) { - str += obj + sperator; - } - if (str.endsWith(sperator)) - str = str.substring(0, str.length() - sperator.length()); - return str; - } + public static long[] parseLong(String[] arr) { + long[] lArr = new long[arr.length]; + int ii = 0; + for (String str : arr) { + lArr[ii] = Long.parseLong(str); + ii++; + } + return lArr; + } - public static String concat(Object[] array, String sperator) { - if (array == null) - return null; + public static String concat(List list, String sperator) { + if (list == null) + return null; + String str = ""; + for (Object obj : list) { + str += obj + sperator; + } + if (str.endsWith(sperator)) + str = str.substring(0, str.length() - sperator.length()); + return str; + } - String str = ""; - for (int i = 0; i < array.length; i++) { - str += array[i] + sperator; - } + public static String concat(Object[] array, String sperator) { + if (array == null) + return null; - if (str.endsWith(sperator)) - str = str.substring(0, str.length() - sperator.length()); - return str; - } + String str = ""; + for (int i = 0; i < array.length; i++) { + str += array[i] + sperator; + } + + if (str.endsWith(sperator)) + str = str.substring(0, str.length() - sperator.length()); + return str; + } + + //棣栧瓧姣嶅皬鍐� + public static String firstCharToLower(String st) { + if (st == null || st.length() < 2) + return st; + return st.substring(0, 1).toLowerCase() + st.substring(1); + } } diff --git a/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java b/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java index 9ad08b6..7b17272 100644 --- a/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java +++ b/src/main/java/org/yeshi/utils/generater/SpringComponentGenerater.java @@ -3,7 +3,7 @@ import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.entity.ExceptionData; import org.yeshi.utils.generater.entity.MongoDBDaoData; -import org.yeshi.utils.generater.entity.ServiceData; +import org.yeshi.utils.generater.vo.ServiceInfoVO; import java.io.File; @@ -27,9 +27,9 @@ * @param targetDir * @throws Exception */ - public static void createService(ServiceData data, String targetDir) throws Exception { + public static void createService(ServiceInfoVO data, String targetDir) throws Exception { - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/service.template"), new File(targetDir, data.getServiceClassName() + ".java").getAbsolutePath(), data); + FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/service/service.template"), new File(targetDir, data.getServiceClassName() + ".java").getAbsolutePath(), data); } /** @@ -39,9 +39,9 @@ * @param targetDir * @throws Exception */ - public static void createServiceImpl(ServiceData data, String targetDir) throws Exception { + public static void createServiceImpl(ServiceInfoVO data, String targetDir) throws Exception { - FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/serviceImpl.template"), new File(targetDir, data.getServiceClassName() + "Impl.java").getAbsolutePath(), data); + FreemarkerUtils.renderingTemplateAndGenerateFile(SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/service/serviceImpl.template"), new File(targetDir, data.getServiceClassName() + "Impl.java").getAbsolutePath(), data); } diff --git a/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Img.java b/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Img.java index 01ca254..613d6b9 100644 --- a/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Img.java +++ b/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Img.java @@ -31,4 +31,11 @@ //鍥剧墖楂樺害px锛岄粯璁や笉璁剧疆 int height() default -1; + + //鍥剧墖涓婁紶鐨凙PI + String uploadApi() default ""; + + //鍥剧墖涓婁紶API鐨勫弬鏁� + String[] uploadApiParams() default ""; + } diff --git a/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Select.java b/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Select.java index 02b5762..8eadac2 100644 --- a/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Select.java +++ b/src/main/java/org/yeshi/utils/generater/annotation/admin/form/Select.java @@ -36,4 +36,8 @@ String apiPath() default ""; + //api鐨勮姹傚弬鏁� + String[] apiParams() default ""; + + } diff --git a/src/main/java/org/yeshi/utils/generater/entity/BaseData.java b/src/main/java/org/yeshi/utils/generater/entity/BaseData.java index 76dcbee..27bcbe5 100644 --- a/src/main/java/org/yeshi/utils/generater/entity/BaseData.java +++ b/src/main/java/org/yeshi/utils/generater/entity/BaseData.java @@ -2,7 +2,7 @@ public class BaseData { private String packageName; - private String entityClass; + private ClassInfo entity; public String getPackageName() { return packageName; @@ -12,11 +12,11 @@ this.packageName = packageName; } - public String getEntityClass() { - return entityClass; + public ClassInfo getEntity() { + return entity; } - public void setEntityClass(String entityClass) { - this.entityClass = entityClass; + public void setEntity(ClassInfo entity) { + this.entity = entity; } } diff --git a/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java b/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java new file mode 100644 index 0000000..d241acc --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/entity/ClassInfo.java @@ -0,0 +1,34 @@ +package org.yeshi.utils.generater.entity; + +/** + * @author Administrator + * @title: ClassInfo + * @description: 绫讳俊鎭� + * @date 2021/9/30 15:53 + */ +public class ClassInfo { + + private String name; + private String clazz; + + public ClassInfo(String name, String clazz) { + this.name = name; + this.clazz = clazz; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getClazz() { + return clazz; + } + + public void setClazz(String clazz) { + this.clazz = clazz; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/entity/ServiceData.java b/src/main/java/org/yeshi/utils/generater/entity/ServiceData.java deleted file mode 100644 index 403563d..0000000 --- a/src/main/java/org/yeshi/utils/generater/entity/ServiceData.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.yeshi.utils.generater.entity; - -public class ServiceData extends BaseData { - private String serviceClassName; - private String daoClassName; - private String daoClass; - private String daoClassCaseName; - private String serviceClass; - - - public static class Builder { - private Class entityClass; - private String packageName; - private Class daoClass; - private Class serviceClass; - - public Builder setServiceClass(Class serviceClass) { - this.serviceClass = serviceClass; - return this; - } - - public Builder setEntityClass(Class entityClass) { - this.entityClass = entityClass; - return this; - } - - public Builder setPackageName(String packageName) { - this.packageName = packageName; - return this; - } - - public Builder setDaoClass(Class daoClass) { - this.daoClass = daoClass; - return this; - } - - public ServiceData build() { - ServiceData serviceData = new ServiceData(); - if (daoClass != null) { - serviceData.setDaoClassCaseName((daoClass.getSimpleName().subSequence(0, 1) + "").toLowerCase() + daoClass.getSimpleName().subSequence(1, daoClass.getSimpleName().length())); - serviceData.setDaoClassName(daoClass.getSimpleName()); - serviceData.setDaoClass(daoClass.getName()); - } - if (serviceClass != null) { - serviceData.setServiceClass(serviceClass.getName()); - } - serviceData.setServiceClassName(entityClass.getSimpleName() + "Service"); - serviceData.setEntityClass(entityClass.getName()); - serviceData.setPackageName(packageName); - return serviceData; - } - - } - - public String getServiceClassName() { - return serviceClassName; - } - - public void setServiceClassName(String serviceClassName) { - this.serviceClassName = serviceClassName; - } - - public String getDaoClassName() { - return daoClassName; - } - - public void setDaoClassName(String daoClassName) { - this.daoClassName = daoClassName; - } - - public String getDaoClassCaseName() { - return daoClassCaseName; - } - - public void setDaoClassCaseName(String daoClassCaseName) { - this.daoClassCaseName = daoClassCaseName; - } - - public String getDaoClass() { - return daoClass; - } - - public void setDaoClass(String daoClass) { - this.daoClass = daoClass; - } - - public String getServiceClass() { - return serviceClass; - } - - public void setServiceClass(String serviceClass) { - this.serviceClass = serviceClass; - } -} 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 65c382a..96eed04 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 @@ -18,7 +18,7 @@ //entity绫� private Class entity; //controller娉ㄨВ瀵硅薄 - private Map<String, Object> controllerData; + private AdminController controllerData; //淇敼鐨勮〃鍗曡鏁版嵁 private List<FormRowData> updateFormRows; //娣诲姞鐨勮〃鍗曡鏁版嵁 @@ -37,14 +37,13 @@ this.entity = entity; } - public Map<String, Object> getControllerData() { + public AdminController getControllerData() { return controllerData; } - public void setControllerData(Map<String, Object> controllerData) { + public void setControllerData(AdminController controllerData) { this.controllerData = controllerData; } - public List<FormRowData> getUpdateFormRows() { return updateFormRows; @@ -98,7 +97,7 @@ if (an instanceof AdminController) { Class searchFormClass = ((AdminController) an).searchForm(); AdminGeneraterInfo info = new AdminGeneraterInfo(); - info.setControllerData(AnotationUtil.getParamsMap(an)); + info.setControllerData((AdminController) an); info.setSearchFormRows(AnotationUtil.getFormRowData(searchFormClass)); info.setAddFormRows(AnotationUtil.getFormRowData(entity)); info.setUpdateFormRows(AnotationUtil.getUpdateFormRowData(entity)); diff --git a/src/main/java/org/yeshi/utils/generater/util/AnotationUtil.java b/src/main/java/org/yeshi/utils/generater/util/AnotationUtil.java index f70653e..6ade380 100644 --- a/src/main/java/org/yeshi/utils/generater/util/AnotationUtil.java +++ b/src/main/java/org/yeshi/utils/generater/util/AnotationUtil.java @@ -38,7 +38,7 @@ if (arrays.length == 1 && StringUtil.isNullOrEmpty(arrays[0])) { } else { for (String st : (String[]) value) { - values.add(new KeyValue(st.substring(0, st.indexOf(",")), st.substring(st.indexOf(",") + 1))); + values.add(new KeyValue(st.substring(0, st.indexOf(":")), st.substring(st.indexOf(":") + 1))); } } params.put(md.getName(), values); diff --git a/src/main/java/org/yeshi/utils/generater/util/FormAnotationValidUtil.java b/src/main/java/org/yeshi/utils/generater/util/FormAnotationValidUtil.java index 0aff7a2..704e1aa 100644 --- a/src/main/java/org/yeshi/utils/generater/util/FormAnotationValidUtil.java +++ b/src/main/java/org/yeshi/utils/generater/util/FormAnotationValidUtil.java @@ -67,8 +67,8 @@ } for (String st : checkBox.values()) { - if (!st.contains(",")) { - throw new AnotationException("澶嶉�夋鐨勫唴瀹规牸寮忛敊璇紝閿�煎瑕佺敤閫楀彿鍒嗛殧"); + if (!st.contains(":")) { + throw new AnotationException("澶嶉�夋鐨勫唴瀹规牸寮忛敊璇紝閿�煎瑕佺敤:鍒嗛殧"); } } } @@ -94,8 +94,8 @@ } for (String st : radioGroup.values()) { - if (!st.contains(",")) { - throw new AnotationException("鍗曢�夋鐨勫唴瀹规牸寮忛敊璇紝閿�煎瑕佺敤閫楀彿鍒嗛殧"); + if (!st.contains(":")) { + throw new AnotationException("鍗曢�夋鐨勫唴瀹规牸寮忛敊璇紝閿�煎瑕佺敤:鍒嗛殧"); } } @@ -111,8 +111,8 @@ } } else { for (String st : select.values()) { - if (!st.contains(",")) { - throw new AnotationException("涓嬫媺妗嗙殑鍐呭鏍煎紡閿欒锛岄敭鍊煎瑕佺敤閫楀彿鍒嗛殧"); + if (!st.contains(":")) { + throw new AnotationException("涓嬫媺妗嗙殑鍐呭鏍煎紡閿欒锛岄敭鍊煎瑕佺敤:鍒嗛殧"); } } } diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java new file mode 100644 index 0000000..a731968 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/ServiceImplInfoVO.java @@ -0,0 +1,86 @@ +package org.yeshi.utils.generater.vo; + +import org.yeshi.utils.generater.entity.BaseData; +import org.yeshi.utils.generater.entity.ClassInfo; + +import java.util.List; + +public class ServiceImplInfoVO extends BaseData { + private ClassInfo service; + private ClassInfo dao; + + //鏂规硶鍒楄〃 + private List<ServiceMetodInfoVO> metodInfoList; + + + public static class Builder { + private Class entityClass; + private String packageName; + private Class daoClass; + private Class serviceClass; + + public Builder setServiceClass(Class serviceClass) { + this.serviceClass = serviceClass; + return this; + } + + public Builder setEntityClass(Class entityClass) { + this.entityClass = entityClass; + return this; + } + + public Builder setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + public Builder setDaoClass(Class daoClass) { + this.daoClass = daoClass; + return this; + } + + public ServiceImplInfoVO build() { + ServiceImplInfoVO serviceData = new ServiceImplInfoVO(); + serviceData.setEntity(entityClass); + serviceData.setEntity(new ClassInfo(entityClass.getSimpleName(), entityClass.getName())); + serviceData.setPackageName(packageName); + return serviceData; + } + + } + + public ClassInfo getService() { + return service; + } + + public void setService(ClassInfo service) { + this.service = service; + } + + public ClassInfo getDao() { + return dao; + } + + public void setDao(ClassInfo dao) { + this.dao = dao; + } + + @Override + public ClassInfo getEntity() { + return entity; + } + + @Override + public void setEntity(ClassInfo entity) { + this.entity = entity; + } + + public List<ServiceMetodInfoVO> getMetodInfoList() { + return metodInfoList; + } + + public void setMetodInfoList(List<ServiceMetodInfoVO> metodInfoList) { + this.metodInfoList = metodInfoList; + } +} + diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java new file mode 100644 index 0000000..67924f7 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/ServiceInfoVO.java @@ -0,0 +1,128 @@ +package org.yeshi.utils.generater.vo; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.entity.BaseData; +import org.yeshi.utils.generater.entity.ClassInfo; + +import java.util.ArrayList; +import java.util.List; + +public class ServiceInfoVO extends BaseData { + private ClassInfo service; + private ClassInfo dao; + //鏂规硶鍒楄〃 + private List<ServiceMetodInfoVO> metodInfoList; + + + public static class Builder { + private Class entity; + private String packageName; + private ClassInfo dao; + private ClassInfo service; + private ClassInfo query; + + + public Builder setEntity(Class entity) { + this.entity = entity; + return this; + } + + public Builder setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + public Builder setDao(ClassInfo dao) { + this.dao = dao; + return this; + } + + public Builder setService(ClassInfo service) { + this.service = service; + return this; + } + + public Builder setQuery(ClassInfo query) { + this.query = query; + return this; + } + + + public ServiceInfoVO build() throws Exception { + ServiceInfoVO serviceData = new ServiceInfoVO(); + serviceData.setDao(dao); + serviceData.setService(service); + serviceData.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName())); + serviceData.setPackageName(packageName); + //璁剧疆鎺ュ彛 + List<ServiceMetodInfoVO> metodInfoVOList = new ArrayList<>(); + /*******娣诲姞鏂规硶寮�濮�*******/ + List<String> params = null; + ServiceMetodInfoVO metodInfo = null; + //list鏂规硶 + params = new ArrayList<>(); + params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); + params.add("int page"); + params.add("int pageSize"); + metodInfo = new ServiceMetodInfoVO("public", String.format("List<%s>", serviceData.getEntity().getName()), "list", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + //count鏂规硶 + params = new ArrayList<>(); + params.add(query.getName() + " " + StringUtil.firstCharToLower(query.getName())); + metodInfo = new ServiceMetodInfoVO("public", "long", "count", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + //get鏂规硶 + params = new ArrayList<>(); + params.add("String id"); + metodInfo = new ServiceMetodInfoVO("public", serviceData.getEntity().getName(), "get", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + //add鏂规硶 + params = new ArrayList<>(); + params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); + metodInfo = new ServiceMetodInfoVO("public", "void", "add", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + //update鏂规硶 + params = new ArrayList<>(); + params.add(serviceData.getEntity().getName() + " " + StringUtil.firstCharToLower(serviceData.getEntity().getName())); + metodInfo = new ServiceMetodInfoVO("public", "void", "update", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + //delete鏂规硶 + params = new ArrayList<>(); + params.add("List<String> idList"); + metodInfo = new ServiceMetodInfoVO("public", String.format("void", serviceData.getEntity().getName()), "delete", StringUtil.concat(params, ",")); + metodInfoVOList.add(metodInfo); + + /*******娣诲姞鏂规硶缁撴潫*******/ + + + return serviceData; + } + + } + + public ClassInfo getService() { + return service; + } + + public void setService(ClassInfo service) { + this.service = service; + } + + public ClassInfo getDao() { + return dao; + } + + public void setDao(ClassInfo dao) { + this.dao = dao; + } + + public List<ServiceMetodInfoVO> getMetodInfoList() { + return metodInfoList; + } + + public void setMetodInfoList(List<ServiceMetodInfoVO> metodInfoList) { + this.metodInfoList = metodInfoList; + } + + +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java new file mode 100644 index 0000000..cbb7d35 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/ServiceMetodInfoVO.java @@ -0,0 +1,77 @@ +package org.yeshi.utils.generater.vo; + +/** + * @author Administrator + * @title: ServiceMetodInfo + * @description: 鏈嶅姟鍑芥暟鐨勮緭鍑轰俊鎭� + * @date 2021/9/27 17:12 + */ +public class ServiceMetodInfoVO { + //娉ㄩ噴 + private String note; + //璁块棶鎺у埗 + private String visiteAccess; + //杩斿洖绫诲瀷 + private String returnType; + //鍑芥暟鍚嶇О + private String name; + //鍙傛暟 + private String params; + //鏂规硶鍐呭 + private String content; + + public ServiceMetodInfoVO(String visiteAccess, String returnType, String name, String params) { + this.visiteAccess = visiteAccess; + this.returnType = returnType; + this.name = name; + this.params = params; + } + + public String getVisiteAccess() { + return visiteAccess; + } + + public void setVisiteAccess(String visiteAccess) { + this.visiteAccess = visiteAccess; + } + + public String getReturnType() { + return returnType; + } + + public void setReturnType(String returnType) { + this.returnType = returnType; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getParams() { + return params; + } + + public void setParams(String params) { + this.params = params; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java new file mode 100644 index 0000000..41ba237 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/AdminControllerInfoVO.java @@ -0,0 +1,128 @@ +package org.yeshi.utils.generater.vo.admin; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.annotation.admin.form.Select; +import org.yeshi.utils.generater.annotation.admin.form.Text; +import org.yeshi.utils.generater.annotation.admin.form.TextArea; +import org.yeshi.utils.generater.entity.ClassInfo; +import org.yeshi.utils.generater.entity.KeyValue; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Administrator + * @title: FormAddInfo + * @description: 鏋勫缓鏂板鐨勫疄浣撶被 + * @date 2021/9/26 10:07 + */ +public class AdminControllerInfoVO { + + private String packageName; + private String mapping; + private ClassInfo entity; + private ClassInfo service; + private ClassInfo query; + + + public static class Builder { + private AdminGeneraterInfo generaterInfo; + //鍖呭悕 + private String packageName; + //鍚庡彴鏌ヨDTO + private ClassInfo query; + // + private ClassInfo service; + + + public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) { + this.generaterInfo = generaterInfo; + return this; + } + + public Builder setPackageName(String packageName) { + this.packageName = packageName; + return this; + } + + public Builder setQueryVO(ClassInfo query) { + this.query = query; + return this; + } + + public Builder setService(ClassInfo service) { + this.service = service; + return this; + } + + public AdminControllerInfoVO build() throws Exception { + if (generaterInfo == null) { + throw new Exception("generaterInfo涓嶈兘涓虹┖"); + } + if (StringUtil.isNullOrEmpty(packageName)) { + throw new Exception("鍖呭悕涓嶈兘涓虹┖"); + } + if (query == null) { + throw new Exception("鏌ヨ鏉′欢涓嶈兘涓虹┖"); + } + if (service == null) { + throw new Exception("鏈嶅姟涓嶈兘涓虹┖"); + } + + AdminControllerInfoVO vo = new AdminControllerInfoVO(); + vo.setMapping(generaterInfo.getControllerData().mapping()); + vo.setEntity(new ClassInfo(generaterInfo.getEntity().getSimpleName(), generaterInfo.getEntity().getName())); + vo.setPackageName(packageName); + vo.setQueryVO(query); + vo.setService(service); + return vo; + } + + + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getMapping() { + return mapping; + } + + public void setMapping(String mapping) { + this.mapping = mapping; + } + + public ClassInfo getEntity() { + return entity; + } + + public void setEntity(ClassInfo entity) { + this.entity = entity; + } + + public ClassInfo getService() { + return service; + } + + public void setService(ClassInfo service) { + this.service = service; + } + + public ClassInfo getQuery() { + return query; + } + + public void setQueryVO(ClassInfo query) { + this.query = query; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java new file mode 100644 index 0000000..70f16c3 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/FormAddInfoVO.java @@ -0,0 +1,160 @@ +package org.yeshi.utils.generater.vo.admin; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.annotation.admin.form.Select; +import org.yeshi.utils.generater.annotation.admin.form.Text; +import org.yeshi.utils.generater.annotation.admin.form.TextArea; +import org.yeshi.utils.generater.entity.KeyValue; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Administrator + * @title: FormAddInfo + * @description: 鏋勫缓鏂板鐨勫疄浣撶被 + * @date 2021/9/26 10:07 + */ +public class FormAddInfoVO { + private String title; + private List<FormRowData> rowsList; + private List<FormInputRegexVerifyVO> regexVerifyList; + private String addApi; + + //杩涘叆椤甸潰灏遍渶瑕佽姹傜殑鏁版嵁 + private List<FormHttpRequestInfoVO> preRequestList; + + public static class Builder { + + private AdminGeneraterInfo generaterInfo; + + public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) { + this.generaterInfo = generaterInfo; + return this; + } + + public FormAddInfoVO build() { + FormAddInfoVO vo = new FormAddInfoVO(); + vo.setAddApi(generaterInfo.getControllerData().mapping() + "/add"); + vo.setRowsList(generaterInfo.getAddFormRows()); + vo.setTitle("鏂板" + generaterInfo.getControllerData().title()); + //閬嶅巻闇�瑕佹鍒欒〃杈惧紡鐨凾ext鎴栬�匱extArea + List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>(); + for (FormRowData row : vo.getRowsList()) { + if (!row.getType().equalsIgnoreCase(Text.class.getSimpleName()) && !row.getType().equalsIgnoreCase(TextArea.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + if ((row.getParams().get("verifyType")) != FormVerifyType.regex) + continue; + FormInputRegexVerifyVO verifyVO = new FormInputRegexVerifyVO(); + verifyVO.setExpression(row.getParams().get("verifyValue") + ""); + verifyVO.setKey("_" + row.getKey()); + verifyVO.setMsg(row.getParams().get("verifyNotifyMsg") + ""); + verifyVOList.add(verifyVO); + } + vo.setRegexVerifyList(verifyVOList); + //鎻愬彇select涓殑缃戠粶璇锋眰 + List<FormHttpRequestInfoVO> formHttpRequestInfoVOList = new ArrayList<>(); + for (FormRowData row : vo.getRowsList()) { + if (!row.getType().equalsIgnoreCase(Select.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + + String apiPath = row.getParams().get("apiPath") + ""; + if (StringUtil.isNullOrEmpty(apiPath)) { + continue; + } + 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()); + } + } + requestInfoVO.setParams(apiParams); + requestInfoVO.setUrl(apiPath); + //TODO 鏆傛椂鍥哄畾涓簆ost锛屽悗闈㈠啀鏀寔鍏朵粬鐨勫姛鑳� + requestInfoVO.setType("POST"); + requestInfoVO.setFillTarget("select[name=" + row.getKey() + "]"); + formHttpRequestInfoVOList.add(requestInfoVO); + } + + + for (FormRowData row : vo.getRowsList()) { + //layui鏇存敼楠岃瘉 + String layVerify = ""; + if (row.getParams() != null && row.getParams().get("require") != null && (Boolean) row.getParams().get("require")) { + layVerify += "required|"; + } + if (row.getParams() != null && row.getParams().get("verifyType") != null) { + FormVerifyType verifyType = (FormVerifyType) row.getParams().get("verifyType"); + if (verifyType == FormVerifyType.regex) { + //鑷畾涔夌殑楠岃瘉鍚嶇О涓轰笅鍒掔嚎+name + layVerify += "_" + row.getKey(); + } else if (verifyType != FormVerifyType.none) { + layVerify += verifyType.name(); + } + } + if (layVerify.endsWith("|")) + layVerify = layVerify.substring(0, layVerify.length() - 1); + //閲嶆柊璧嬪�硷紝琛ㄥ崟涓洿鎺ュ彇鍊� + row.getParams().put("verifyValue", layVerify); + } + + vo.setPreRequestList(formHttpRequestInfoVOList); + return vo; + } + + + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List<FormRowData> getRowsList() { + return rowsList; + } + + public void setRowsList(List<FormRowData> rowsList) { + this.rowsList = rowsList; + } + + public List<FormInputRegexVerifyVO> getRegexVerifyList() { + return regexVerifyList; + } + + public void setRegexVerifyList(List<FormInputRegexVerifyVO> regexVerifyList) { + this.regexVerifyList = regexVerifyList; + } + + public String getAddApi() { + return addApi; + } + + public void setAddApi(String addApi) { + this.addApi = addApi; + } + + public List<FormHttpRequestInfoVO> getPreRequestList() { + return preRequestList; + } + + public void setPreRequestList(List<FormHttpRequestInfoVO> preRequestList) { + this.preRequestList = preRequestList; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java new file mode 100644 index 0000000..216a4d6 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/FormHttpRequestInfoVO.java @@ -0,0 +1,55 @@ +package org.yeshi.utils.generater.vo.admin; + + +import java.util.Map; + +/** + * @author Administrator + * @title: FormHttpRequestInfo + * @description: 琛ㄥ崟涓殑鏁版嵁璇锋眰 + * @date 2021/9/26 10:25 + */ +public class FormHttpRequestInfoVO { + + //post/get + private String type; + //璇锋眰閾炬帴 + private String url; + //璇锋眰鍙傛暟 + private Map<String, String> params; + //鏁版嵁闇�瑕佸~鍏呯殑jquery琛ㄨ揪寮� + private String fillTarget; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Map<String, String> getParams() { + return params; + } + + public void setParams(Map<String, String> params) { + this.params = params; + } + + public String getFillTarget() { + return fillTarget; + } + + public void setFillTarget(String fillTarget) { + this.fillTarget = fillTarget; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java new file mode 100644 index 0000000..5162e26 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/FormInputRegexVerifyVO.java @@ -0,0 +1,39 @@ +package org.yeshi.utils.generater.vo.admin; + +/** + * @author Administrator + * @title: FormInputVerifyVO + * @description: 琛ㄥ崟楠岃瘉鐨勬鍒欏疄浣� + * @date 2021/9/26 10:12 + */ +public class FormInputRegexVerifyVO { + + private String key; + private String expression; + private String msg; + + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java new file mode 100644 index 0000000..ece31e3 --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/FormUpdateInfoVO.java @@ -0,0 +1,170 @@ +package org.yeshi.utils.generater.vo.admin; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.annotation.admin.form.Select; +import org.yeshi.utils.generater.annotation.admin.form.Text; +import org.yeshi.utils.generater.annotation.admin.form.TextArea; +import org.yeshi.utils.generater.entity.KeyValue; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Administrator + * @title: FormAddInfo + * @description: 鏋勫缓淇敼鐨勮緭鍑虹被 + * @date 2021/9/26 10:07 + */ +public class FormUpdateInfoVO { + private String title; + private List<FormRowData> rowsList; + private List<FormInputRegexVerifyVO> regexVerifyList; + private String updateApi; + private String detailApi; + + //杩涘叆椤甸潰灏遍渶瑕佽姹傜殑鏁版嵁 + private List<FormHttpRequestInfoVO> preRequestList; + + public static class Builder { + + private AdminGeneraterInfo generaterInfo; + + public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) { + this.generaterInfo = generaterInfo; + return this; + } + + public FormUpdateInfoVO build() { + FormUpdateInfoVO vo = new FormUpdateInfoVO(); + vo.setUpdateApi(generaterInfo.getControllerData().mapping() + "/update"); + vo.setDetailApi(generaterInfo.getControllerData().mapping() + "/get"); + vo.setRowsList(generaterInfo.getUpdateFormRows()); + vo.setTitle("淇敼" + generaterInfo.getControllerData().title()); + //閬嶅巻闇�瑕佹鍒欒〃杈惧紡鐨凾ext鎴栬�匱extArea + List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>(); + for (FormRowData row : vo.getRowsList()) { + if (!row.getType().equalsIgnoreCase(Text.class.getSimpleName()) && !row.getType().equalsIgnoreCase(TextArea.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + if ((row.getParams().get("verifyType")) != FormVerifyType.regex) + continue; + FormInputRegexVerifyVO verifyVO = new FormInputRegexVerifyVO(); + verifyVO.setExpression(row.getParams().get("verifyValue") + ""); + verifyVO.setKey("_" + row.getKey()); + verifyVO.setMsg(row.getParams().get("verifyNotifyMsg") + ""); + verifyVOList.add(verifyVO); + } + vo.setRegexVerifyList(verifyVOList); + //鎻愬彇select涓殑缃戠粶璇锋眰 + List<FormHttpRequestInfoVO> formHttpRequestInfoVOList = new ArrayList<>(); + for (FormRowData row : vo.getRowsList()) { + if (!row.getType().equalsIgnoreCase(Select.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + + String apiPath = row.getParams().get("apiPath") + ""; + if (StringUtil.isNullOrEmpty(apiPath)) { + continue; + } + 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()); + } + } + requestInfoVO.setParams(apiParams); + requestInfoVO.setUrl(apiPath); + //TODO 鏆傛椂鍥哄畾涓簆ost锛屽悗闈㈠啀鏀寔鍏朵粬鐨勫姛鑳� + requestInfoVO.setType("POST"); + requestInfoVO.setFillTarget("select[name=" + row.getKey() + "]"); + formHttpRequestInfoVOList.add(requestInfoVO); + } + + + for (FormRowData row : vo.getRowsList()) { + //layui鏇存敼楠岃瘉 + String layVerify = ""; + if (row.getParams() != null && row.getParams().get("require") != null && (Boolean) row.getParams().get("require")) { + layVerify += "required|"; + } + if (row.getParams() != null && row.getParams().get("verifyType") != null) { + FormVerifyType verifyType = (FormVerifyType) row.getParams().get("verifyType"); + if (verifyType == FormVerifyType.regex) { + //鑷畾涔夌殑楠岃瘉鍚嶇О涓轰笅鍒掔嚎+name + layVerify += "_" + row.getKey(); + } else if (verifyType != FormVerifyType.none) { + layVerify += verifyType.name(); + } + } + if (layVerify.endsWith("|")) + layVerify = layVerify.substring(0, layVerify.length() - 1); + //閲嶆柊璧嬪�硷紝琛ㄥ崟涓洿鎺ュ彇鍊� + row.getParams().put("verifyValue", layVerify); + } + + vo.setPreRequestList(formHttpRequestInfoVOList); + return vo; + } + + + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List<FormRowData> getRowsList() { + return rowsList; + } + + public void setRowsList(List<FormRowData> rowsList) { + this.rowsList = rowsList; + } + + public List<FormInputRegexVerifyVO> getRegexVerifyList() { + return regexVerifyList; + } + + public void setRegexVerifyList(List<FormInputRegexVerifyVO> regexVerifyList) { + this.regexVerifyList = regexVerifyList; + } + + public String getUpdateApi() { + return updateApi; + } + + public void setUpdateApi(String updateApi) { + this.updateApi = updateApi; + } + + public String getDetailApi() { + return detailApi; + } + + public void setDetailApi(String detailApi) { + this.detailApi = detailApi; + } + + public List<FormHttpRequestInfoVO> getPreRequestList() { + return preRequestList; + } + + public void setPreRequestList(List<FormHttpRequestInfoVO> preRequestList) { + this.preRequestList = preRequestList; + } +} diff --git a/src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java b/src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java new file mode 100644 index 0000000..2cfdeeb --- /dev/null +++ b/src/main/java/org/yeshi/utils/generater/vo/admin/ListInfoVO.java @@ -0,0 +1,193 @@ +package org.yeshi.utils.generater.vo.admin; + +import org.yeshi.utils.StringUtil; +import org.yeshi.utils.generater.annotation.admin.form.Select; +import org.yeshi.utils.generater.annotation.admin.form.Text; +import org.yeshi.utils.generater.annotation.admin.form.TextArea; +import org.yeshi.utils.generater.entity.KeyValue; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Administrator + * @title: FormAddInfo + * @description: 鏋勫缓淇敼鐨勮緭鍑虹被 + * @date 2021/9/26 10:07 + */ +public class ListInfoVO { + private String title; + private List<FormRowData> searchFormRows; + //鏄剧ず鐨勫瓧娈� + private List<Map<String, Object>> showFileds; + //杩涘叆椤甸潰灏遍渶瑕佽姹傜殑鏁版嵁 + private List<FormHttpRequestInfoVO> preRequestList; + private List<FormInputRegexVerifyVO> regexVerifyList; + //鍒楄〃鎺ュ彛 + private String listApi; + //娣诲姞椤佃矾寰� + private String addPagePath; + //鏇存柊椤佃矾寰� + private String updatePagePath; + + + public static class Builder { + + private AdminGeneraterInfo generaterInfo; + + public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) { + this.generaterInfo = generaterInfo; + return this; + } + + public ListInfoVO build() { + ListInfoVO vo = new ListInfoVO(); + vo.setListApi(generaterInfo.getControllerData().mapping() + "/list"); + vo.setAddPagePath("add.html"); + vo.setUpdatePagePath("update.html"); + vo.setSearchFormRows(generaterInfo.getSearchFormRows()); + vo.setShowFileds(generaterInfo.getShowDataList()); + vo.setTitle("淇敼" + generaterInfo.getControllerData().title()); + //閬嶅巻闇�瑕佹鍒欒〃杈惧紡鐨凾ext鎴栬�匱extArea + List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>(); + for (FormRowData row : vo.getSearchFormRows()) { + if (!row.getType().equalsIgnoreCase(Text.class.getSimpleName()) && !row.getType().equalsIgnoreCase(TextArea.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + if ((row.getParams().get("verifyType")) != FormVerifyType.regex) + continue; + FormInputRegexVerifyVO verifyVO = new FormInputRegexVerifyVO(); + verifyVO.setExpression(row.getParams().get("verifyValue") + ""); + verifyVO.setKey("_" + row.getKey()); + verifyVO.setMsg(row.getParams().get("verifyNotifyMsg") + ""); + verifyVOList.add(verifyVO); + } + vo.setRegexVerifyList(verifyVOList); + //鎻愬彇select涓殑缃戠粶璇锋眰 + List<FormHttpRequestInfoVO> formHttpRequestInfoVOList = new ArrayList<>(); + for (FormRowData row : vo.getSearchFormRows()) { + if (!row.getType().equalsIgnoreCase(Select.class.getSimpleName())) { + continue; + } + if (row.getParams() == null) + continue; + + String apiPath = row.getParams().get("apiPath") + ""; + if (StringUtil.isNullOrEmpty(apiPath)) { + continue; + } + 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()); + } + } + requestInfoVO.setParams(apiParams); + requestInfoVO.setUrl(apiPath); + //TODO 鏆傛椂鍥哄畾涓簆ost锛屽悗闈㈠啀鏀寔鍏朵粬鐨勫姛鑳� + requestInfoVO.setType("POST"); + requestInfoVO.setFillTarget("select[name=" + row.getKey() + "]"); + formHttpRequestInfoVOList.add(requestInfoVO); + } + + + for (FormRowData row : vo.getSearchFormRows()) { + //layui鏇存敼楠岃瘉 + String layVerify = ""; + if (row.getParams() != null && row.getParams().get("require") != null && (Boolean) row.getParams().get("require")) { + layVerify += "required|"; + } + if (row.getParams() != null && row.getParams().get("verifyType") != null) { + FormVerifyType verifyType = (FormVerifyType) row.getParams().get("verifyType"); + if (verifyType == FormVerifyType.regex) { + //鑷畾涔夌殑楠岃瘉鍚嶇О涓轰笅鍒掔嚎+name + layVerify += "_" + row.getKey(); + } else if (verifyType != FormVerifyType.none) { + layVerify += verifyType.name(); + } + } + if (layVerify.endsWith("|")) + layVerify = layVerify.substring(0, layVerify.length() - 1); + //閲嶆柊璧嬪�硷紝琛ㄥ崟涓洿鎺ュ彇鍊� + row.getParams().put("verifyValue", layVerify); + } + + vo.setPreRequestList(formHttpRequestInfoVOList); + return vo; + } + + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List<FormRowData> getSearchFormRows() { + return searchFormRows; + } + + public void setSearchFormRows(List<FormRowData> searchFormRows) { + this.searchFormRows = searchFormRows; + } + + public List<FormHttpRequestInfoVO> getPreRequestList() { + return preRequestList; + } + + public void setPreRequestList(List<FormHttpRequestInfoVO> preRequestList) { + this.preRequestList = preRequestList; + } + + public List<FormInputRegexVerifyVO> getRegexVerifyList() { + return regexVerifyList; + } + + public void setRegexVerifyList(List<FormInputRegexVerifyVO> regexVerifyList) { + this.regexVerifyList = regexVerifyList; + } + + public String getListApi() { + return listApi; + } + + public void setListApi(String listApi) { + this.listApi = listApi; + } + + public String getAddPagePath() { + return addPagePath; + } + + public void setAddPagePath(String addPagePath) { + this.addPagePath = addPagePath; + } + + public String getUpdatePagePath() { + return updatePagePath; + } + + public void setUpdatePagePath(String updatePagePath) { + this.updatePagePath = updatePagePath; + } + + public List<Map<String, Object>> getShowFileds() { + return showFileds; + } + + public void setShowFileds(List<Map<String, Object>> showFileds) { + this.showFileds = showFileds; + } +} diff --git a/src/main/resources/generater/admin/add.ftl b/src/main/resources/generater/admin/add.ftl index 693c9e4..2de34c9 100644 --- a/src/main/resources/generater/admin/add.ftl +++ b/src/main/resources/generater/admin/add.ftl @@ -3,7 +3,7 @@ <head> <meta charset="UTF-8"> - <title>鏂板${controllerData.title}</title> + <title>${title}</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" @@ -26,14 +26,14 @@ <div class="layui-row"> <form class="layui-form" lay-filter="add"> - <#list addFormRows as value> + <#list rowsList as value> <div class="layui-form-item"> <label for="L_appCode" class="layui-form-label"> <#if value.params.require??&&value.params.require> <span class="x-red">*</span> </#if> ${value.params.title}</label> - + <div class="layui-input-block"> <#switch value.type> <#case "CheckBox"><#include "/admin/form/checkBox.ftl" ><#break> <#case "Img"> <#include "/admin/form/img.ftl"><#break> @@ -45,6 +45,7 @@ <#case "TextArea"> <#include "/admin/form/textArea.ftl"><#break> <#default> </#switch> + </div> <#if (value.desc!"") != ""> <div class="layui-form-mid layui-word-aux">${value.desc}</div> @@ -60,39 +61,101 @@ </div> </div> <script> + //鍒濆鍖栦笂浼犳帶浠� + var uploadTool = { + callback: null, + chooseImage: {}, + uploadArray: new Array(), + init: function (upload) { + this.uploadArray = new Array(); + <#list rowsList as value> + <#if value.type=='Img'&&value.params.uploadApi??> + this.uploadArray.push(upload.render({ + elem: '#upload_${value.key}', //缁戝畾鍏冪礌 + url: '${value.params.uploadApi}', //涓婁紶鎺ュ彛 + <#if value.params.uploadApiParams??&&(value.params.uploadApiParams?size>0)> + data: { + <#list value.params.uploadApiParams as item> + "${item.key}": "${item.value}", + </#list> + }, + </#if> + auto: false, + accept: 'images', + acceptMime: 'image/*', + field: "file_${value.key}", + choose: function (obj) { + //灏嗘瘡娆¢�夋嫨鐨勬枃浠惰拷鍔犲埌鏂囦欢闃熷垪 + var files = obj.pushFile(); + //棰勮鏈湴鏂囦欢锛屽鏋滄槸澶氭枃浠讹紝鍒欎細閬嶅巻銆�(涓嶆敮鎸乮e8/9) + obj.preview(function (index, file, result) { + console.log(index); //寰楀埌鏂囦欢绱㈠紩 + console.log(file); //寰楀埌鏂囦欢瀵硅薄 + console.log(result); //寰楀埌鏂囦欢base64缂栫爜锛屾瘮濡傚浘鐗� + $("#img_${value.key}").attr("src", result); + //璁板綍閫変腑鐨勬枃浠� + uploadTool.chooseImage["${value.key}"] = "1"; + }); + }, + before: function (obj) { + layer.load(); + }, + done: function (res, index, upload) { + layer.closeAll('loading'); //鍏抽棴loading + //涓婁紶瀹屾瘯鍚庡垹闄� + if (res.code == 0) { + //鑾峰彇閾炬帴 + $("input[name='${value.key}']").val(res.data.url); + delete chooseImage["${value.key}"]; + if (Object.keys(chooseImage).length == 0) { + //鍏ㄩ儴涓婁紶鎴愬姛 + callback(); + } + } else { + layer.msg(res.msg); + } + }, + error: function (index, upload) { + layer.msg("${value.params.title}涓婁紶鍑洪敊"); + layer.closeAll('loading'); //鍏抽棴loading + } + })); + </#if> + </#list> - layui.use(['form', 'layer', 'jquery'], function () { + }, + upload: function (result) { + if (this.uploadArray.length > 0) { + this.callback = result; + //鍚屾椂涓婁紶 + for (var i = 0; i < this.uploadArray.length; i++) { + this.uploadArray[i].upload(); + } + } else { + result(); + } + } + }; + + +</script> + +<script> + layui.use(['form', 'layer', 'jquery', 'upload'], function () { $ = layui.jquery; var form = layui.form, - layer = layui.layer; + layer = layui.layer, + upload = layui.upload; + var verify = {}; + <#list regexVerifyList as regex> + verify["${regex.key}"] = [/${regex.expression}/, '${regex.msg}']; + </#list> //鑷畾涔夐獙璇佽鍒� - form.verify({ - username: function (value) { - if (value.length < 3) { - return '鍚嶇О鑷冲皯寰�3涓瓧绗�'; - } - }, - code: function (value) { - if (value) { - if (!(/^([A-Za-z0-9]|\-|_)+$/).test(value)) { - return '鏍囪瘑鍙兘鍖呭惈 鏁板瓧銆佽嫳鏂囧瓧绗︺�乢 銆�-'; - } - } - }, - packageName: [/^([A-Za-z0-9]|\-|_|\.)+$/, '鍖呭悕鍙兘鍖呭惈 鏁板瓧銆佽嫳鏂囧瓧绗︺�乢 銆�-銆�.'], - desc: function (value) { - if (value != null && value.length > 128) { - return '绠�浠嬫渶澶т负128涓瓧绗�'; - } - }, - remarks: function (value) { - if (value != null && value.length > 128) { - return '澶囨敞鏈�澶т负128涓瓧绗�'; - } - }, + form.verify(verify); - }); + //娓叉煋涓婁紶鎺т欢 + uploadTool.init(upload); //鐩戝惉鎻愪氦 @@ -112,69 +175,58 @@ data.field[onkeys[0]][onkeys[1]] = value; } } - //鍙戝紓姝ワ紝鎶婃暟鎹彁浜ょ粰php - ksapp.postJSON('/admin/api/pushplatform-app/add', data.field, function (res) { - if (res.code == 0) { - layer.alert("澧炲姞鎴愬姛", { - icon: 6 - }, - function () { - //鍏抽棴褰撳墠frame - xadmin.close(); - // 鍙互瀵圭埗绐楀彛杩涜鍒锋柊 - // xadmin.father_reload(); - }); - } else { - layer.msg(res.msg); - } + uploadTool.upload(function(){ + //鍙戝紓姝ワ紝鎶婃暟鎹彁浜ょ粰php + ksapp.postJSON('${addApi}', data.field, function (res) { + if (res.code == 0) { + layer.alert("澧炲姞鎴愬姛", { + icon: 6 + }, + function () { + //鍏抽棴褰撳墠frame + xadmin.close(); + // 鍙互瀵圭埗绐楀彛杩涜鍒锋柊 + // xadmin.father_reload(); + }); + } else { + layer.msg(res.msg); + } - }, function (res) { + }, function (res) { + }); }); return false; }); + //璇锋眰select鐨勬暟鎹瓵PI + <#if preRequestList??&&(preRequestList?size>0)> + <#list preRequestList as request> + <#assign apiKeys=request.params?keys/> + var params = {}; + <#list apiKeys as key> + params["${key}"]=${request.params["${key}"]} + </#list> - }); + ksapp.postJSON('${request.url}', params, function (res) { + if (res.code == 0) { + //濉厖鏁版嵁 + $("${request.fillTarget}").empty(); + for (var i = 0; i < res.data.length; i++) { + var html = "<option value='" + res.data[i].key + "'>"; + html += res.data[i].value + "</option>"; + $("${request.fillTarget}").append(html); + } + //閲嶆柊娓叉煋琛ㄥ崟 + form.render(); + } else { + layer.msg(res.msg); + } - - - var app = new Vue({ - el: '.layui-form', - data: { - appList: [], - platformList: [ - {name: "灏忕背", platform: "xm"}, - {name: "鍗庝负", platform: "hw"}, - {name: "OPPO", platform: "oppo"}, - {name: "VIVO", platform: "vivo"}, - {name: "榄呮棌", platform: "mz"} - ] - }, - created: function () { - this.getAppList(); - }, - watch: { - appList: function () { - app.render(); - } - - }, - methods: { - getAppList: function () { - ksapp.post("/admin/api/app/list", {page: 1, limit: 100}, function (e) { - if (e.code == 0) { - app.appList = e.data.list; - } else - layer.msg(e.msg); - }, function (e) { - }); - }, - render: function () { - console.log("render") - - } - } - }); - + }, function (res) { + }); + </#list> + </#if> + }) + ; </script> </body> diff --git a/src/main/resources/generater/admin/adminController.template b/src/main/resources/generater/admin/adminController.template index cc5ba65..f7d8311 100644 --- a/src/main/resources/generater/admin/adminController.template +++ b/src/main/resources/generater/admin/adminController.template @@ -1,92 +1,102 @@ package ${packageName}; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Repository; +import com.google.gson.*; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.yeshi.utils.JsonUtil; +import org.yeshi.utils.TimeUtil; -<#list importClasses as value> -import ${value}; -</#list> +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Type; +import java.util.Date; +import java.util.List; +import ${entity.clazz}; +import ${service.clazz}; +import ${query.clazz}; +@Controller +@RequestMapping("${mapping}") +public class AdminAppController { -@Repository -public class ${daoName} extends ${baseDaoClassName}<${entityClassName}>{ + <#assign serviceObjName=${service.name?uncap_first}"> + @Resource + private ${service.name} ${serviceObjName}; - public void updateSelective(${entityClassName} bean) { - Query query = new Query(); - Update update=new Update(); - query.addCriteria(Criteria.where("${identityColumn.columnName}").is(bean.${identityColumn.columnMehtod})); - <#if columnDataList??> - <#list columnDataList as value> - if(bean.${value.columnMehtod} != null) { - update.set("${value.columnName}", bean.${value.columnMehtod}); - } - </#list> - </#if> - update.set("updateTime", new Date()); - update(query, update); - } + @ResponseBody + @RequestMapping("list") + public String list(${query.name} query, int page, int limit) { + List<${entityName}> list = ${serviceObjName}.list(query,page,limit); + long count = ${serviceObjName}.count(query); + JSONObject data = new JSONObject(); + Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() { + @Override + public JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) { + return date == null ? new JsonPrimitive("") : new JsonPrimitive(TimeUtil.getGernalTime(date.getTime(), "yyyy.MM.dd HH:mm")); + } + }).create(); - public List<${entityClassName}> list(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - if(daoQuery.sortList!=null&&daoQuery.sortList.size()>0){ - query.with(new Sort(daoQuery.sortList)); - } - query.skip(daoQuery.start); - query.limit(daoQuery.count); - return findList(query); - } - - public long count(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - return count(query); - } - - private Query getQuery(DaoQuery daoQuery){ - List<Criteria> andList=new ArrayList<>(); - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - if(daoQuery.min${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").gte(daoQuery.min${value.columnName?cap_first})); - } - if(daoQuery.max${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").lt(daoQuery.max${value.columnName?cap_first})); - } - <#else> - if(daoQuery.${value.columnName}!=null){ - <#if (value.queryType!"") == "equal"> - andList.add(Criteria.where("${value.columnName}").is(daoQuery.${value.columnName})); - <#else> - andList.add(Criteria.where("${value.columnName}").regex(daoQuery.${value.columnName})); - </#if> - } - </#if> - </#list> - Query query=new Query(); - Criteria[] ands=new Criteria[andList.size()]; - andList.toArray(ands); - if(ands.length>0){ - query.addCriteria(new Criteria().andOperator(ands)); - } - return query; + data.put("list", gson.toJson(list)); + data.put("count", count); + return JsonUtil.loadTrueResult(data); } - public static class DaoQuery{ - <#if daoQueryColumnDataList??> - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - public ${value.type} min${value.columnName?cap_first}; - public ${value.type} max${value.columnName?cap_first}; - <#else> - public ${value.type} ${value.columnName}; - </#if> - </#list> - </#if> - public int start; - public int count; - public List<Sort.Order> sortList; - } + @ResponseBody + @RequestMapping("delete") + public String delete(String ids) { + JSONArray array = JSONArray.fromObject(ids); + List<String> idList=new ArrayList<>(); + for (int i = 0; i < array.size(); i++) { + idList.add(array.optString(i)); + } + ${serviceObjName}.delete(idList); + return JsonUtil.loadTrueResult(""); + } + + + + + + @ResponseBody + @RequestMapping("add") + public String add(${entity.name} bean, HttpSession session) { + try{ + ${serviceObjName}.add(bean); + return JsonUtil.loadTrueResult(""); + }catch(Exception e){ + return JsonUtil.loadFalseResult(e.getMessage); + } + } + + @ResponseBody + @RequestMapping("get") + public String add(String id, HttpSession session) { + try{ + ${serviceObjName}.get(id); + return JsonUtil.loadTrueResult(""); + }catch(Exception e){ + return JsonUtil.loadFalseResult(e.getMessage); + } + } + + + @ResponseBody + @RequestMapping("update") + public String update(${entity.name} bean, HttpSession session) { + if (app.getId() == null) { + return JsonUtil.loadFalseResult("ID涓嶈兘涓虹┖"); + } + try{ + ${serviceObjName}.updateSelective(bean); + }catch(Exception e){ + return JsonUtil.loadFalseResult(e.getMessage); + } + return JsonUtil.loadTrueResult(""); + } + + } diff --git a/src/main/resources/generater/admin/form/checkBox.ftl b/src/main/resources/generater/admin/form/checkBox.ftl index 6e2431d..12488e2 100644 --- a/src/main/resources/generater/admin/form/checkBox.ftl +++ b/src/main/resources/generater/admin/form/checkBox.ftl @@ -1,3 +1 @@ - <div class="layui-input-block"> - <input type="checkbox" name="${value.key}" title="鍐欎綔"> - </div> \ No newline at end of file + <input type="checkbox" name="${value.key}" title="${value.value}"> \ No newline at end of file diff --git a/src/main/resources/generater/admin/form/img.ftl b/src/main/resources/generater/admin/form/img.ftl index 17ddfea..4bedf20 100644 --- a/src/main/resources/generater/admin/form/img.ftl +++ b/src/main/resources/generater/admin/form/img.ftl @@ -1,6 +1,7 @@ - <div class="layui-input-inline"> - <select id="L_appCode" name="appCode" lay-verify="required" lay-search=""> - <option value="">鐩存帴閫夋嫨鎴栨悳绱㈠簲鐢�</option> - <option v-for="item in appList" :value="item.appCode">{{item.name}}</option> - </select> - </div> + <#if value.params.uploadApi??&&value.params.uploadApi!=""> + <img id="img_${value.key}" style="display: block;margin-bottom: 10px; <#if value.params.width gt 0 > width:${value.params.width}px;</#if> <#if value.params.height gt 0 > height:${value.params.height}px;</#if> " /> + <button type="button" class="layui-btn" id="upload_${value.key}" style="margin-bottom: 5px"> + <i class="layui-icon"></i>涓婁紶鍥剧墖 + </button> + </#if> + <input class="layui-input" type="text" name="${value.key}" placeholder="璇疯緭鍏ュ浘鐗囬摼鎺�"> diff --git a/src/main/resources/generater/admin/form/password.ftl b/src/main/resources/generater/admin/form/password.ftl index 32a20b6..e3ba56f 100644 --- a/src/main/resources/generater/admin/form/password.ftl +++ b/src/main/resources/generater/admin/form/password.ftl @@ -1,4 +1,2 @@ - <div class="layui-input-inline"> <input type="password" name="${value.key}" required lay-verify="required" placeholder="璇疯緭鍏ュ瘑鐮�" autocomplete="off" - class="layui-input"> - </div> \ No newline at end of file + class="layui-input"> \ No newline at end of file diff --git a/src/main/resources/generater/admin/form/radioGroup.ftl b/src/main/resources/generater/admin/form/radioGroup.ftl index 7f117a7..f37a654 100644 --- a/src/main/resources/generater/admin/form/radioGroup.ftl +++ b/src/main/resources/generater/admin/form/radioGroup.ftl @@ -1,5 +1,3 @@ - <div class="layui-input-block"> <#list value.params.values as item > - <input type="radio" name="${value.key}" value="${item.key}" title="${item.value}"> - </#list> - </div> \ No newline at end of file + <input type="radio" required name="${value.key}" value="${item.key}" title="${item.value}"> + </#list> \ No newline at end of file diff --git a/src/main/resources/generater/admin/form/select.ftl b/src/main/resources/generater/admin/form/select.ftl index 70cbb86..0f963ec 100644 --- a/src/main/resources/generater/admin/form/select.ftl +++ b/src/main/resources/generater/admin/form/select.ftl @@ -1,9 +1,7 @@ - <div class="layui-input-block"> <select name="${value.key}" lay-verify="required"> <#if value.params.values??&&(value.params.values?size>0)> <#list value.params.values as item> <option value="${item.key}">${item.value}</option> </#list> </#if> - </select> - </div> \ No newline at end of file + </select> \ No newline at end of file diff --git a/src/main/resources/generater/admin/form/switch.ftl b/src/main/resources/generater/admin/form/switch.ftl index 8c3bde9..94a7b76 100644 --- a/src/main/resources/generater/admin/form/switch.ftl +++ b/src/main/resources/generater/admin/form/switch.ftl @@ -1,3 +1 @@ - <div class="layui-input-block"> - <input type="checkbox" name="${value.key}" lay-skin="switch"> - </div> \ No newline at end of file + <input type="checkbox" name="${value.key}" lay-skin="switch"> \ No newline at end of file diff --git a/src/main/resources/generater/admin/form/text.ftl b/src/main/resources/generater/admin/form/text.ftl index 39a4952..e1dba14 100644 --- a/src/main/resources/generater/admin/form/text.ftl +++ b/src/main/resources/generater/admin/form/text.ftl @@ -1,4 +1,2 @@ - <div class="layui-input-block"> - <input type="text" name="${value.key}" required lay-verify="required" placeholder="${value.params.placeHolder}" autocomplete="off" + <input type="text" name="${value.key}" <#if value.params.verifyValue??> lay-verify="${value.params.verifyValue}" </#if> placeholder="${value.params.placeHolder}" autocomplete="off" class="layui-input"> - </div> diff --git a/src/main/resources/generater/admin/form/textArea.ftl b/src/main/resources/generater/admin/form/textArea.ftl index 762d552..73f0602 100644 --- a/src/main/resources/generater/admin/form/textArea.ftl +++ b/src/main/resources/generater/admin/form/textArea.ftl @@ -1,3 +1 @@ - <div class="layui-input-block"> - <textarea name="${value.key}" placeholder="${value.params.placeHolder}" class="layui-textarea"></textarea> - </div> \ No newline at end of file + <textarea name="${value.key}" placeholder="${value.params.placeHolder}" class="layui-textarea"></textarea> \ No newline at end of file diff --git a/src/main/resources/generater/admin/list.flt b/src/main/resources/generater/admin/list.flt deleted file mode 100644 index cc5ba65..0000000 --- a/src/main/resources/generater/admin/list.flt +++ /dev/null @@ -1,92 +0,0 @@ -package ${packageName}; - -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Repository; - -<#list importClasses as value> -import ${value}; -</#list> - - -@Repository -public class ${daoName} extends ${baseDaoClassName}<${entityClassName}>{ - - public void updateSelective(${entityClassName} bean) { - Query query = new Query(); - Update update=new Update(); - query.addCriteria(Criteria.where("${identityColumn.columnName}").is(bean.${identityColumn.columnMehtod})); - <#if columnDataList??> - <#list columnDataList as value> - if(bean.${value.columnMehtod} != null) { - update.set("${value.columnName}", bean.${value.columnMehtod}); - } - </#list> - </#if> - update.set("updateTime", new Date()); - update(query, update); - } - - - public List<${entityClassName}> list(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - if(daoQuery.sortList!=null&&daoQuery.sortList.size()>0){ - query.with(new Sort(daoQuery.sortList)); - } - query.skip(daoQuery.start); - query.limit(daoQuery.count); - return findList(query); - } - - public long count(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - return count(query); - } - - private Query getQuery(DaoQuery daoQuery){ - List<Criteria> andList=new ArrayList<>(); - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - if(daoQuery.min${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").gte(daoQuery.min${value.columnName?cap_first})); - } - if(daoQuery.max${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").lt(daoQuery.max${value.columnName?cap_first})); - } - <#else> - if(daoQuery.${value.columnName}!=null){ - <#if (value.queryType!"") == "equal"> - andList.add(Criteria.where("${value.columnName}").is(daoQuery.${value.columnName})); - <#else> - andList.add(Criteria.where("${value.columnName}").regex(daoQuery.${value.columnName})); - </#if> - } - </#if> - </#list> - Query query=new Query(); - Criteria[] ands=new Criteria[andList.size()]; - andList.toArray(ands); - if(ands.length>0){ - query.addCriteria(new Criteria().andOperator(ands)); - } - return query; - } - - public static class DaoQuery{ - <#if daoQueryColumnDataList??> - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - public ${value.type} min${value.columnName?cap_first}; - public ${value.type} max${value.columnName?cap_first}; - <#else> - public ${value.type} ${value.columnName}; - </#if> - </#list> - </#if> - public int start; - public int count; - public List<Sort.Order> sortList; - } -} diff --git a/src/main/resources/generater/admin/list.ftl b/src/main/resources/generater/admin/list.ftl new file mode 100644 index 0000000..1d4e22d --- /dev/null +++ b/src/main/resources/generater/admin/list.ftl @@ -0,0 +1,330 @@ +<!DOCTYPE html> +<html class="x-admin-sm"> + +<head> + <meta charset="UTF-8"> + <title>${title}鍒楄〃</title> + <meta name="renderer" content="webkit"> + <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> + <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> +</head> + +<body> +<div class="x-nav"> + <span class="layui-breadcrumb"> + <a href="">###</a> + <a> + <cite>###</cite></a> + </span> + <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" + onclick="location.reload()" title="鍒锋柊"> + <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i> + </a> +</div> +<div class="layui-fluid" id="app"> + <div class="layui-row layui-col-space15"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body"> + <form class="layui-form layui-col-space5"> + <#list rowsList as value> + <div class="layui-inline layui-show-xs-block"> + <#switch value.type> + <#case "CheckBox"><#include "/admin/form/checkBox.ftl" ><#break> + <#case "Img"> <#include "/admin/form/img.ftl"><#break> + <#case "Password"> <#include "/admin/form/password.ftl"><#break> + <#case "RadioGroup"> <#include "/admin/form/radioGroup.ftl"><#break> + <#case "Select"> <#include "/admin/form/select.ftl"><#break> + <#case "Switch"> <#include "/admin/form/switch.ftl"><#break> + <#case "Text"> <#include "/admin/form/text.ftl"><#break> + <#case "TextArea"> <#include "/admin/form/textArea.ftl"><#break> + <#default> + </#switch> + </div> + </#list> + <div class="layui-inline layui-show-xs-block"> + <button id="search" class="layui-btn" lay-submit="" lay-filter="sreach"> + <i class="layui-icon"></i></button> + </div> + </form> + </div> + <div class="layui-card-body "> + <table class="layui-table" id="table_list" lay-filter="app"> + </table> + </div> + </div> + </div> + </div> +</div> +</body> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn" onclick="xadmin.open('娣诲姞${title}','${addPagePath}',500,580)"><i + class="layui-icon">顦�</i>娣诲姞 + </button> + + <button class="layui-btn layui-btn-danger" lay-event="delete"> + <i class="layui-icon"></i> + 鍒犻櫎 + </button> + </div> +</script> + +<script type="text/html" id="deleteContainer"> + <div class="layui-btn-container"> + <!-- <a title='鎭㈠' onclick='member_resume(this,{{d.LAY_INDEX }}, {{d.id}})' href='javascript:;'> --> + <!--<i class="layui-icon"></i>--> + <!--</a>--> + + <a title="鍒犻櫎" onclick="member_del(this,{{d.LAY_INDEX }},'{{d.id}}')" href="javascript:;"> + <i class="layui-icon"></i> + </a> + </div> +</script> + +<script type="text/html" id="statusContainer"> + <div class="layui-btn-container"> + {{# if(d.status==0){ }} + <span class="layui-btn layui-btn-mini"> + 姝e父 + </span> + {{# }else{ }} + <span class="layui-btn layui-btn-danger layui-btn-mini"> + 宸插垹闄� + </span> + {{# } }} + </div> +</script> + +<script type="text/html" id="switchTpl"> + <!-- 杩欓噷鐨刢hecked鐨勭姸鎬佸彧鏄紨绀� --> + <input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="濂硘鐢�" lay-filter="sexDemo" {{ d.id== + 10003 ? 'checked': ''}} > +</script> + +<script> + + function member_del(obj, index, id) { + layer.confirm('纭瑕佸垹闄ゅ悧锛�', function (index) { + //鍙戝紓姝ュ垹闄ゆ暟鎹� + app.delete(obj, index, id); + }); + } + +</script> + +<script> + var tableIns = null; + $(function () { + + + //娓叉煋琛ㄦ牸 + function rederTable() { + tableIns = table.render({ + elem: '#table_list', + url: url, + toolbar: "#toolbar", + totalRow: true, + cols: [{type: 'checkbox', title: "ID"}, + {field: 'id', width: 120, sort: true, title: "ID"}, + {fixed: 'right', width: 80, title: "鎿嶄綔", toolbar: '#deleteContainer'}], + page: true, + parseData: + function (res) { //res 鍗充负鍘熷杩斿洖鐨勬暟鎹� + if (res.code != 0) + return; + if (res.data.list == null) + return; + console.log(res.data.list) + return { + "code": res.code, //瑙f瀽鎺ュ彛鐘舵�� + "msg": res.msg, //瑙f瀽鎻愮ず鏂囨湰 + "count": res.data.count, //瑙f瀽鏁版嵁闀垮害 + "data": res.data.list //瑙f瀽鏁版嵁鍒楄〃 + }; + } + }); + } + + + var app = new Vue({ + el: "#app", + data: { + key: '', + start: '', + end: '', + appList: [] + }, + watch: {}, + created: function () { + + }, + methods: { + init: function () { + //鍒濆鍖� + layui.use(['laydate', 'form', 'table'], function () { + var laydate = layui.laydate, + form = layui.form, + table = layui.table; + //娓叉煋鏃ユ湡杈撳叆妗� + <#list searchForm as row > + <#if row.type??&&row.type=="Text"&&(row.params.type=="date")> + laydate.render({ + elem: "intput[name=${row.key}]" //鎸囧畾鍏冪礌 + }); + </#if> + </#list> + //鎼滅储鏉′欢 + form.on('submit(search)', function (data) { + app.search(data.field); + return false; + }); + + tableIns = table.render({ + elem: '#table_list', + url: ${listApi}, + toolbar: "#toolbar", + totalRow: true, + cols: [{type: 'checkbox', title: "ID"}, + {field: 'id', width: 120, sort: true, title: "ID"}, + {fixed: 'right', width: 80, title: "鎿嶄綔", toolbar: '#deleteContainer'}], + page: true, + parseData: function (res) { //res 鍗充负鍘熷杩斿洖鐨勬暟鎹� + if (res.code != 0) + return; + if (res.data.list == null) + return; + console.log(res.data.list) + return { + "code": res.code, //瑙f瀽鎺ュ彛鐘舵�� + "msg": res.msg, //瑙f瀽鎻愮ず鏂囨湰 + "count": res.data.count, //瑙f瀽鏁版嵁闀垮害 + "data": res.data.list //瑙f瀽鏁版嵁鍒楄〃 + }; + } + //,鈥︹�� //鍏朵粬鍙傛暟 + }); + + //澶村伐鍏锋爮浜嬩欢 + tableIns.on('toolbar(app)', + function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch (obj.event) { + case 'delete': + var data = checkStatus.data; + if (data == null || data.length == 0) { + layer.msg("鏈�夋嫨閫夐」"); + return; + } + var ids = new Array(); + for (var i = 0; i < data.length; i++) + ids.push(data[i].id); + layer.confirm('纭瑕佸垹闄ゅ悧锛�', function (index) { + //鍙戝紓姝ュ垹闄ゆ暟鎹� + app.deleteList(ids, function () { + layer.msg("鍒犻櫎鎴愬姛"); + $("form").submit(); + }); + }); + + break; + } + ; + }); + //璇锋眰鎼滅储琛ㄥ崟涓渶瑕佺殑鏁版嵁 + <#if preRequestList??&&(preRequestList?size>0)> + + var requestCount = 0; + <#list preRequestList as request> + requestCount++; + <#assign apiKeys=request.params?keys/> + var params = {}; + <#list apiKeys as key> + params["${key}"]=${request.params["${key}"]} + </#list> + + ksapp.postJSON('${request.url}', params, function (res) { + if (res.code == 0) { + //濉厖鏁版嵁 + $("${request.fillTarget}").empty(); + for (var i = 0; i < res.data.length; i++) { + var html = "<option value='" + res.data[i].key + "'>"; + html += res.data[i].value + "</option>"; + $("${request.fillTarget}").append(html); + } + //閲嶆柊娓叉煋琛ㄥ崟 + form.render(); + + requestCount--; + if (requestCount <= 0) { + //鎼滅储 + $('#search').trigger("click"); + } + } else { + layer.msg(res.msg); + } + + }, function (res) { + }); + </#list> + <#else> + $('#search').trigger("click"); + </#if> + }); + + }, + delete: function (obj, index, id) { + var ids = new Array(); + ids.push(id); + app.deleteList(ids, function () { + $(obj).parents("tr").remove(); + layer.msg('宸插垹闄�!', {icon: 1, time: 1000}); + }); + }, + deleteList: function (ids, success) { + ksapp.post("${deleteApi}", {ids: JSON.stringify(ids)}, function (e) { + if (e.code == 0) { + success(); + } else { + layer.msg(e.msg); + } + }, function (e) { + }); + }, + search: function (params) { + //鏁版嵁閲嶈浇 + tableIns.reload({ + where: params, + page: { + curr: 1 //閲嶆柊浠庣 1 椤靛紑濮� + } + }); + }, + } + } + }) + ; + } + ) + ; + +</script> + +<script> + +</script> +</html> \ No newline at end of file diff --git a/src/main/resources/generater/admin/update.ftl b/src/main/resources/generater/admin/update.ftl index cc5ba65..3a33b09 100644 --- a/src/main/resources/generater/admin/update.ftl +++ b/src/main/resources/generater/admin/update.ftl @@ -1,92 +1,272 @@ -package ${packageName}; +<!DOCTYPE html> +<html class="x-admin-sm"> -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Repository; +<head> + <meta charset="UTF-8"> + <title>${title}</title> + <meta name="renderer" content="webkit"> + <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> + <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> + <!-- 璁㊣E8/9鏀寔濯掍綋鏌ヨ锛屼粠鑰屽吋瀹规爡鏍� --> + <!--[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]--> +</head> +<body> +<div class="layui-fluid"> + <div class="layui-row"> + <form class="layui-form" lay-filter="add"> -<#list importClasses as value> -import ${value}; -</#list> + <#list rowsList as value> + <div class="layui-form-item"> + <label for="L_appCode" class="layui-form-label"> + <#if value.params.require??&&value.params.require> + <span class="x-red">*</span> + </#if> + ${value.params.title}</label> + <div class="layui-input-block"> + <#switch value.type> + <#case "CheckBox"><#include "/admin/form/checkBox.ftl" ><#break> + <#case "Img"> <#include "/admin/form/img.ftl"><#break> + <#case "Password"> <#include "/admin/form/password.ftl"><#break> + <#case "RadioGroup"> <#include "/admin/form/radioGroup.ftl"><#break> + <#case "Select"> <#include "/admin/form/select.ftl"><#break> + <#case "Switch"> <#include "/admin/form/switch.ftl"><#break> + <#case "Text"> <#include "/admin/form/text.ftl"><#break> + <#case "TextArea"> <#include "/admin/form/textArea.ftl"><#break> + <#default> + </#switch> + </div> + <#if (value.desc!"") != ""> + <div class="layui-form-mid layui-word-aux">${value.desc}</div> + </#if> + </div> + </#list> -@Repository -public class ${daoName} extends ${baseDaoClassName}<${entityClassName}>{ + <div class="layui-form-item"> + <label for="L_remarks" class="layui-form-label"></label> + <button class="layui-btn" lay-filter="add" lay-submit="">纭畾淇敼</button> + </div> + </form> + </div> +</div> +<script> + //鍒濆鍖栦笂浼犳帶浠� + var uploadTool = { + callback: null, + chooseImage: {}, + uploadArray: new Array(), + init: function (upload) { + this.uploadArray = new Array(); + <#list rowsList as value> + <#if value.type=='Img'&&value.params.uploadApi??> + this.uploadArray.push(upload.render({ + elem: '#upload_${value.key}', //缁戝畾鍏冪礌 + url: '${value.params.uploadApi}', //涓婁紶鎺ュ彛 + <#if value.params.uploadApiParams??&&(value.params.uploadApiParams?size>0)> + data: { + <#list value.params.uploadApiParams as item> + "${item.key}": "${item.value}", + </#list> + }, + </#if> + auto: false, + accept: 'images', + acceptMime: 'image/*', + field: "file_${value.key}", + choose: function (obj) { + //灏嗘瘡娆¢�夋嫨鐨勬枃浠惰拷鍔犲埌鏂囦欢闃熷垪 + var files = obj.pushFile(); + //棰勮鏈湴鏂囦欢锛屽鏋滄槸澶氭枃浠讹紝鍒欎細閬嶅巻銆�(涓嶆敮鎸乮e8/9) + obj.preview(function (index, file, result) { + console.log(index); //寰楀埌鏂囦欢绱㈠紩 + console.log(file); //寰楀埌鏂囦欢瀵硅薄 + console.log(result); //寰楀埌鏂囦欢base64缂栫爜锛屾瘮濡傚浘鐗� + $("#img_${value.key}").attr("src", result); + //璁板綍閫変腑鐨勬枃浠� + uploadTool.chooseImage["${value.key}"] = "1"; + }); + }, + before: function (obj) { + layer.load(); + }, + done: function (res, index, upload) { + layer.closeAll('loading'); //鍏抽棴loading + //涓婁紶瀹屾瘯鍚庡垹闄� + if (res.code == 0) { + //鑾峰彇閾炬帴 + $("input[name='${value.key}']").val(res.data.url); + delete chooseImage["${value.key}"]; + if (Object.keys(chooseImage).length == 0) { + //鍏ㄩ儴涓婁紶鎴愬姛 + callback(); + } + } else { + layer.msg(res.msg); + } + }, + error: function (index, upload) { + layer.msg("${value.params.title}涓婁紶鍑洪敊"); + layer.closeAll('loading'); //鍏抽棴loading + } + })); + </#if> + </#list> - public void updateSelective(${entityClassName} bean) { - Query query = new Query(); - Update update=new Update(); - query.addCriteria(Criteria.where("${identityColumn.columnName}").is(bean.${identityColumn.columnMehtod})); - <#if columnDataList??> - <#list columnDataList as value> - if(bean.${value.columnMehtod} != null) { - update.set("${value.columnName}", bean.${value.columnMehtod}); + }, + upload: function (result) { + if (this.uploadArray.length > 0) { + this.callback = result; + //鍚屾椂涓婁紶 + for (var i = 0; i < this.uploadArray.length; i++) { + this.uploadArray[i].upload(); + } + } else { + result(); + } } - </#list> - </#if> - update.set("updateTime", new Date()); - update(query, update); - } + }; - public List<${entityClassName}> list(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - if(daoQuery.sortList!=null&&daoQuery.sortList.size()>0){ - query.with(new Sort(daoQuery.sortList)); +</script> + +<script> + //濉厖鏁版嵁 + function fillData(form) { + var id = ksapp.getQueryParam("id"); + if (id) { + } else { + layer.msg("id涓虹┖"); + return; } - query.skip(daoQuery.start); - query.limit(daoQuery.count); - return findList(query); - } - public long count(DaoQuery daoQuery){ - Query query=getQuery(daoQuery); - return count(query); - } - - private Query getQuery(DaoQuery daoQuery){ - List<Criteria> andList=new ArrayList<>(); - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - if(daoQuery.min${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").gte(daoQuery.min${value.columnName?cap_first})); - } - if(daoQuery.max${value.columnName?cap_first}!=null){ - andList.add(Criteria.where("${value.columnName}").lt(daoQuery.max${value.columnName?cap_first})); - } - <#else> - if(daoQuery.${value.columnName}!=null){ - <#if (value.queryType!"") == "equal"> - andList.add(Criteria.where("${value.columnName}").is(daoQuery.${value.columnName})); - <#else> - andList.add(Criteria.where("${value.columnName}").regex(daoQuery.${value.columnName})); - </#if> - } - </#if> - </#list> - Query query=new Query(); - Criteria[] ands=new Criteria[andList.size()]; - andList.toArray(ands); - if(ands.length>0){ - query.addCriteria(new Criteria().andOperator(ands)); - } - return query; + ksapp.postJSON('${detailApi}', {id: id}, function (res) { + if (res.code == 0) { + form.data(res.data); + } else { + layer.msg(res.msg); + } + }, function (res) { + layer.msg("璇︽儏鑾峰彇澶辫触"); + }); } +</script> - public static class DaoQuery{ - <#if daoQueryColumnDataList??> - <#list daoQueryColumnDataList as value> - <#if (value.type!"") == "Date"> - public ${value.type} min${value.columnName?cap_first}; - public ${value.type} max${value.columnName?cap_first}; - <#else> - public ${value.type} ${value.columnName}; +<script> + layui.use(['form', 'layer', 'jquery', 'upload'], function () { + $ = layui.jquery; + var form = layui.form, + layer = layui.layer, + upload = layui.upload; + + var verify = {}; + <#list regexVerifyList as regex> + verify["${regex.key}"] = [/${regex.expression}/, '${regex.msg}']; + </#list> + //鑷畾涔夐獙璇佽鍒� + form.verify(verify); + + //娓叉煋涓婁紶鎺т欢 + uploadTool.init(upload); + + //濉厖琛ㄥ崟鏁版嵁 + //璇锋眰鏁版嵁 + //form.data(); + + + //鐩戝惉鎻愪氦 + form.on('submit(add)', + function (data) { + console.log(data.field); + //杞崲json瀵硅薄 + for (key in data.field) { + if (key.indexOf(".") > -1) { + var value = data.field[key]; + delete data.field[key]; + var onkeys = key.split("."); + //鍒涘缓瀵硅薄 + if (data.field[onkeys[0]] == undefined) { + data.field[onkeys[0]] = {}; + } + data.field[onkeys[0]][onkeys[1]] = value; + } + } + uploadTool.upload(function () { + //鍙戝紓姝ワ紝鎶婃暟鎹彁浜ょ粰php + var params = data.field; + params.id = ksapp.getQueryParam("id"); + + ksapp.postJSON('${updateApi}', data.field, function (res) { + if (res.code == 0) { + layer.alert("澧炲姞鎴愬姛", { + icon: 6 + }, + function () { + //鍏抽棴褰撳墠frame + xadmin.close(); + // 鍙互瀵圭埗绐楀彛杩涜鍒锋柊 + // xadmin.father_reload(); + }); + } else { + layer.msg(res.msg); + } + + }, function (res) { + }); + }); + return false; + }); + //璇锋眰select鐨勬暟鎹瓵PI + + <#if preRequestList??&&(preRequestList?size>0)> + var preRequestCount = ${preRequestList?size} + <#list preRequestList as request> + <#assign apiKeys=request.params?keys/> + var params = {}; + <#list apiKeys as key> + params["${key}"]=${request.params["${key}"]} + </#list> + + ksapp.postJSON('${request.url}', params, function (res) { + if (res.code == 0) { + //濉厖鏁版嵁 + $("${request.fillTarget}").empty(); + for (var i = 0; i < res.data.length; i++) { + var html = "<option value='" + res.data[i].key + "'>"; + html += res.data[i].value + "</option>"; + $("${request.fillTarget}").append(html); + } + //閲嶆柊娓叉煋琛ㄥ崟 + form.render(); + preRequestCount--; + if (preRequestCount <= 0) { + //寮�濮嬪~鍏呮暟鎹� + fillData(form) + } + + } else { + layer.msg(res.msg); + } + + }, function (res) { + }); + </#list> + <#else> + fillData(form) </#if> - </#list> - </#if> - public int start; - public int count; - public List<Sort.Order> sortList; - } -} + }) + ; +</script> +</body> + +</html> \ No newline at end of file diff --git a/src/main/resources/generater/service.template b/src/main/resources/generater/service.template deleted file mode 100644 index 88774a6..0000000 --- a/src/main/resources/generater/service.template +++ /dev/null @@ -1,7 +0,0 @@ -package ${packageName}; - -import ${entityClass}; - -public interface ${serviceClassName} { - -} diff --git a/src/main/resources/generater/service/method/add.template b/src/main/resources/generater/service/method/add.template new file mode 100644 index 0000000..a34478d --- /dev/null +++ b/src/main/resources/generater/service/method/add.template @@ -0,0 +1,4 @@ +//鏌ヨ涓婚敭ID鏄惁瀛樺湪 + dao.find(if(${entity.name}.getId())) + + diff --git a/src/main/resources/generater/service/method/count.template b/src/main/resources/generater/service/method/count.template new file mode 100644 index 0000000..fd83e79 --- /dev/null +++ b/src/main/resources/generater/service/method/count.template @@ -0,0 +1,14 @@ +package ${packageName}; + +import ${entityClass}; + + +public interface ${serviceClassName} { + +<#list metodInfoList as method> + ${method.note} + ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); + +</#list> + +} diff --git a/src/main/resources/generater/service/method/delete.template b/src/main/resources/generater/service/method/delete.template new file mode 100644 index 0000000..fd83e79 --- /dev/null +++ b/src/main/resources/generater/service/method/delete.template @@ -0,0 +1,14 @@ +package ${packageName}; + +import ${entityClass}; + + +public interface ${serviceClassName} { + +<#list metodInfoList as method> + ${method.note} + ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); + +</#list> + +} diff --git a/src/main/resources/generater/service/method/list.template b/src/main/resources/generater/service/method/list.template new file mode 100644 index 0000000..fd83e79 --- /dev/null +++ b/src/main/resources/generater/service/method/list.template @@ -0,0 +1,14 @@ +package ${packageName}; + +import ${entityClass}; + + +public interface ${serviceClassName} { + +<#list metodInfoList as method> + ${method.note} + ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); + +</#list> + +} diff --git a/src/main/resources/generater/service/method/save.template b/src/main/resources/generater/service/method/save.template new file mode 100644 index 0000000..85f8420 --- /dev/null +++ b/src/main/resources/generater/service/method/save.template @@ -0,0 +1,6 @@ + if(entity.getUpdateTime()==null){ + entity.setUpdateTime(new Date()); + } + dao.save(entity); + + diff --git a/src/main/resources/generater/service/method/selectByPrimaryKey.template b/src/main/resources/generater/service/method/selectByPrimaryKey.template new file mode 100644 index 0000000..870c88d --- /dev/null +++ b/src/main/resources/generater/service/method/selectByPrimaryKey.template @@ -0,0 +1,4 @@ +return dao.selectByPrimaryKey(id); + + + diff --git a/src/main/resources/generater/service/method/updateSlective.template b/src/main/resources/generater/service/method/updateSlective.template new file mode 100644 index 0000000..03b06a9 --- /dev/null +++ b/src/main/resources/generater/service/method/updateSlective.template @@ -0,0 +1,2 @@ +entity.setUpdateTime(new Date()); +dao.updateSelective(entity); \ No newline at end of file diff --git a/src/main/resources/generater/service/queryVO.ftl b/src/main/resources/generater/service/queryVO.ftl new file mode 100644 index 0000000..77045ac --- /dev/null +++ b/src/main/resources/generater/service/queryVO.ftl @@ -0,0 +1,17 @@ +package ${packageName}; + +public class ${className} { + + //鎼滅储鍏抽敭璇� + private String kw; + + private String getKw(){ + return kw; + } + + private void setKw(String kw){ + this.kw=kw; + } + + +} diff --git a/src/main/resources/generater/service/service.template b/src/main/resources/generater/service/service.template new file mode 100644 index 0000000..c7e793d --- /dev/null +++ b/src/main/resources/generater/service/service.template @@ -0,0 +1,14 @@ +package ${packageName}; + +import ${service.clazz}; + + +public interface ${service.name} { + +<#list metodInfoList as method> + ${method.note} + ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}); + +</#list> + +} diff --git a/src/main/resources/generater/service/serviceImpl.template b/src/main/resources/generater/service/serviceImpl.template new file mode 100644 index 0000000..6d080bb --- /dev/null +++ b/src/main/resources/generater/service/serviceImpl.template @@ -0,0 +1,23 @@ +package ${packageName}; + +import ${entity.clazz}; +import ${dao.clazz}; +import ${service.clazz}; +import javax.annotation.Resource; +import org.springframework.stereotype.Service; +import java.util.Date; + +@Service +public class ${service.name}Impl implements ${service.name}{ + + @Resource + private ${dao.name} ${dao.name?uncap_first}; + + <#list metodInfoList as method> + ${method.note} + ${method.visiteAccess} ${method.returnType} ${method.name}(${method.params}){ + ${method.content} + } + </#list> + +} \ No newline at end of file diff --git a/src/main/resources/generater/serviceImpl.template b/src/main/resources/generater/serviceImpl.template deleted file mode 100644 index 4705d93..0000000 --- a/src/main/resources/generater/serviceImpl.template +++ /dev/null @@ -1,16 +0,0 @@ -package ${packageName}; - -import ${entityClass}; -import ${daoClass}; -import ${serviceClass}; -import javax.annotation.Resource; -import org.springframework.stereotype.Service; -import java.util.Date; - -@Service -public class ${serviceClassName}Impl implements ${serviceClassName}{ - - @Resource - private ${daoClassName} ${daoClassCaseName}; - -} \ No newline at end of file diff --git a/src/test/java/com/generater/GeneratorTest.java b/src/test/java/com/generater/GeneratorTest.java index 818a88f..a3af2b0 100644 --- a/src/test/java/com/generater/GeneratorTest.java +++ b/src/test/java/com/generater/GeneratorTest.java @@ -4,6 +4,7 @@ import freemarker.template.Template; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; +import org.yeshi.utils.FileUtil; import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.SpringComponentGenerater; import org.yeshi.utils.generater.annotation.admin.form.CheckBox; @@ -15,6 +16,8 @@ import org.yeshi.utils.generater.mybatis.Column; import org.yeshi.utils.generater.mybatis.MyBatisMapperUtil; import org.yeshi.utils.generater.mybatis.Table; +import org.yeshi.utils.generater.vo.admin.FormAddInfoVO; +import org.yeshi.utils.generater.vo.admin.FormUpdateInfoVO; import java.io.File; import java.io.InputStream; @@ -60,24 +63,23 @@ "admin/form/switch.ftl", "admin/form/text.ftl", "admin/form/textArea.ftl", - "admin/add.ftl" + "admin/add.ftl", + "admin/update.ftl", + "admin/list.ftl" }; Map<String, InputStream> map = new HashMap<>(); for (String st : template) { map.put(st, SpringComponentGenerater.class.getClassLoader().getResourceAsStream("generater/" + st)); } - - String result = FreemarkerUtils.generateInputStream(info, "admin/add.ftl", map); + String result = FreemarkerUtils.generateInputStream(new FormUpdateInfoVO.Builder().setAdminInfo(info).build(), "admin/update.ftl", map); + FileUtil.saveAsFileByte(result.getBytes("UTF-8"), "C:\\Users\\Administrator\\Documents\\HBuilderProjects\\LayuiTest\\form.html"); System.out.println(result); - - // // boolean match = Pattern.matches("^(https://){1}.*(\\.m3u8)$", "https://n1.szjal.cn/20210805/qnDXhXBa/index.m3u8123"); // System.out.println(match); - } diff --git a/src/test/java/com/generater/TestEntity.java b/src/test/java/com/generater/TestEntity.java index 0d6211b..deeefd4 100644 --- a/src/test/java/com/generater/TestEntity.java +++ b/src/test/java/com/generater/TestEntity.java @@ -23,26 +23,26 @@ @DaoQueryCondition(queryType = DaoQueryCondition.QueryType.contains) @Show(order = 0, title = "鏄电О") - @Text(title = "鏄电О", maxLength = 50, require = true, placeHolder = "璇疯緭鍏ユ樀绉�", desc = "鏄电О涓嶈兘鍖呭惈鐗规畩瀛楃", verifyType = FormVerifyType.regex, verifyValue = "^.{0-100}$", verifyNotifyMsg = "璇疯緭鍏ユ纭殑鏄电О") + @Text(title = "鏄电О", maxLength = 50, require = true, placeHolder = "璇疯緭鍏ユ樀绉�", desc = "鏄电О涓嶈兘鍖呭惈鐗规畩瀛楃", verifyType = FormVerifyType.none, verifyValue = "^.{0-100}$", verifyNotifyMsg = "璇疯緭鍏ユ纭殑鏄电О") private String nickName; @DaoQueryCondition @Show(order = 1, title = "绫诲瀷") - @Select(values = {"1,鐢�", "2,濂�"}, title = "绫诲瀷") + @Select(values = {"1:鐢�", "2:濂�"}, title = "绫诲瀷") private int type; @DaoQueryCondition @Show(order = 2, title = "鎬у埆") - @RadioGroup(values = {"1,鐢�", "2,濂�"}, title = "鎬у埆") + @RadioGroup(values = {"1:鐢�", "2:濂�"}, title = "鎬у埆") private int sex; @Show(order = 3, title = "澶村儚", showType = Show.ShowType.IMG, imgWidth = 50, imgHeight = 50) - @Img(width = 50, height = 50, title = "澶村儚") + @Img(height = 50, title = "澶村儚", uploadApi = "/admin/uploadimg", uploadApiParams = {"id:123123","type:2"}) private String portrait; @DaoQueryCondition @Show(order = 4, title = "鐪�") - @Select(apiPath = "/admin/api/getProvince", title = "鐪�") + @Select(values = {"cq:閲嶅簡","js:姹熻嫃"}, title = "鐪�", apiParams = {"page:1", "pageSize:10", "id:\"test\""}) private String province; -- Gitblit v1.8.0