package com.highdatas.mdm.controller;
|
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.highdatas.mdm.entity.SysAssemble;
|
import com.highdatas.mdm.entity.SysAssembleDb;
|
import com.highdatas.mdm.entity.SysAssembleDbField;
|
import com.highdatas.mdm.entity.SysAssembleDbTable;
|
import com.highdatas.mdm.pojo.CodeMsg;
|
import com.highdatas.mdm.pojo.Result;
|
import com.highdatas.mdm.service.ISysAssembleDbFieldService;
|
import com.highdatas.mdm.service.ISysAssembleDbService;
|
import com.highdatas.mdm.service.ISysAssembleDbTableService;
|
import com.highdatas.mdm.service.ISysAssembleService;
|
import com.highdatas.mdm.util.Constant;
|
import com.highdatas.mdm.util.DbUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.sql.Connection;
|
import java.sql.DatabaseMetaData;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author kimi
|
* @since 2020-02-19
|
*/
|
@RestController
|
@RequestMapping("/assemble/db")
|
public class SysAssembleDbController {
|
@Autowired
|
ISysAssembleDbService dbService;
|
@Autowired
|
ISysAssembleDbTableService dbTableService;
|
@Autowired
|
ISysAssembleDbFieldService dbFieldService;
|
|
@Autowired
|
ISysAssembleService assembleService;
|
|
|
@RequestMapping(value = "/get/parent/{id}", method = RequestMethod.GET)
|
public Result get(@PathVariable String id, HttpServletRequest request) {
|
SysAssemble assemble = assembleService.selectById(id);
|
if (assemble == null) {
|
return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
|
}
|
//未分页 看需求 cnt
|
|
Wrapper<SysAssembleDb> parentWrapper = new EntityWrapper<SysAssembleDb>().eq(Constant.PARENT_ID, id);
|
List<SysAssembleDb> sysAssembleDbs = dbService.selectList(parentWrapper);
|
ArrayList<JSONObject> result = new ArrayList<>();
|
for (SysAssembleDb sysAssembleDb : sysAssembleDbs) {
|
JSONObject o = (JSONObject) JSON.toJSON(sysAssembleDb);
|
String dbId = sysAssembleDb.getId();
|
Wrapper<SysAssembleDbTable> eq = new EntityWrapper<SysAssembleDbTable>().eq(Constant.PARENT_ID, dbId);
|
int i = dbTableService.selectCount(eq);
|
o.fluentPut("cnt", i);
|
o.fluentPut("type", "db");
|
result.add(o);
|
}
|
return Result.success(result);
|
|
}
|
|
@RequestMapping(value = "/testConnection/{id}", method = RequestMethod.GET)
|
public Result testConnection(@PathVariable String id, HttpServletRequest request) {
|
boolean b = dbService.testConnection(id);
|
return Result.success(b);
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/testConnection", method = RequestMethod.POST)
|
public Result testConnection(@RequestBody SysAssembleDb sysAssembleDb) {
|
if (sysAssembleDb == null) {
|
return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
|
}
|
boolean b = dbService.testConnection(sysAssembleDb);
|
return Result.success(b);
|
}
|
|
@RequestMapping(value = "/getSet", method = RequestMethod.GET)
|
public Result getSet(HttpServletRequest request) {
|
List<SysAssembleDb> dbList = dbService.selectList(null);
|
HashSet<String> result = new HashSet<>();
|
for (SysAssembleDb sysAssembleDb : dbList) {
|
result.add(sysAssembleDb.getDatasourceName());
|
}
|
return Result.success(result);
|
}
|
|
|
|
@RequestMapping(value = "/getTableList/{id}", method = RequestMethod.GET)
|
public Result getTable(@PathVariable String id, HttpServletRequest request) {
|
Connection connection = null;
|
try {
|
SysAssembleDb sysAssembleDb = dbService.selectById(id);
|
String username = sysAssembleDb.getDatasourceUser();
|
connection = dbService.getConnection(id);
|
DatabaseMetaData metaData = connection.getMetaData();
|
ResultSet tables = metaData.getTables( null, username.toUpperCase(), null, new String[]{ "TABLE" } );
|
ArrayList<String> tableNameList = new ArrayList<>();
|
while (tables.next()) {
|
String tableName = tables.getString(Constant.TABLE_NAME);
|
tableNameList.add(tableName);
|
}
|
List<SysAssembleDbTable> tableList = dbTableService.selectList(new EntityWrapper<SysAssembleDbTable>().eq(Constant.PARENT_ID, id));
|
List<String> selectedTableNameList = tableList.stream().map(sysAssembleDbTable -> sysAssembleDbTable.getTableName()).collect(Collectors.toList());
|
|
List<String> result = tableNameList.stream().filter(s -> !selectedTableNameList.contains(s)).collect(Collectors.toList());
|
|
|
return Result.success(result);
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
return Result.error(new CodeMsg(6003, e.getMessage()));
|
}
|
finally {
|
if (connection != null) {
|
try {
|
connection.close();
|
} catch (SQLException e) {
|
e.printStackTrace();
|
return Result.error(new CodeMsg(6003, e.getMessage()));
|
}
|
}
|
}
|
}
|
|
|
@RequestMapping(value = "/getFields/{id}", method = RequestMethod.GET)
|
public Result getFields(@PathVariable String id, @RequestParam String tableName, HttpServletRequest request) {
|
List<String> fieldsByTableName = dbService.getFieldsByTableName(id, tableName);
|
if (fieldsByTableName == null){
|
return Result.error(new CodeMsg(6008, "获取字段失败"));
|
}
|
return Result.success(fieldsByTableName);
|
}
|
|
|
@Transactional(rollbackFor=Exception.class)
|
@RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
|
public Result delete(@PathVariable String id) {
|
SysAssembleDb sysAssembleDb = dbService.selectById(id);
|
if (sysAssembleDb == null) {
|
return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
|
}
|
// delete tables;
|
Wrapper<SysAssembleDbTable> tablesWrapper = new EntityWrapper<SysAssembleDbTable>().eq("parent_id", id);
|
List<SysAssembleDbTable> sysAssembleDbTables = dbTableService.selectList(tablesWrapper);
|
for (SysAssembleDbTable dbTable : sysAssembleDbTables) {
|
String tableId = dbTable.getId();
|
boolean delete = dbFieldService.delete(new EntityWrapper<SysAssembleDbField>().eq("parent_id", tableId));
|
if (delete) {
|
delete = dbTable.deleteById();
|
if (!delete) {
|
return Result.error(CodeMsg.DELETE_ERROR);
|
}
|
}else {
|
return Result.error(CodeMsg.DELETE_ERROR);
|
}
|
}
|
boolean delete = sysAssembleDb.deleteById();
|
|
if (delete) {
|
return Result.success(sysAssembleDb);
|
}else {
|
return Result.error(CodeMsg.UPDATE_ERROR);
|
}
|
}
|
|
|
@ResponseBody
|
@RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST)
|
public Result addOne(@RequestBody SysAssembleDb sysAssembleDb) {
|
if (sysAssembleDb == null) {
|
return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
|
}
|
if (StringUtils.isEmpty(sysAssembleDb.getId())) {
|
sysAssembleDb.setId(DbUtils.getUUID()).setCreateTime(new Date());
|
}
|
sysAssembleDb.setUpdateTime(new Date());
|
boolean update = sysAssembleDb.insertOrUpdate();
|
if (update) {
|
return Result.success(sysAssembleDb);
|
}else {
|
return Result.error(CodeMsg.UPDATE_ERROR);
|
}
|
}
|
}
|