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; /** *

* 前端控制器 *

* * @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 parentWrapper = new EntityWrapper().eq(Constant.PARENT_ID, id); List sysAssembleDbs = dbService.selectList(parentWrapper); ArrayList result = new ArrayList<>(); for (SysAssembleDb sysAssembleDb : sysAssembleDbs) { JSONObject o = (JSONObject) JSON.toJSON(sysAssembleDb); String dbId = sysAssembleDb.getId(); Wrapper eq = new EntityWrapper().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); } @RequestMapping(value = "/getSet", method = RequestMethod.GET) public Result getSet(HttpServletRequest request) { List dbList = dbService.selectList(null); HashSet 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 tableNameList = new ArrayList<>(); while (tables.next()) { String tableName = tables.getString(Constant.TABLE_NAME); tableNameList.add(tableName); } List tableList = dbTableService.selectList(new EntityWrapper().eq(Constant.PARENT_ID, id)); List selectedTableNameList = tableList.stream().map(sysAssembleDbTable -> sysAssembleDbTable.getTableName()).collect(Collectors.toList()); List 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 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 tablesWrapper = new EntityWrapper().eq("parent_id", id); List sysAssembleDbTables = dbTableService.selectList(tablesWrapper); for (SysAssembleDbTable dbTable : sysAssembleDbTables) { String tableId = dbTable.getId(); boolean delete = dbFieldService.delete(new EntityWrapper().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); } } }