数据库运维

main
litao 3 years ago
parent 3424f6e6b1
commit 2ac5dc6bde
  1. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java
  2. 106
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java
  3. 12
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java
  4. 4
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java
  5. 8
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java
  6. 52
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml
  7. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataBaseService.java
  8. 6
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java
  9. 70
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataBaseServiceImpl.java
  10. 13
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java
  11. 74
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/vo/DataBaseVO.java
  12. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java
  13. 987
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/controller/WfProcessController.java

@ -77,7 +77,7 @@ public class CustomSheetWriteHandler implements SheetWriteHandler {
if (CollectionUtils.isNotEmpty(userList)) {
List<String> userNames = new ArrayList<>();
for (User user : userList) {
userNames.add(user.getRealName());
userNames.add(user.getName());
}
CellRangeAddressList cellRangeAddressList2 = new CellRangeAddressList(1, 100, 8, 8);
DataValidationHelper helper2 = writeSheetHolder.getSheet().getDataValidationHelper();

@ -4,11 +4,13 @@ package org.springblade.plugin.operation.database.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
@ -30,7 +32,10 @@ import org.springblade.plugin.operation.database.excel.DatabaseExcel;
import org.springblade.plugin.operation.database.excel.UploadReturn;
import org.springblade.plugin.operation.database.service.IDataBaseService;
import org.springblade.plugin.operation.database.service.IDataTableService;
import org.springblade.plugin.operation.database.vo.DataBaseVO;
import org.springblade.plugin.operation.task.entity.TaskInfo;
import org.springblade.system.cache.DictBizCache;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.DictBiz;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.entity.User;
@ -72,25 +77,32 @@ public class DataBaseController extends BladeController {
* 分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "分页", notes = "传入dataScope")
public R<IPage<DataTable>> list(DataTable dataTable, Query query) {
IPage<DataTable> pages = dataTableService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(dataTable));
List<DataTable> dataTableList = pages.getRecords();
public R<IPage<DataBaseVO>> list(DataBase dataBase, Query query) {
IPage<DataBaseVO> pages = dataTableService.pageVO(Condition.getPage(query), dataBase);
List<DataBaseVO> dataTableList = pages.getRecords();
if (CollectionUtils.isNotEmpty(dataTableList)) {
for (DataTable table : dataTableList) {
DataBase dataBase = dataBaseService.getById(table.getDataBaseId());
table.setDataBaseName(dataBase.getDataBaseName());
table.setDataBaseAlias(dataBase.getDataBaseAlias());
table.setDataBaseType(dataBase.getDataBaseType());
table.setDataBaseIp(dataBase.getDataBaseIp());
table.setDataBasePort(dataBase.getDataBasePort());
table.setSystemName(dataBase.getSystemName());
for (DataBaseVO table : dataTableList) {
table.setDeptName(sysClient.getDeptName(table.getDeptId()).getData());
table.setCompanyName(userClient.userInfoById(table.getCompany()).getData().getRealName());
table.setCompanyName(userClient.userInfoById(table.getCompany()).getData().getName());
}
pages.setRecords(dataTableList);
}
// IPage<DataTable> pages = dataTableService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(dataTable));
// List<DataTable> dataTableList = pages.getRecords();
// if (CollectionUtils.isNotEmpty(dataTableList)) {
// for (DataTable table : dataTableList) {
// DataBase dataBase = dataBaseService.getById(table.getDataBaseId());
// table.setDataBaseName(dataBase.getDataBaseName());
// table.setDataBaseAlias(dataBase.getDataBaseAlias());
// table.setDataBaseType(dataBase.getDataBaseType());
// table.setDataBaseIp(dataBase.getDataBaseIp());
// table.setDataBasePort(dataBase.getDataBasePort());
// table.setSystemName(dataBase.getSystemName());
// table.setDeptName(sysClient.getDeptName(dataBase.getDeptId()).getData());
// table.setCompanyName(userClient.userInfoById(dataBase.getCompany()).getData().getName());
// }
// pages.setRecords(dataTableList);
// }
return R.data(pages);
}
@ -128,28 +140,8 @@ public class DataBaseController extends BladeController {
* excel导入
*/
@PostMapping("/dataImport")
public R importUser(MultipartFile file) {
List<DatabaseExcel> excelList = ExcelUtil.read(file, DatabaseExcel.class);
if (CollectionUtils.isNotEmpty(excelList)) {
List<DataBase> dataBaseList = new ArrayList<>();
List<DataTable> dataTableList = new ArrayList<>();
excelList.forEach(item -> {
// String data = sysClient.getDeptIds(AuthUtil.getTenantId(), item.getDeptId()).getData();
// User user = userClient.userInfoByName(AuthUtil.getTenantId(), item.getCompany()).getData();
// 数据库
DataBase dataBase = BeanUtil.copy(item, DataBase.class);
dataBase.setDataBaseType(Integer.parseInt(DictBizCache.getKey("database_type", item.getDataBaseType())));
dataBaseList.add(dataBase);
// 数据表
DataTable dataTable = BeanUtil.copy(item, DataTable.class);
dataTableList.add(dataTable);
});
dataBaseService.saveBatch(dataBaseList);
dataTableService.saveBatch(dataTableList);
}
return R.success("操作成功");
public R dataImport(MultipartFile file) {
return R.status(dataBaseService.dataImport(file));
}
/**
@ -174,7 +166,10 @@ public class DataBaseController extends BladeController {
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, DatabaseExcel.class).registerWriteHandler(new CustomSheetWriteHandler())
.registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(excels);
download(fileName, response);
File file = new File(fileName);
file.delete();
}
/**
@ -212,7 +207,6 @@ public class DataBaseController extends BladeController {
return R.data(uploadReturn);
}
/**
* 查看文件
*/
@ -278,4 +272,42 @@ public class DataBaseController extends BladeController {
}
}
/**
* 列表数据返回
*/
@GetMapping("/listData")
public R listData() {
Map<String, Object> map = new HashMap<>();
// 数据库实例名集合
QueryWrapper<DataBase> wrapper = new QueryWrapper<>();
wrapper.select("DISTINCT data_base_name");
map.put("dataBaseNames", dataBaseService.list(wrapper));
wrapper.clear();
// 运维公司集合
wrapper.select("DISTINCT company");
List<DataBase> dataBases = dataBaseService.list(wrapper);
if (CollectionUtils.isNotEmpty(dataBases)) {
List<User> users = new ArrayList<>();
for (DataBase dataBase : dataBases) {
User user = userClient.userInfoById(dataBase.getCompany()).getData();
users.add(user);
}
map.put("companys", users);
wrapper.clear();
}
// 部门集合
wrapper.select("DISTINCT dept_id");
List<DataBase> depts = dataBaseService.list(wrapper);
if (CollectionUtils.isNotEmpty(depts)) {
List<Dept> deptList = new ArrayList<>();
for (DataBase dataBase : depts) {
Dept dept = sysClient.getDept(dataBase.getDeptId()).getData();
deptList.add(dept);
}
map.put("depts", deptList);
}
return R.data(map);
}
}

@ -47,4 +47,14 @@ public class DataBase extends TenantEntity {
*/
private String systemName;
}
/**
* 管理部门id
*/
private Long deptId;
/**
* 运维公司id
*/
private Long company;
}

@ -36,21 +36,25 @@ public class DataTable extends TenantEntity {
/**
* 管理部门id
*/
@TableField(exist = false)
private Long deptId;
/**
* 管理部门
*/
@TableField(exist = false)
private String deptName;
/**
* 运维公司id
*/
@TableField(exist = false)
private Long company;
/**
* 运维公司
*/
@TableField(exist = false)
private String companyName;
/**

@ -2,7 +2,12 @@
package org.springblade.plugin.operation.database.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springblade.plugin.operation.database.entity.DataBase;
import org.springblade.plugin.operation.database.entity.DataTable;
import org.springblade.plugin.operation.database.vo.DataBaseVO;
import java.util.List;
/**
* Mapper 接口
@ -11,4 +16,7 @@ import org.springblade.plugin.operation.database.entity.DataTable;
*/
public interface DataTableMapper extends BaseMapper<DataTable> {
List<DataBaseVO> page(@Param("dataBase")DataBase dataBase, @Param("current")long current, @Param("size")long size);
long dataCount(@Param("dataBase")DataBase dataBase);
}

@ -3,4 +3,56 @@
<mapper namespace="org.springblade.plugin.operation.database.mapper.DataTableMapper">
<select id="page" resultType="org.springblade.plugin.operation.database.vo.DataBaseVO">
select
b.data_base_ip,
b.data_base_port,
b.data_base_name,
b.data_base_type,
b.data_base_alias,
b.system_name,
t.system_module_name,
b.dept_id,
b.company,
t.data_table_name,
t.data_table_alias
from t_data_base b left join t_data_table t on b.id = t.data_base_id
where t.is_deleted = 0
<if test="dataBase.getDataBaseName!=null and dataBase.getDataBaseName != ''">
and b.data_base_name = #{dataBase.dataBaseName}
</if>
<if test="dataBase.getDataBaseType!=null">
and b.data_base_type = #{dataBase.dataBaseType}
</if>
<if test="dataBase.getDeptId!=null">
and b.dept_id = #{dataBase.deptId}
</if>
<if test="dataBase.getCompany!=null">
and b.company = #{dataBase.company}
</if>
order by t.create_time DESC
LIMIT #{current},#{size}
</select>
<select id="dataCount" resultType="long">
select
count(*)
from t_data_base b left join t_data_table t on b.id = t.data_base_id
where t.is_deleted = 0
<if test="dataBase.getDataBaseName!=null and dataBase.getDataBaseName != ''">
and b.data_base_name = #{dataBase.dataBaseName}
</if>
<if test="dataBase.getDataBaseType!=null">
and b.data_base_type = #{dataBase.dataBaseType}
</if>
<if test="dataBase.getDeptId!=null">
and b.dept_id = #{dataBase.deptId}
</if>
<if test="dataBase.getCompany!=null">
and b.company = #{dataBase.company}
</if>
</select>
</mapper>

@ -3,6 +3,7 @@ package org.springblade.plugin.operation.database.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.plugin.operation.database.entity.DataBase;
import org.springframework.web.multipart.MultipartFile;
/**
* 服务类
@ -11,4 +12,5 @@ import org.springblade.plugin.operation.database.entity.DataBase;
*/
public interface IDataBaseService extends BaseService<DataBase> {
boolean dataImport(MultipartFile file);
}

@ -1,14 +1,20 @@
package org.springblade.plugin.operation.database.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.mp.support.Query;
import org.springblade.plugin.operation.database.entity.DataBase;
import org.springblade.plugin.operation.database.entity.DataTable;
import org.springblade.plugin.operation.database.vo.DataBaseVO;
/**
* 服务类
*
*
* @author BladeX
*/
public interface IDataTableService extends BaseService<DataTable> {
IPage<DataBaseVO> pageVO(IPage<DataBaseVO> page, DataBase dataBase);
}

@ -1,11 +1,30 @@
package org.springblade.plugin.operation.database.service.impl;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.plugin.operation.database.entity.DataBase;
import org.springblade.plugin.operation.database.entity.DataTable;
import org.springblade.plugin.operation.database.excel.DatabaseExcel;
import org.springblade.plugin.operation.database.mapper.DataBaseMapper;
import org.springblade.plugin.operation.database.service.IDataBaseService;
import org.springblade.plugin.operation.database.service.IDataTableService;
import org.springblade.system.cache.DictBizCache;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.feign.IUserClient;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
* 服务实现类
@ -13,6 +32,57 @@ import org.springframework.stereotype.Service;
* @author BladeX
*/
@Service
@AllArgsConstructor
public class DataBaseServiceImpl extends BaseServiceImpl<DataBaseMapper, DataBase> implements IDataBaseService {
private final IDataTableService dataTableService;
private final ISysClient sysClient;
private final IUserClient userClient;
@Override
public boolean dataImport(MultipartFile file) {
List<DatabaseExcel> excelList = ExcelUtil.read(file, DatabaseExcel.class);
if (CollectionUtils.isNotEmpty(excelList)) {
List<DataTable> dataTableList = new ArrayList<>();
excelList.forEach(item -> {
Integer databaseType = Integer.parseInt(DictBizCache.getKey("database_type", item.getDataBaseType()));
LambdaQueryWrapper<DataBase> wrapper = new LambdaQueryWrapper<>();
wrapper.select(DataBase::getId);
wrapper.eq(DataBase::getDataBaseName, item.getDataBaseName());
wrapper.eq(DataBase::getDataBaseType, databaseType);
DataBase base = getOne(wrapper);
if (base == null) {
// 数据库
DataBase dataBase = BeanUtil.copy(item, DataBase.class);
String data = sysClient.getDeptIds(AuthUtil.getTenantId(), item.getDeptId()).getData();
User user = userClient.userInfoByName(AuthUtil.getTenantId(), item.getCompany()).getData();
dataBase.setDataBaseType(databaseType);
dataBase.setDeptId(Long.parseLong(data));
dataBase.setCompany(user.getId());
save(dataBase);
// 数据表
DataTable dataTable = BeanUtil.copy(item, DataTable.class);
dataTable.setDataBaseId(dataBase.getId());
dataTableList.add(dataTable);
} else {
LambdaQueryWrapper<DataTable> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DataTable::getDataBaseId, base.getId());
queryWrapper.eq(DataTable::getDataTableName, item.getDataTableName());
int count = dataTableService.count(queryWrapper);
if (count <= 0) {
// 数据表
DataTable dataTable = BeanUtil.copy(item, DataTable.class);
dataTable.setDataBaseId(base.getId());
dataTableList.add(dataTable);
}
}
});
return dataTableService.saveBatch(dataTableList);
}
return false;
}
}

@ -2,13 +2,13 @@
package org.springblade.plugin.operation.database.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.plugin.operation.database.entity.DataBase;
import org.springblade.plugin.operation.database.entity.DataTable;
import org.springblade.plugin.operation.database.mapper.DataBaseMapper;
import org.springblade.plugin.operation.database.mapper.DataTableMapper;
import org.springblade.plugin.operation.database.service.IDataBaseService;
import org.springblade.plugin.operation.database.service.IDataTableService;
import org.springblade.plugin.operation.database.vo.DataBaseVO;
import org.springframework.stereotype.Service;
/**
@ -17,6 +17,15 @@ import org.springframework.stereotype.Service;
* @author BladeX
*/
@Service
@AllArgsConstructor
public class DataTableServiceImpl extends BaseServiceImpl<DataTableMapper, DataTable> implements IDataTableService {
private final DataTableMapper dataTableMapper;
@Override
public IPage<DataBaseVO> pageVO(IPage<DataBaseVO> page, DataBase dataBase) {
page.setTotal(dataTableMapper.dataCount(dataBase));
return page.setRecords(dataTableMapper.page(dataBase, page.getCurrent(), page.getSize()));
}
}

@ -0,0 +1,74 @@
package org.springblade.plugin.operation.database.vo;
import lombok.Data;
@Data
public class DataBaseVO {
private static final long serialVersionUID = 1L;
/**
* 模块名称
*/
private String systemModuleName;
/**
* 表名称
*/
private String dataTableName;
/**
* 中文别名
*/
private String dataTableAlias;
/**
* 管理部门
*/
private String deptName;
/**
* 运维公司
*/
private String companyName;
/**
* 管理部门id
*/
private Long deptId;
/**
* 运维公司id
*/
private Long company;
/**
* 数据库名称
*/
private String dataBaseName;
/**
* 数据库中文别名
*/
private String dataBaseAlias;
/**
* 数据库类型
*/
private Integer dataBaseType;
/**
* 数据库ip
*/
private String dataBaseIp;
/**
* 数据库端口
*/
private String dataBasePort;
/**
* 系统名称
*/
private String systemName;
}

@ -132,7 +132,7 @@ public class ProjectInfoController extends BladeController {
for (DataBase dataBase : dataBaseList) {
TaskAndDataBase taskAndDataBase = new TaskAndDataBase();
taskAndDataBase.setId(dataBase.getId());
taskAndDataBase.setName(dataBase.getSystemName());
taskAndDataBase.setName(dataBase.getDataBaseName() + "(" + dataBase.getDataBaseIp() + ")");
taskAndDataBase.setType(2);
list.add(taskAndDataBase);
}

Loading…
Cancel
Save