| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * <p> | 
|  * https://www.renren.io | 
|  * <p> | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| package com.zt.generator.controller; | 
|   | 
| import com.alibaba.fastjson.JSONArray; | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.zt.common.constant.Constant; | 
| import com.zt.common.db.constant.OP; | 
| import com.zt.common.exception.RenException; | 
| import com.zt.common.servlet.Result; | 
| import com.zt.generator.model.Config; | 
| import com.zt.generator.data.DBUtil; | 
| import com.zt.generator.data.DataTable; | 
| import com.zt.generator.utils.GenUtils; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiOperation; | 
| import lombok.Data; | 
| import org.apache.shiro.authz.annotation.RequiresPermissions; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import java.io.File; | 
| import java.io.IOException; | 
| import java.io.Serializable; | 
| import java.sql.Connection; | 
| import java.sql.DriverManager; | 
| import java.sql.SQLException; | 
| import java.util.Properties; | 
|   | 
| /** | 
|  * 代码生成器 | 
|  * | 
|  * @author xhb | 
|  */ | 
|   | 
| @RestController | 
| @RequestMapping("/sys/generator") | 
| @Api(tags = "代码生成") | 
| public class SysGeneratorController { | 
|   | 
|     @GetMapping("properties") | 
|     //@RequiresPermissions(Constant.Permissions.SUPER_ADMIN) | 
|     public Result<JSONObject> queryProperties() { | 
|         JSONObject jsonObject = new JSONObject(); | 
|         try { | 
|             File directory = new File("");// 参数为空 | 
|             String courseFile = directory.getCanonicalPath(); | 
|             File root = new File(courseFile); | 
|             JSONArray array = new JSONArray(); | 
|             getSubFiles(root, array); | 
|             jsonObject.put("modules", array); | 
|         } catch (IOException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         JSONArray eqList = new JSONArray(); | 
|         for (OP.Type value : OP.Type.values()) { | 
|             JSONObject json = new JSONObject(); | 
|             json.put("title", value.getTitle()); | 
|             json.put("op", value.getOp()); | 
|             eqList.add(json); | 
|         } | 
|         jsonObject.put("eqList", eqList); | 
|   | 
|         DbProperties jdbc = queryJdbcProperties(); | 
|   | 
|         DataTable table = null; | 
|         Connection conn = null; | 
|         try { | 
|             // 注册数据库驱动 | 
|             Class.forName(jdbc.getDriverClass()); | 
|             Properties props = new Properties(); | 
|             props.put("remarksReporting", "true");// 为了得到说明 | 
|             props.setProperty("user", jdbc.getUserName()); | 
|             props.setProperty("password", jdbc.getPassWord()); | 
|             // 获取连接 | 
|             conn = DriverManager.getConnection(jdbc.getUrl(), props); | 
|             table = DBUtil.getTableList(conn, false); | 
|   | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } finally { | 
|             if (conn != null) { | 
|                 try { | 
|                     conn.close(); | 
|                 } catch (SQLException e) { | 
|                     e.printStackTrace(); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         jsonObject.put("tableList", table.toJSONArray()); | 
|         return Result.ok(jsonObject); | 
|     } | 
|   | 
|     private void getSubFiles(File file, JSONArray array) { | 
|         if (file.isDirectory()) { | 
|             // 获取当前目录下的所有子项 | 
|             File[] subs = file.listFiles(); | 
|             for (File sub : subs) { | 
|                 if (sub.isDirectory() && new File(sub.getPath() + "/pom.xml").exists()) { | 
|                     if (new File(sub.getPath() + "/src").exists()) { | 
|                         JSONObject object = new JSONObject(); | 
|                         object.put("filePath", sub.getPath()); | 
|                         object.put("fileName", sub.getName()); | 
|                         array.add(object); | 
|                     } else { | 
|                         getSubFiles(sub, array); | 
|                     } | 
|                 } | 
|                 if (sub.isDirectory() && new File(sub.getPath() + "/package.json").exists()) { | 
|                     JSONObject object = new JSONObject(); | 
|                     object.put("filePath", sub.getPath()); | 
|                     object.put("fileName", sub.getName()); | 
|                     array.add(object); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     @GetMapping("getTable") | 
|     //@RequiresPermissions(Constant.Permissions.SUPER_ADMIN) | 
|     public Result<JSONArray> tableNameVerification(String tableName) { | 
|         DbProperties jdbc = queryJdbcProperties(); | 
|   | 
|         DataTable table = null; | 
|         Connection conn = null; | 
|         try { | 
|             // 注册数据库驱动 | 
|             Class.forName(jdbc.getDriverClass()); | 
|             Properties props = new Properties(); | 
|             props.put("remarksReporting", "true");// 为了得到说明 | 
|             props.setProperty("user", jdbc.getUserName()); | 
|             props.setProperty("password", jdbc.getPassWord()); | 
|             // 获取连接 | 
|             conn = DriverManager.getConnection(jdbc.getUrl(), props); | 
|   | 
|             if (DBUtil.findTable(conn, tableName)) { | 
|                 table = DBUtil.getColumnInfo(conn, tableName, false); | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } finally { | 
|             if (conn != null) { | 
|                 try { | 
|                     conn.close(); | 
|                 } catch (SQLException e) { | 
|                     e.printStackTrace(); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         if (table != null) { | 
|             JSONArray array = table.toJSONArray(); | 
|             for (int i = 0; i < array.size(); i++) { | 
|                 JSONObject json = array.getJSONObject(i); | 
|                 String columnName = json.getString("columnName"); | 
|                 if ("is_delete,dept_id,company_id,tenant_id,creator,create_date,updater,update_date" | 
|                         .indexOf(columnName.toLowerCase()) >= 0) { | 
|                     json.put("isTableColumn", "false"); | 
|                 } | 
|             } | 
|             return Result.ok(array); | 
|         } else { | 
|             throw new RenException("表不存在!"); | 
|         } | 
|     } | 
|   | 
|     @Value("${spring.datasource.druid.driver-class-name}") | 
|     private String dbDriverName; | 
|     @Value("${spring.datasource.druid.url}") | 
|     private String dbDriverUrl; | 
|     @Value("${spring.datasource.druid.username}") | 
|     private String dbDriverUserName; | 
|     @Value("${spring.datasource.druid.password}") | 
|     private String dbDriverPassword; | 
|   | 
|     private DbProperties queryJdbcProperties() { | 
|         DbProperties jdbc = new DbProperties(); | 
|         String driver = dbDriverName; | 
|         jdbc.setDbName(driver.equals("oracle.jdbc.driver.OracleDriver") ? "ORACLE" : "MYSQL"); | 
|         jdbc.setDriverClass(driver); | 
|         jdbc.setUrl(dbDriverUrl); | 
|         jdbc.setUserName(dbDriverUserName); | 
|         jdbc.setPassWord(dbDriverPassword); | 
|   | 
|         return jdbc; | 
|     } | 
|   | 
|     @Data | 
|     class DbProperties implements Serializable { | 
|         private String dbName; | 
|         private String driverClass; | 
|         private String url; | 
|         private String userName; | 
|         private String passWord; | 
|     } | 
|   | 
|     /** | 
|      * 生成代码 | 
|      */ | 
|     @PostMapping | 
|     @ApiOperation("保存") | 
|     //@RequiresPermissions(Constant.Permissions.SUPER_ADMIN) | 
|     public Result code(@RequestBody Config dto) { | 
|         String isGenService = dto.getChecked(); | 
|   | 
|         GenUtils.generatorCode(dto.getTableName(), isGenService, dto.getClassName(), dto.getIsPageFlag(), | 
|                 dto.getIsExport(), JSONArray.parseArray(dto.getTableData()), dto.getPackName(), dto.getJavaFilePath(), | 
|                 dto.getVueFilePath()); | 
|         return Result.ok(); | 
|     } | 
|   | 
| } |