/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有,侵权必究!
*/
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 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 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();
}
}