diff --git a/src/main/java/com/fc/test/common/file/FileUploadUtils.java b/src/main/java/com/fc/test/common/file/FileUploadUtils.java index 773dba0a3a794c02c3deab33f00b0235bbea31c1..82873547ff9b966e3090e3a6a84b3d39c4d216fd 100644 --- a/src/main/java/com/fc/test/common/file/FileUploadUtils.java +++ b/src/main/java/com/fc/test/common/file/FileUploadUtils.java @@ -14,8 +14,9 @@ import com.fc.test.common.exception.file.FileNameLengthLimitExceededException; * @author fuce * @date: 2018年9月22日 下午10:33:23 */ -public class FileUploadUtils -{ +public class FileUploadUtils { + + private FileUploadUtils(){} /** * 默认大小 50M diff --git a/src/main/java/com/fc/test/common/file/FileUtils.java b/src/main/java/com/fc/test/common/file/FileUtils.java index ecaed7d60d6f6040158a44957225c80350b0c977..f1cb0cc581219150c1b3db6f99684b8cb60220bb 100644 --- a/src/main/java/com/fc/test/common/file/FileUtils.java +++ b/src/main/java/com/fc/test/common/file/FileUtils.java @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletResponse; public class FileUtils { + private FileUtils(){} /** * 输出指定文件的byte数组 * @@ -99,19 +100,15 @@ public class FileUtils * @throws IOException */ public static void readIMGTohtml(HttpServletRequest request, HttpServletResponse response,String fileurl) throws IOException{ - //读取本地图片输入流 - FileInputStream inputStream = new FileInputStream(fileurl); - int i = inputStream.available(); - //byte数组用于存放图片字节数据 - byte[] buff = new byte[i]; - inputStream.read(buff); - //记得关闭输入流 - inputStream.close(); - //设置发送到客户端的响应内容类型 - response.setContentType("image/*"); - OutputStream out = response.getOutputStream(); - out.write(buff); - //关闭响应输出流 - out.close(); + //设置发送到客户端的响应内容类型 + response.setContentType("image/*"); + //读取本地图片输入流 + try (FileInputStream inputStream = new FileInputStream(fileurl);OutputStream out = response.getOutputStream()){ + int i = inputStream.available(); + //byte数组用于存放图片字节数据 + byte[] buff = new byte[i]; + inputStream.read(buff); + out.write(buff); + } } } diff --git a/src/main/java/com/fc/test/common/quartz/utils/JobInvokeUtil.java b/src/main/java/com/fc/test/common/quartz/utils/JobInvokeUtil.java index 58c778469b70c3e44f8240beff1049e20dfdd321..1461c656351ce8a77434e972d8ba50cf1a077f07 100644 --- a/src/main/java/com/fc/test/common/quartz/utils/JobInvokeUtil.java +++ b/src/main/java/com/fc/test/common/quartz/utils/JobInvokeUtil.java @@ -1,183 +1,191 @@ -package com.fc.test.common.quartz.utils; - -import com.fc.test.common.spring.SpringUtils; -import com.fc.test.model.auto.SysQuartzJob; -import com.fc.test.util.StringUtils; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.List; - -/** - * 任务执行工具 - * - * @author ruoyi - */ -public class JobInvokeUtil -{ - /** - * 执行方法 - * - * @param sysJob 系统任务 - */ - public static void invokeMethod(SysQuartzJob sysJob) throws Exception - { - String invokeTarget = sysJob.getInvokeTarget(); - String beanName = getBeanName(invokeTarget); - String methodName = getMethodName(invokeTarget); - List methodParams = getMethodParams(invokeTarget); - - if (!isValidClassName(beanName)) - { - Object bean = SpringUtils.getBean(beanName); - invokeMethod(bean, methodName, methodParams); - } - else - { - Object bean = Class.forName(beanName).newInstance(); - invokeMethod(bean, methodName, methodParams); - } - } - - /** - * 调用任务方法 - * - * @param bean 目标对象 - * @param methodName 方法名称 - * @param methodParams 方法参数 - */ - private static void invokeMethod(Object bean, String methodName, List methodParams) - throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, - InvocationTargetException - { - if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) - { - Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams)); - method.invoke(bean, getMethodParamsValue(methodParams)); - } - else - { - Method method = bean.getClass().getDeclaredMethod(methodName); - method.invoke(bean); - } - } - - /** - * 校验是否为为class包名 - * - * @param str 名称 - * @return true是 false否 - */ - public static boolean isValidClassName(String invokeTarget) - { - return StringUtils.countMatches(invokeTarget, ".") > 1; - } - - /** - * 获取bean名称 - * - * @param invokeTarget 目标字符串 - * @return bean名称 - */ - public static String getBeanName(String invokeTarget) - { - String beanName = StringUtils.substringBefore(invokeTarget, "("); - return StringUtils.substringBeforeLast(beanName, "."); - } - - /** - * 获取bean方法 - * - * @param invokeTarget 目标字符串 - * @return method方法 - */ - public static String getMethodName(String invokeTarget) - { - String methodName = StringUtils.substringBefore(invokeTarget, "("); - return StringUtils.substringAfterLast(methodName, "."); - } - - /** - * 获取method方法参数相关列表 - * - * @param invokeTarget 目标字符串 - * @return method方法相关参数列表 - */ - public static List getMethodParams(String invokeTarget) - { - String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); - if (StringUtils.isEmpty(methodStr)) - { - return null; - } - String[] methodParams = methodStr.split(","); - List classs = new LinkedList<>(); - for (int i = 0; i < methodParams.length; i++) - { - String str = StringUtils.trimToEmpty(methodParams[i]); - // String字符串类型,包含' - if (StringUtils.contains(str, "'")) - { - classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class }); - } - // boolean布尔类型,等于true或者false - else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false")) - { - classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); - } - // long长整形,包含L - else if (StringUtils.containsIgnoreCase(str, "L")) - { - classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class }); - } - // double浮点类型,包含D - else if (StringUtils.containsIgnoreCase(str, "D")) - { - classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class }); - } - // 其他类型归类为整形 - else - { - classs.add(new Object[] { Integer.valueOf(str), Integer.class }); - } - } - return classs; - } - - /** - * 获取参数类型 - * - * @param methodParams 参数相关列表 - * @return 参数类型列表 - */ - public static Class[] getMethodParamsType(List methodParams) - { - Class[] classs = new Class[methodParams.size()]; - int index = 0; - for (Object[] os : methodParams) - { - classs[index] = (Class) os[1]; - index++; - } - return classs; - } - - /** - * 获取参数值 - * - * @param methodParams 参数相关列表 - * @return 参数值列表 - */ - public static Object[] getMethodParamsValue(List methodParams) - { - Object[] classs = new Object[methodParams.size()]; - int index = 0; - for (Object[] os : methodParams) - { - classs[index] = (Object) os[0]; - index++; - } - return classs; - } -} +package com.fc.test.common.quartz.utils; + +import com.fc.test.common.spring.SpringUtils; +import com.fc.test.model.auto.SysQuartzJob; +import com.fc.test.util.StringUtils; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; + +/** + * 任务执行工具 + * + * @author ruoyi + */ +public class JobInvokeUtil +{ + /** + * 执行方法 + * + * @param sysJob 系统任务 + */ + public static void invokeMethod(SysQuartzJob sysJob) throws Exception + { + String invokeTarget = sysJob.getInvokeTarget(); + String beanName = getBeanName(invokeTarget); + String methodName = getMethodName(invokeTarget); + List methodParams = getMethodParams(invokeTarget); + + if (!isValidClassName(beanName)) + { + Object bean = SpringUtils.getBean(beanName); + if (null != bean) { + invokeMethod(bean, methodName, methodParams); + }else { + System.out.println("找不到class["+ beanName +"]"); + } + } + else + { + Object bean = Class.forName(beanName).newInstance(); + if (null != bean) { + invokeMethod(bean, methodName, methodParams); + }else { + System.out.println("找不到class["+ beanName +"]"); + } + } + } + + /** + * 调用任务方法 + * + * @param bean 目标对象 + * @param methodName 方法名称 + * @param methodParams 方法参数 + */ + private static void invokeMethod(Object bean, String methodName, List methodParams) + throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, + InvocationTargetException + { + if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) + { + Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams)); + method.invoke(bean, getMethodParamsValue(methodParams)); + } + else + { + Method method = bean.getClass().getDeclaredMethod(methodName); + method.invoke(bean); + } + } + + /** + * 校验是否为为class包名 + * + * @param str 名称 + * @return true是 false否 + */ + public static boolean isValidClassName(String invokeTarget) + { + return StringUtils.countMatches(invokeTarget, ".") > 1; + } + + /** + * 获取bean名称 + * + * @param invokeTarget 目标字符串 + * @return bean名称 + */ + public static String getBeanName(String invokeTarget) + { + String beanName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringBeforeLast(beanName, "."); + } + + /** + * 获取bean方法 + * + * @param invokeTarget 目标字符串 + * @return method方法 + */ + public static String getMethodName(String invokeTarget) + { + String methodName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringAfterLast(methodName, "."); + } + + /** + * 获取method方法参数相关列表 + * + * @param invokeTarget 目标字符串 + * @return method方法相关参数列表 + */ + public static List getMethodParams(String invokeTarget) + { + String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); + if (StringUtils.isEmpty(methodStr)) + { + return null; + } + String[] methodParams = methodStr.split(","); + List classs = new LinkedList<>(); + for (int i = 0; i < methodParams.length; i++) + { + String str = StringUtils.trimToEmpty(methodParams[i]); + // String字符串类型,包含' + if (StringUtils.contains(str, "'")) + { + classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class }); + } + // boolean布尔类型,等于true或者false + else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false")) + { + classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); + } + // long长整形,包含L + else if (StringUtils.containsIgnoreCase(str, "L")) + { + classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class }); + } + // double浮点类型,包含D + else if (StringUtils.containsIgnoreCase(str, "D")) + { + classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class }); + } + // 其他类型归类为整形 + else + { + classs.add(new Object[] { Integer.valueOf(str), Integer.class }); + } + } + return classs; + } + + /** + * 获取参数类型 + * + * @param methodParams 参数相关列表 + * @return 参数类型列表 + */ + public static Class[] getMethodParamsType(List methodParams) + { + Class[] classs = new Class[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Class) os[1]; + index++; + } + return classs; + } + + /** + * 获取参数值 + * + * @param methodParams 参数相关列表 + * @return 参数值列表 + */ + public static Object[] getMethodParamsValue(List methodParams) + { + Object[] classs = new Object[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Object) os[0]; + index++; + } + return classs; + } +} diff --git a/src/main/java/com/fc/test/shiro/util/ShiroUtils.java b/src/main/java/com/fc/test/shiro/util/ShiroUtils.java index 89add1f85de0c95fa1dec0201c4d536fe16439a6..f147f07a6251c1b230a84e8ca7684563a514c43e 100644 --- a/src/main/java/com/fc/test/shiro/util/ShiroUtils.java +++ b/src/main/java/com/fc/test/shiro/util/ShiroUtils.java @@ -12,14 +12,17 @@ import com.fc.test.shiro.service.MyShiroRealm; import com.fc.test.util.BeanUtils; import com.fc.test.util.StringUtils; +import java.util.Optional; + /** * shiro 工具类 * * @author fuce */ -public class ShiroUtils -{ +public class ShiroUtils { + + private ShiroUtils(){} public static Subject getSubjct() { @@ -67,12 +70,20 @@ public class ShiroUtils public static String getUserId() { - return getUser().getId().trim(); + TsysUser tsysUser = getUser(); + if (tsysUser == null || tsysUser.getId() == null){ + throw new RuntimeException("用户不存在!"); + } + return tsysUser.getId().trim(); } public static String getLoginName() { - return getUser().getUsername(); + TsysUser tsysUser = getUser(); + if (tsysUser == null){ + throw new RuntimeException("用户不存在!"); + } + return tsysUser.getUsername(); } public static String getIp() diff --git a/src/main/java/com/fc/test/util/AutoCode/AutoCodeUtil.java b/src/main/java/com/fc/test/util/AutoCode/AutoCodeUtil.java index 08608051a43e1ace004af6cde16eb88c27564a9e..008df083289bc94059f1f1bc3cf99db6aed5a9a5 100644 --- a/src/main/java/com/fc/test/util/AutoCode/AutoCodeUtil.java +++ b/src/main/java/com/fc/test/util/AutoCode/AutoCodeUtil.java @@ -1,220 +1,221 @@ -package com.fc.test.util.AutoCode; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import org.apache.commons.lang.StringUtils; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import com.fc.test.model.custom.TsysTables; -import com.fc.test.model.custom.autocode.AutoCodeConfig; -import com.fc.test.model.custom.autocode.BeanColumn; -import com.fc.test.model.custom.autocode.GlobalConfig; -import com.fc.test.service.SysUtilService; -import com.fc.test.util.SnowflakeIdWorker; -import cn.hutool.core.date.DateTime; - -/* - * 自动生成 - */ -public class AutoCodeUtil { - - /**生成文件路径**/ - private static String targetPath = getTargetPath(); - - - public static String getTargetPath() { - return AutoCodeConfig.getGlobalConfig().getParentPath(); - } - - public static List getTemplates(){ - List templates = new ArrayList(); - - //java代码模板 - templates.add("auto_code/model/Entity.java.vm"); - templates.add("auto_code/model/EntityExample.java.vm"); - templates.add("auto_code/mapperxml/EntityMapper.xml.vm"); - templates.add("auto_code/service/EntityService.java.vm"); - templates.add("auto_code/mapper/EntityMapper.java.vm"); - templates.add("auto_code/controller/EntityController.java.vm"); - //前端模板 - templates.add("auto_code/html/list.html.vm"); - templates.add("auto_code/html/add.html.vm"); - templates.add("auto_code/html/edit.html.vm"); - //sql模板 - templates.add("auto_code/sql/menu.sql.vm"); -// templates.add("auto_code/说明.txt.vm"); - return templates; - } - - /** - * 创建单表 - * @author fuce - * @Date 2019年8月24日 下午11:44:54 - */ - public static void autoCodeOneModel(SysUtilService sysUtilService,TsysTables tables,List beanColumns,String conditionQueryField,String pid,int sqlcheck){ - //设置velocity资源加载器 - Properties prop = new Properties(); - prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" ); - Velocity.init(prop); - - GlobalConfig globalConfig= AutoCodeConfig.getGlobalConfig(); - Map map = new HashMap<>(); - //数据库表数据 - map.put("TsysTables",tables); - //字段集合 - map.put("beanColumns",beanColumns); - //配置文件 - map.put("globalConfig",globalConfig); - map.put("datetime",new DateTime()); - map.put("pid",pid); - map.put("sqlcheck",sqlcheck); - map.put("conditionQueryField",conditionQueryField); - map.put("conditionQueryField_a",com.fc.test.util.StringUtils.firstLowerCase(conditionQueryField)); - map.put("SnowflakeIdWorker", SnowflakeIdWorker.class); - //需要导入的java类 - map.put("JavaClassPackages", getJavaClassPackage(beanColumns)); - VelocityContext context = new VelocityContext(map); - - //获取模板列表 - List templates = getTemplates(); - for (String template : templates) { - try { - if(template.contains("menu.sql.vm")) { - if(sqlcheck==1) {//执行sql - Template tpl = Velocity.getTemplate(template, "UTF-8" ); - StringWriter sw = new StringWriter(); - tpl.merge(context, sw); - System.out.println(sw); - executeSQL(sysUtilService, sw.toString()); - }else {//只输出 - Template tpl = Velocity.getTemplate(template, "UTF-8" ); - StringWriter sw = new StringWriter(); - tpl.merge(context, sw); - System.out.println(sw); - } - - }else { - String filepath=getCoverFileName(template,tables.getTableModel_a() ,tables.getTableModel(),globalConfig.getParentPack() , "model","gen"); - Template tpl = Velocity.getTemplate(template, "UTF-8" ); - File file = new File(filepath); - if (!file.getParentFile().exists()) - file.getParentFile().mkdirs(); - if (!file.exists()) - file.createNewFile(); - FileOutputStream outStream = new FileOutputStream(file); - OutputStreamWriter writer = new OutputStreamWriter(outStream,"UTF-8"); - BufferedWriter sw = new BufferedWriter(writer); - tpl.merge(context, sw); - sw.flush(); - sw.close(); - outStream.close(); - System.out.println("成功生成Java文件:"+filepath); - } - - } catch (IOException e) { - try { - throw new Exception("渲染模板失败,表名:" +tables.getTableName()+"\n"+e.getMessage()); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - } - } - - - - /** - * 获取覆盖路径 - */ - public static String getCoverFileName(String template,String classname,String className, String packageName, String moduleName,String controller) { - String packagePath =targetPath+File.separator+"src"+File.separator + "main" + File.separator + "java" + File.separator; - String resourcesPath=targetPath+File.separator+"src"+File.separator + "main" + File.separator+"resources"+ File.separator;; - if (StringUtils.isNotBlank(packageName)) { - packagePath += packageName.replace(".", File.separator) + File.separator; - } - - if (template.contains("Entity.java.vm")) {//model - return packagePath+moduleName +File.separator+ "auto" + File.separator + className + ".java"; - } - if(template.contains("EntityExample.java.vm")) {//modelExample - return packagePath+moduleName +File.separator+ "auto" + File.separator + className + "Example.java"; - } - - if (template.contains("EntityMapper.java.vm")) {//dao or mapper - return packagePath + "mapper" + File.separator + "auto" + File.separator + className + "Mapper.java"; - } - if (template.contains("EntityMapper.xml.vm")) {//dao or mapper - return resourcesPath+"mybatis" + File.separator+"auto"+ File.separator + className + "Mapper.xml"; - } - - if (template.contains("EntityService.java.vm")) { - return packagePath + "service" + File.separator + className + "Service.java"; - } - if(template.contains("EntityController.java.vm")) { - return packagePath + "controller" + File.separator + controller + File.separator + className + "Controller.java"; - } - if(template.contains("list.html.vm")) { - return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"list.html"; - } - if(template.contains("add.html.vm")) { - System.err.println(resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator ); - return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"add.html"; - } - if(template.contains("edit.html.vm")) { - return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"edit.html"; - } - - return null; - } - - - /** - * 执行sql - * @param sysUtilService - * @param sql - * @author fuce - * @Date 2019年8月31日 下午6:40:14 - */ - public static void executeSQL(SysUtilService sysUtilService,String sql) { - int list= sysUtilService.executeSQL(sql); - System.out.println(list); - } - - /** - * 获取javamodel需要的导入类 - * @author fuce - * @Date 2019年8月26日 下午11:11:09 - */ - public static String getJavaClassPackage(List beanColumns) { - Map map=new HashMap<>(); - StringBuffer buffer=new StringBuffer(); - for (BeanColumn beanColumn : beanColumns) { - map.put(beanColumn.getBeanType(), beanColumn.getBeanType()); - } - if(map.size()>0) { - boolean time=false; - for (String key : map.keySet()) { - if(!"java.lang.String".equals(key)) { - buffer.append("import "+map.get(key)+";\n"); - } - if("java.util.Date".equals(key)&&time==false) { - time=true; - buffer.append("import com.fasterxml.jackson.annotation.JsonFormat;\n"); - } - - } - } - return buffer.toString(); - } - -} +package com.fc.test.util.AutoCode; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import org.apache.commons.lang.StringUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import com.fc.test.model.custom.TsysTables; +import com.fc.test.model.custom.autocode.AutoCodeConfig; +import com.fc.test.model.custom.autocode.BeanColumn; +import com.fc.test.model.custom.autocode.GlobalConfig; +import com.fc.test.service.SysUtilService; +import com.fc.test.util.SnowflakeIdWorker; +import cn.hutool.core.date.DateTime; + +/* + * 自动生成 + */ +public class AutoCodeUtil { + + private AutoCodeUtil(){} + + /**生成文件路径**/ + private static String targetPath = getTargetPath(); + + + public static String getTargetPath() { + return AutoCodeConfig.getGlobalConfig().getParentPath(); + } + + public static List getTemplates(){ + List templates = new ArrayList(); + + //java代码模板 + templates.add("auto_code/model/Entity.java.vm"); + templates.add("auto_code/model/EntityExample.java.vm"); + templates.add("auto_code/mapperxml/EntityMapper.xml.vm"); + templates.add("auto_code/service/EntityService.java.vm"); + templates.add("auto_code/mapper/EntityMapper.java.vm"); + templates.add("auto_code/controller/EntityController.java.vm"); + //前端模板 + templates.add("auto_code/html/list.html.vm"); + templates.add("auto_code/html/add.html.vm"); + templates.add("auto_code/html/edit.html.vm"); + //sql模板 + templates.add("auto_code/sql/menu.sql.vm"); +// templates.add("auto_code/说明.txt.vm"); + return templates; + } + + /** + * 创建单表 + * @author fuce + * @Date 2019年8月24日 下午11:44:54 + */ + public static void autoCodeOneModel(SysUtilService sysUtilService,TsysTables tables,List beanColumns,String conditionQueryField,String pid,int sqlcheck){ + //设置velocity资源加载器 + Properties prop = new Properties(); + prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" ); + Velocity.init(prop); + + GlobalConfig globalConfig= AutoCodeConfig.getGlobalConfig(); + Map map = new HashMap<>(); + //数据库表数据 + map.put("TsysTables",tables); + //字段集合 + map.put("beanColumns",beanColumns); + //配置文件 + map.put("globalConfig",globalConfig); + map.put("datetime",new DateTime()); + map.put("pid",pid); + map.put("sqlcheck",sqlcheck); + map.put("conditionQueryField",conditionQueryField); + map.put("conditionQueryField_a",com.fc.test.util.StringUtils.firstLowerCase(conditionQueryField)); + map.put("SnowflakeIdWorker", SnowflakeIdWorker.class); + //需要导入的java类 + map.put("JavaClassPackages", getJavaClassPackage(beanColumns)); + VelocityContext context = new VelocityContext(map); + + //获取模板列表 + List templates = getTemplates(); + for (String template : templates) { + try { + if(template.contains("menu.sql.vm")) { + if(sqlcheck==1) {//执行sql + Template tpl = Velocity.getTemplate(template, "UTF-8" ); + StringWriter sw = new StringWriter(); + tpl.merge(context, sw); + System.out.println(sw); + executeSQL(sysUtilService, sw.toString()); + }else {//只输出 + Template tpl = Velocity.getTemplate(template, "UTF-8" ); + StringWriter sw = new StringWriter(); + tpl.merge(context, sw); + System.out.println(sw); + } + + }else { + String filepath=getCoverFileName(template,tables.getTableModel_a() ,tables.getTableModel(),globalConfig.getParentPack() , "model","gen"); + Template tpl = Velocity.getTemplate(template, "UTF-8" ); + File file = new File(filepath); + if (!file.getParentFile().exists()) + file.getParentFile().mkdirs(); + if (!file.exists()) + file.createNewFile(); + try (FileOutputStream outStream = new FileOutputStream(file); + OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8"); + BufferedWriter sw = new BufferedWriter(writer)) { + tpl.merge(context, sw); + sw.flush(); + System.out.println("成功生成Java文件:" + filepath); + } + } + + } catch (IOException e) { + try { + throw new Exception("渲染模板失败,表名:" +tables.getTableName()+"\n"+e.getMessage()); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } + + + + /** + * 获取覆盖路径 + */ + public static String getCoverFileName(String template,String classname,String className, String packageName, String moduleName,String controller) { + String packagePath =targetPath+File.separator+"src"+File.separator + "main" + File.separator + "java" + File.separator; + String resourcesPath=targetPath+File.separator+"src"+File.separator + "main" + File.separator+"resources"+ File.separator;; + if (StringUtils.isNotBlank(packageName)) { + packagePath += packageName.replace(".", File.separator) + File.separator; + } + + if (template.contains("Entity.java.vm")) {//model + return packagePath+moduleName +File.separator+ "auto" + File.separator + className + ".java"; + } + if(template.contains("EntityExample.java.vm")) {//modelExample + return packagePath+moduleName +File.separator+ "auto" + File.separator + className + "Example.java"; + } + + if (template.contains("EntityMapper.java.vm")) {//dao or mapper + return packagePath + "mapper" + File.separator + "auto" + File.separator + className + "Mapper.java"; + } + if (template.contains("EntityMapper.xml.vm")) {//dao or mapper + return resourcesPath+"mybatis" + File.separator+"auto"+ File.separator + className + "Mapper.xml"; + } + + if (template.contains("EntityService.java.vm")) { + return packagePath + "service" + File.separator + className + "Service.java"; + } + if(template.contains("EntityController.java.vm")) { + return packagePath + "controller" + File.separator + controller + File.separator + className + "Controller.java"; + } + if(template.contains("list.html.vm")) { + return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"list.html"; + } + if(template.contains("add.html.vm")) { + System.err.println(resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator ); + return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"add.html"; + } + if(template.contains("edit.html.vm")) { + return resourcesPath+"templates"+File.separator + controller+File.separator + classname+File.separator +"edit.html"; + } + + return null; + } + + + /** + * 执行sql + * @param sysUtilService + * @param sql + * @author fuce + * @Date 2019年8月31日 下午6:40:14 + */ + public static void executeSQL(SysUtilService sysUtilService,String sql) { + int list= sysUtilService.executeSQL(sql); + System.out.println(list); + } + + /** + * 获取javamodel需要的导入类 + * @author fuce + * @Date 2019年8月26日 下午11:11:09 + */ + public static String getJavaClassPackage(List beanColumns) { + Map map=new HashMap<>(); + StringBuffer buffer=new StringBuffer(); + for (BeanColumn beanColumn : beanColumns) { + map.put(beanColumn.getBeanType(), beanColumn.getBeanType()); + } + if(map.size()>0) { + boolean time=false; + for (String key : map.keySet()) { + if(!"java.lang.String".equals(key)) { + buffer.append("import "+map.get(key)+";\n"); + } + if("java.util.Date".equals(key)&&time==false) { + time=true; + buffer.append("import com.fasterxml.jackson.annotation.JsonFormat;\n"); + } + + } + } + return buffer.toString(); + } + +} diff --git a/src/main/java/com/fc/test/util/GenUtils.java b/src/main/java/com/fc/test/util/GenUtils.java index f616c88cf92fe1d1b06e6d57dbfd02cc8adc0143..12c88e5909907f226e897790d3adb5b311e15462 100644 --- a/src/main/java/com/fc/test/util/GenUtils.java +++ b/src/main/java/com/fc/test/util/GenUtils.java @@ -34,6 +34,8 @@ import java.util.zip.ZipOutputStream; * @date 2016年12月19日 下午11:40:24 */ public class GenUtils { + + private GenUtils(){} private static String targetPath = System.getProperty("user.dir"); @@ -72,6 +74,9 @@ public class GenUtils { public static void generatorCode(TsysTables table, List> columns, ZipOutputStream zip,GenVo genVo) { //配置信息 Configuration config = getConfig(); + if (null == config){ + throw new RuntimeException("渲染模板失败,表名:" + table.getTableName()+"\n"+"找不到配置文件"); + } boolean hasBigDecimal = false; //判断主键 boolean pklag=false; @@ -171,14 +176,14 @@ public class GenUtils { file.getParentFile().mkdirs(); if (!file.exists()) file.createNewFile(); + try( FileOutputStream outStream = new FileOutputStream(file); OutputStreamWriter writer = new OutputStreamWriter(outStream,"UTF-8"); - BufferedWriter sw = new BufferedWriter(writer); - tpl.merge(context, sw); - sw.flush(); - sw.close(); - outStream.close(); - System.out.println("成功生成Java文件:"+filepath); + BufferedWriter sw = new BufferedWriter(writer)) { + tpl.merge(context, sw); + sw.flush(); + System.out.println("成功生成Java文件:" + filepath); + } }else {//把sql文件单独处理 if(template.contains("menu.sql.vm")||template.contains("说明.txt.vm")) { StringWriter sw = new StringWriter();