From e2553b34ac137f6b9ca65534c4e7839fea0d99b8 Mon Sep 17 00:00:00 2001 From: litao Date: Thu, 16 Feb 2023 09:39:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A1=AB=E5=86=99=E5=B7=A5=E5=8D=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/CustomCellWriteHandler.java | 55 +++ .../context/CustomSheetWriteHandler.java | 93 +++++ .../controller/DataBaseController.java | 339 ++++++++++++------ .../operation/database/entity/DataBase.java | 11 - .../operation/database/entity/DataTable.java | 62 ++++ .../database/excel/UploadReturn.java | 17 + .../database/mapper/DataTableMapper.java | 14 + .../database/mapper/DataTableMapper.xml | 6 + .../database/service/IDataTableService.java | 14 + .../service/impl/DataTableServiceImpl.java | 22 ++ .../controller/ModuleInfoController.java | 8 +- .../controller/ProjectInfoController.java | 85 +++++ .../task/controller/TaskInfoController.java | 18 +- .../task/entity/TaskAndDataBase.java | 13 + .../system/controller/DeptController.java | 8 +- .../springblade/system/util/SqlBackup.java | 2 +- .../user/controller/UserController.java | 68 ++-- 17 files changed, 657 insertions(+), 178 deletions(-) create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomCellWriteHandler.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/excel/UploadReturn.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/entity/TaskAndDataBase.java diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomCellWriteHandler.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomCellWriteHandler.java new file mode 100644 index 0000000..91a9c66 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomCellWriteHandler.java @@ -0,0 +1,55 @@ +package org.springblade.plugin.operation.database.context; + +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.common.usermodel.HyperlinkType; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Hyperlink; +import org.apache.poi.ss.usermodel.Row; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 自定义拦截器。对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel + * + * @author + */ +@Slf4j +public class CustomCellWriteHandler implements CellWriteHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class); + + @Override + public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + // 这里可以对cell进行任何操作 + LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex()); + if (isHead && cell.getColumnIndex() == 0) { + CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper(); + Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL); + hyperlink.setAddress("https://github.com/alibaba/easyexcel"); + cell.setHyperlink(hyperlink); + } + } +} \ No newline at end of file diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java new file mode 100644 index 0000000..5ded004 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java @@ -0,0 +1,93 @@ +package org.springblade.plugin.operation.database.context; + +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; +import com.alibaba.nacos.common.utils.CollectionUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springblade.plugin.operation.database.utils.UserAndDept; +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; +import org.springblade.system.user.feign.IUserClient; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +/** + * 自定义拦截器.对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2 + * @author + */ +@Slf4j +public class CustomSheetWriteHandler implements SheetWriteHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(CustomSheetWriteHandler.class); + + @Override + public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + + } + + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + LOGGER.info("第{}个Sheet写入成功。", writeSheetHolder.getSheetNo()); + + // 数据库类型 + List dictBizList = DictBizCache.getList("database_type"); + List names = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(dictBizList)) { + for (DictBiz dictBiz : dictBizList) { + if (!"-1".equals(dictBiz.getDictKey())) { + names.add(dictBiz.getDictValue()); + } + } + } + // 区间设置 第一列第一行和第二行的数据。由于第一行是头,所以第一、二行的数据实际上是第二三行 + CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 100, 3, 3); + DataValidationHelper helper = writeSheetHolder.getSheet().getDataValidationHelper(); + DataValidationConstraint constraint = helper.createExplicitListConstraint(names.stream().toArray(String[]::new)); + DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList); + + // 部门 +// List depts = sysClient.getDepts().getData(); + List depts = UserAndDept.depts(); + List deptNames = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(depts)) { + for (Dept dept : depts) { + deptNames.add(dept.getDeptName()); + } + } + CellRangeAddressList cellRangeAddressList1 = new CellRangeAddressList(1, 100, 7, 7); + DataValidationHelper helper1 = writeSheetHolder.getSheet().getDataValidationHelper(); + DataValidationConstraint constraint1 = helper1.createExplicitListConstraint(deptNames.stream().toArray(String[]::new)); + DataValidation dataValidation1 = helper1.createValidation(constraint1, cellRangeAddressList1); + + // 运维公司 +// List userList = userClient.listRolebyId("运维公司").getData(); + List userList = UserAndDept.users(); + if (CollectionUtils.isNotEmpty(userList)) { + List userNames = new ArrayList<>(); + for (User user : userList) { + userNames.add(user.getRealName()); + } + CellRangeAddressList cellRangeAddressList2 = new CellRangeAddressList(1, 100, 8, 8); + DataValidationHelper helper2 = writeSheetHolder.getSheet().getDataValidationHelper(); + DataValidationConstraint constraint2 = helper2.createExplicitListConstraint(userNames.stream().toArray(String[]::new)); + DataValidation dataValidation2 = helper2.createValidation(constraint2, cellRangeAddressList2); + writeSheetHolder.getSheet().addValidationData(dataValidation2); + } + + writeSheetHolder.getSheet().addValidationData(dataValidation); + writeSheetHolder.getSheet().addValidationData(dataValidation1); + + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java index f5fc6f2..2dd371e 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java @@ -3,6 +3,7 @@ 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.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; @@ -24,22 +25,32 @@ import org.springblade.core.tool.utils.Func; import org.springblade.plugin.operation.database.context.CustomCellWriteHandler; import org.springblade.plugin.operation.database.context.CustomSheetWriteHandler; 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.excel.UploadReturn; 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.entity.DictBiz; +import org.springblade.system.feign.ISysClient; +import org.springblade.system.user.entity.User; +import org.springblade.system.user.feign.IUserClient; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.*; import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; /** - * * */ @NonDS @@ -49,112 +60,222 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; @Api(value = "接口权限", tags = "接口权限") public class DataBaseController extends BladeController { - private final IDataBaseService dataBaseService; - - /** - * 详情 - */ - @GetMapping("/detail") - @ApiOperationSupport(order = 1) - @ApiOperation(value = "详情", notes = "传入dataScope") - public R detail(DataBase dataBase) { - DataBase detail = dataBaseService.getOne(Condition.getQueryWrapper(dataBase)); - return R.data(detail); - } - - /** - * 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @ApiOperation(value = "分页", notes = "传入dataScope") - public R> list(DataBase dataBase, Query query) { - IPage pages = dataBaseService.page(Condition.getPage(query), Condition.getQueryWrapper(dataBase)); - return R.data(pages); - } - - /** - * 新增 - */ - @PostMapping("/save") - @ApiOperationSupport(order = 3) - @ApiOperation(value = "新增", notes = "传入dataScope") - public R save(@Valid @RequestBody DataBase dataBase) { - return R.status(dataBaseService.save(dataBase)); - } - - /** - * 修改 - */ - @PostMapping("/update") - @ApiOperationSupport(order = 4) - @ApiOperation(value = "修改", notes = "传入dataScope") - public R update(@Valid @RequestBody DataBase dataBase) { - return R.status(dataBaseService.updateById(dataBase)); - } - - /** - * 新增或修改 - */ - @PostMapping("/submit") - @ApiOperationSupport(order = 5) - @ApiOperation(value = "新增或修改", notes = "传入dataScope") - public R submit(@Valid @RequestBody DataBase dataBase) { - return R.status(dataBaseService.saveOrUpdate(dataBase)); - } - - /** - * 删除 - */ - @PostMapping("/remove") - @ApiOperationSupport(order = 6) - @ApiOperation(value = "逻辑删除", notes = "传入ids") - public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { - return R.status(dataBaseService.deleteLogic(Func.toLongList(ids))); - } - - /** - * excel导入 - */ - @PostMapping("dataImport") - public R importUser(MultipartFile file) { - List excelList = ExcelUtil.read(file, DatabaseExcel.class); - if (CollectionUtils.isNotEmpty(excelList)) { - List dataBaseList = new ArrayList<>(); - excelList.forEach(item->{ - DataBase dataBase = BeanUtil.copy(item, DataBase.class); - dataBaseList.add(dataBase); - }); - dataBaseService.saveBatch(dataBaseList); - } - return R.success("操作成功"); - } - - /** - * excel导出模板 - */ - @GetMapping("exportTemplate") - public void exportUser(HttpServletResponse response) { - List excels = new ArrayList<>(); - DatabaseExcel excel = new DatabaseExcel(); -// excel.setDataBaseIp("127.0.0.1"); -// excel.setDataBasePort("1000"); -// excel.setDataBaseName("work_order"); -// excel.setDataBaseType("mysql"); -// excel.setDataBaseAlias("工单数据库"); -// excel.setSystemName("工单系统"); -// excel.setSystemModuleName("数据运维"); -// excel.setDeptId("数据科"); -// excel.setCompany("A公司"); -// excel.setDataTableName("t_task_info"); -// excel.setDataTableAlias("任务种类"); - excels.add(excel); + private final IDataBaseService dataBaseService; + + private final IDataTableService dataTableService; + + private final ISysClient sysClient; + + private final IUserClient userClient; + + /** + * 分页 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入dataScope") + public R> list(DataTable dataTable, Query query) { + IPage pages = dataTableService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(dataTable)); + List 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(table.getDeptId()).getData()); + table.setCompanyName(userClient.userInfoById(table.getCompany()).getData().getRealName()); + } + pages.setRecords(dataTableList); + } + return R.data(pages); + } + + /** + * 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "新增", notes = "传入dataScope") + public R save(@Valid @RequestBody DataBase dataBase) { + return R.status(dataBaseService.save(dataBase)); + } + + /** + * 修改 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "修改", notes = "传入dataScope") + public R update(@Valid @RequestBody DataBase dataBase) { + return R.status(dataBaseService.updateById(dataBase)); + } + + /** + * 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 6) + @ApiOperation(value = "逻辑删除", notes = "传入ids") + public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { + return R.status(dataBaseService.deleteLogic(Func.toLongList(ids))); + } + + /** + * excel导入 + */ + @PostMapping("/dataImport") + public R importUser(MultipartFile file) { + List excelList = ExcelUtil.read(file, DatabaseExcel.class); + if (CollectionUtils.isNotEmpty(excelList)) { + List dataBaseList = new ArrayList<>(); + List 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("操作成功"); + } + + /** + * excel导出模板 + */ + @GetMapping("/exportTemplate") + public void exportUser(HttpServletResponse response) { + List excels = new ArrayList<>(); + DatabaseExcel excel = new DatabaseExcel(); + excel.setDataBaseIp("127.0.0.1"); + excel.setDataBasePort("1000"); + excel.setDataBaseName("work_order"); + excel.setDataBaseAlias("工单数据库"); + excel.setSystemName("工单系统"); + excel.setSystemModuleName("数据运维"); + excel.setDataTableName("t_task_info"); + excel.setDataTableAlias("任务种类"); + excels.add(excel); // ExcelUtil.export(response, "数据库数据" + DateUtil.time(), "数据库数据", excels, DatabaseExcel.class); - String fileName = "D:\\test\\" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DatabaseExcel.class).registerWriteHandler(new CustomSheetWriteHandler()) - .registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(excels); + String fileName = "D:\\test\\" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DatabaseExcel.class).registerWriteHandler(new CustomSheetWriteHandler()) + .registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(excels); + download(fileName, response); + } + + /** + * 文件上传 + */ + @PostMapping("/upload") + public R upload(MultipartFile file) { + // 1、获取文件的原始文件名, 通过原始文件名获取文件后缀 例如:abc.jpg + String originalFilename = file.getOriginalFilename(); + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); + + // 2、使用UUID重新生成文件名,防止文件名称重复造成文件覆盖 + String fileName = UUID.randomUUID().toString() + suffix; + + // 3、创建一个目录对象 + String basePath = "D://用户签名//"; + File dir = new File(basePath); + //判断当前目录是否存在 + if (!dir.exists()) { + //目录不存在,需要创建 + dir.mkdirs(); + } + + try { + // 4、将临时文件转存到指定位置 + file.transferTo(new File(basePath + fileName)); + } catch (IOException e) { + e.printStackTrace(); + } + UploadReturn uploadReturn = new UploadReturn(); + uploadReturn.setName(originalFilename); + uploadReturn.setPath(basePath + fileName); + uploadReturn.setCreateUser(AuthUtil.getNickName()); + uploadReturn.setCreateTime(new Date()); + return R.data(uploadReturn); + } + + + /** + * 查看文件 + */ + @GetMapping("/download") + public void download(String path, HttpServletResponse resp) { +// CtglPlaninfo ctglPlaninfo = ctglPlaninfoMapper.queryRecord(fid); +// String fapath = "//" + ctglPlaninfo.getFapath(); + // 通过id 查询 数据表 地址 + //获取配置文件地址 + // 文件地址 = 配置文件地址+数据表地址 +// File file = new File(path); +// if (!file.exists()) { +// try { +// file.mkdirs(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + File file2 = new File(path); + //获取文件名 + String[] split = path.split("//"); + String fileName = split[split.length - 1]; +// String[] split1 = fileName.split("."); +// String s = split1[0]; + + if (file2.exists()) { + FileInputStream in = null; + HttpServletResponse response = resp; + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + + try { + in = new FileInputStream(path); + byte[] a = new byte[1024]; + int b; + while ((b = in.read(a)) != -1) { + response.getOutputStream().write(a, 0, b); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != in) { + try { + in.close(); + } catch (IOException e2) { + System.out.println("关闭输入流错误"); + } + try { + response.getOutputStream().close(); + } catch (IOException e) { + System.out.println("输出流关闭错误"); + } + } + } + } else { + try { + resp.getWriter().println("查不到文件"); + } catch (IOException e) { + System.out.println("resp返回前端信息异常"); + } + + } + } - } } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java index 30b063e..79c2d96 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java @@ -47,15 +47,4 @@ public class DataBase extends TenantEntity { */ private String systemName; - /** - * 管理部门id - */ - private Long deptId; - - /** - * 运维公司id - */ - private Long company; - - } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java index b06b646..a8639ec 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java @@ -1,5 +1,6 @@ package org.springblade.plugin.operation.database.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,6 +13,11 @@ public class DataTable extends TenantEntity { private static final long serialVersionUID = 1L; + /** + * 数据库id + */ + private Long dataBaseId; + /** * 模块名称 */ @@ -27,4 +33,60 @@ public class DataTable extends TenantEntity { */ private String dataTableAlias; + /** + * 管理部门id + */ + private Long deptId; + + /** + * 管理部门 + */ + private String deptName; + + /** + * 运维公司id + */ + private Long company; + + /** + * 运维公司 + */ + private String companyName; + + /** + * 数据库名称 + */ + @TableField(exist = false) + private String dataBaseName; + + /** + * 数据库中文别名 + */ + @TableField(exist = false) + private String dataBaseAlias; + + /** + * 数据库类型 + */ + @TableField(exist = false) + private Integer dataBaseType; + + /** + * 数据库ip + */ + @TableField(exist = false) + private String dataBaseIp; + + /** + * 数据库端口 + */ + @TableField(exist = false) + private String dataBasePort; + + /** + * 系统名称 + */ + @TableField(exist = false) + private String systemName; + } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/excel/UploadReturn.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/excel/UploadReturn.java new file mode 100644 index 0000000..b5d049c --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/excel/UploadReturn.java @@ -0,0 +1,17 @@ +package org.springblade.plugin.operation.database.excel; + +import lombok.Data; + +import java.util.Date; + +@Data +public class UploadReturn { + + private String name; + + private String path; + + private String createUser; + + private Date createTime; +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java new file mode 100644 index 0000000..fb59df4 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java @@ -0,0 +1,14 @@ + +package org.springblade.plugin.operation.database.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.plugin.operation.database.entity.DataTable; + +/** + * Mapper 接口 + * + * @author BladeX + */ +public interface DataTableMapper extends BaseMapper { + +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml new file mode 100644 index 0000000..dd27d1a --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java new file mode 100644 index 0000000..c460b46 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java @@ -0,0 +1,14 @@ + +package org.springblade.plugin.operation.database.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.plugin.operation.database.entity.DataTable; + +/** + * 服务类 + * + * @author BladeX + */ +public interface IDataTableService extends BaseService { + +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java new file mode 100644 index 0000000..e2b6bcb --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java @@ -0,0 +1,22 @@ + +package org.springblade.plugin.operation.database.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +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.springframework.stereotype.Service; + +/** + * 服务实现类 + * + * @author BladeX + */ +@Service +public class DataTableServiceImpl extends BaseServiceImpl implements IDataTableService { + +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ModuleInfoController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ModuleInfoController.java index 6adff32..0d682c1 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ModuleInfoController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ModuleInfoController.java @@ -2,6 +2,7 @@ package org.springblade.plugin.operation.system.controller; 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; @@ -9,6 +10,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; +import org.codehaus.janino.Java; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.mp.support.Condition; @@ -74,13 +76,13 @@ public class ModuleInfoController extends BladeController { @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入dataScope") public R> list(ModuleInfo moduleInfo, Query query) { - IPage pages = moduleInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(moduleInfo)); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(moduleInfo); + wrapper.orderByDesc(ModuleInfo::getCreateTime); + IPage pages = moduleInfoService.page(Condition.getPage(query), wrapper); List infoList = pages.getRecords(); if (CollectionUtils.isNotEmpty(infoList)) { infoList.forEach(item -> { item.setProjectName(projectInfoService.getById(item.getProjectInfoId()).getProjectName()); -// item.setDeptName(sysClient.getDeptName(item.getManageDeptId()).getData()); -// item.setMaintenanceDeptName(userClient.userInfoById(item.getMaintenanceDeptId()).getData().getRealName()); item.setCreateName(userClient.userInfoById(item.getCreateUser()).getData().getRealName()); }); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java index e9e7478..10fc958 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java @@ -1,6 +1,8 @@ package org.springblade.plugin.operation.system.controller; +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; @@ -15,14 +17,22 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.plugin.operation.database.entity.DataBase; +import org.springblade.plugin.operation.database.entity.DataTable; +import org.springblade.plugin.operation.database.service.IDataBaseService; +import org.springblade.plugin.operation.database.service.IDataTableService; +import org.springblade.plugin.operation.system.entity.ModuleInfo; import org.springblade.plugin.operation.system.entity.ProjectInfo; +import org.springblade.plugin.operation.system.service.IModuleInfoService; import org.springblade.plugin.operation.system.service.IProjectInfoService; +import org.springblade.plugin.operation.task.entity.TaskAndDataBase; import org.springblade.plugin.operation.task.entity.TaskInfo; import org.springblade.plugin.operation.task.service.ITaskInfoService; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +52,12 @@ public class ProjectInfoController extends BladeController { private final IProjectInfoService projectInfoService; + private final IDataBaseService dataBaseService; + + private final IModuleInfoService moduleInfoService; + + private final IDataTableService dataTableService; + /** * 详情 */ @@ -104,5 +120,74 @@ public class ProjectInfoController extends BladeController { return R.status(projectInfoService.deleteLogic(Func.toLongList(ids))); } + /** + * 组合数据库和系统数据 + */ + @GetMapping("/projectAndDataBase") + public R taskAndDataBase() { + List list = new ArrayList<>(); + // 数据库数据 + List dataBaseList = dataBaseService.list(); + if (CollectionUtils.isNotEmpty(dataBaseList)) { + for (DataBase dataBase : dataBaseList) { + TaskAndDataBase taskAndDataBase = new TaskAndDataBase(); + taskAndDataBase.setId(dataBase.getId()); + taskAndDataBase.setName(dataBase.getSystemName()); + taskAndDataBase.setType(2); + list.add(taskAndDataBase); + } + } + // 系统名称数据 + List projectInfoList = projectInfoService.list(); + if (CollectionUtils.isNotEmpty(projectInfoList)) { + for (ProjectInfo projectInfo : projectInfoList) { + TaskAndDataBase taskAndDataBase = new TaskAndDataBase(); + taskAndDataBase.setId(projectInfo.getId()); + taskAndDataBase.setName(projectInfo.getProjectName()); + taskAndDataBase.setType(1); + list.add(taskAndDataBase); + } + } + return R.data(list); + } + + /** + * 获取系统模块或数据表 + */ + @GetMapping("/moduleAndDataTable") + public R moduleAndDataTable(String id, Integer type) { + List list = new ArrayList<>(); + // 查模块信息 + if (type == 1) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ModuleInfo::getProjectInfoId, id); + List moduleInfoList = moduleInfoService.list(wrapper); + if (CollectionUtils.isNotEmpty(moduleInfoList)) { + for (ModuleInfo moduleInfo : moduleInfoList) { + TaskAndDataBase taskAndDataBase = new TaskAndDataBase(); + taskAndDataBase.setId(moduleInfo.getId()); + taskAndDataBase.setName(moduleInfo.getModuleName()); + list.add(taskAndDataBase); + } + } + return R.data(list); + } + + // 查数据表信息 + else { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DataTable::getDataBaseId, id); + List dataTableList = dataTableService.list(wrapper); + if (CollectionUtils.isNotEmpty(dataTableList)) { + for (DataTable dataTable : dataTableList) { + TaskAndDataBase taskAndDataBase = new TaskAndDataBase(); + taskAndDataBase.setId(dataTable.getId()); + taskAndDataBase.setName(dataTable.getDataTableName()); + list.add(taskAndDataBase); + } + } + return R.data(list); + } + } } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/controller/TaskInfoController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/controller/TaskInfoController.java index d1bc25d..dbd7ae9 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/controller/TaskInfoController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/controller/TaskInfoController.java @@ -1,6 +1,7 @@ package org.springblade.plugin.operation.task.controller; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -21,16 +22,21 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.plugin.operation.database.entity.DataBase; import org.springblade.plugin.operation.database.service.IDataBaseService; +import org.springblade.plugin.operation.system.entity.ProjectInfo; +import org.springblade.plugin.operation.system.service.IProjectInfoService; +import org.springblade.plugin.operation.task.entity.TaskAndDataBase; import org.springblade.plugin.operation.task.entity.TaskInfo; import org.springblade.plugin.operation.task.service.ITaskInfoService; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; + import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; /** - * * */ @NonDS @@ -120,9 +126,15 @@ public class TaskInfoController extends BladeController { * 任务种类去重返回 */ @GetMapping("/taskTypeData") - public R taskTypeData() { + public R taskTypeData(String parentId) { QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.select("DISTINCT task_type_name"); + if (StringUtils.isNotBlank(parentId)) { + wrapper.eq("task_parent_id", parentId); + } else { + wrapper.select("DISTINCT task_type_name"); + } return R.data(taskInfoService.list(wrapper)); } + + } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/entity/TaskAndDataBase.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/entity/TaskAndDataBase.java new file mode 100644 index 0000000..b10156d --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/task/entity/TaskAndDataBase.java @@ -0,0 +1,13 @@ +package org.springblade.plugin.operation.task.entity; + +import lombok.Data; + +@Data +public class TaskAndDataBase { + + private Long id; + + private String name; + + private Integer type; +} diff --git a/lab-service/lab-system/src/main/java/org/springblade/system/controller/DeptController.java b/lab-service/lab-system/src/main/java/org/springblade/system/controller/DeptController.java index 9919ed1..58ca3d7 100644 --- a/lab-service/lab-system/src/main/java/org/springblade/system/controller/DeptController.java +++ b/lab-service/lab-system/src/main/java/org/springblade/system/controller/DeptController.java @@ -166,12 +166,12 @@ public class DeptController extends BladeController { } /** - * 获取所有基地信息 + * 获取运维公司所对应的部门信息 */ - @GetMapping("/getBases") - public R> getBases(Integer type) { + @GetMapping("/getDepts") + public R> getBases(String id) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(Dept::getDeptCategory, type); + wrapper.in(Dept::getId, Func.toLongList(id)); return R.data(deptService.list(wrapper)); } diff --git a/lab-service/lab-system/src/main/java/org/springblade/system/util/SqlBackup.java b/lab-service/lab-system/src/main/java/org/springblade/system/util/SqlBackup.java index c93c304..c037905 100644 --- a/lab-service/lab-system/src/main/java/org/springblade/system/util/SqlBackup.java +++ b/lab-service/lab-system/src/main/java/org/springblade/system/util/SqlBackup.java @@ -35,7 +35,7 @@ public class SqlBackup { /** * 获取数据库名 */ - public static String getDataBaseName(String url) { + public static String getDataBaseName(String url) { return url.substring(url.indexOf("3306"), url.indexOf("?")).replaceAll("/", "").replaceAll("3306", ""); } diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/UserController.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/UserController.java index 2d55d89..164cb67 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/UserController.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/UserController.java @@ -26,6 +26,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringPool; import org.springblade.system.feign.ISysClient; import org.springblade.system.user.entity.User; @@ -100,7 +101,6 @@ public class UserController { /** * 用户列表 */ - @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "account", value = "账号名", paramType = "query", dataType = "string"), @@ -157,22 +157,6 @@ public class UserController { return R.data(UserWrapper.build().pageVO(pages)); } -// @GetMapping("/page") -// public R> newPage(User user, Query query) { -// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(user); -// if (AuthUtil.getUserId() != 1530823299437965313L) { -// wrapper.ne(User::getId, 1530823299437965313L); -// } -// if (user.getDeptId() != null && !"".equals(user.getDeptId())) { -// wrapper.eq(User::getDeptId, user.getDeptId()); -// } -// wrapper.eq(User::getTenantId, AuthUtil.getTenantId()); -// wrapper.orderByDesc(User::getCreateTime); -// IPage page = userService.page(Condition.getPage(query), wrapper); -// return R.data(UserWrapper.build().pageVO(page)); -// } - - /** * 新增或修改 */ @@ -434,37 +418,27 @@ public class UserController { } /** - * 人员统计 + * 运维公司 */ - @GetMapping("/user/statistics") - public R> user() { - Map map = new HashMap<>(); - // 实际人员数量 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(User::getIsDeleted, 0); - wrapper.eq(User::getTenantId, 704067L); - int count = userService.count(wrapper); - // 额定人数 - double rated = 40.00; - double actual = 0.00; - actual += count; - // 满编率 - int rate = 0; - if (rated > 0) { - rate = (int) (actual / rated * 100); + @GetMapping("/maintenanceCompany") + public R> maintenanceCompany() { + BladeUser user = AuthUtil.getUser(); + List users = new ArrayList<>(); + // 判断是否运维公司 + if ("运维公司".equals(user.getRoleName())) { + User byId = userService.getById(user.getUserId()); + users.add(byId); + return R.data(users); + } else { + // 获取运维公司角色id + String roleId = sysClient.getRoleIdByAlias(AuthUtil.getTenantId(), "运维公司").getData(); + + // 查当前操作人部门下的运维公司 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(User::getDeptId, Func.toStrList(user.getDeptId())); + wrapper.eq(User::getRoleId, roleId); + users = userService.list(wrapper); + return R.data(users); } - // 硕士及以上人数 - wrapper.clear(); - wrapper.eq(User::getTenantId, 704067L); - wrapper.eq(User::getEducation, "2"); - int count1 = userService.count(wrapper); - // 硕士以下人数 - int count2 = count - count1; - map.put("rated", 40); - map.put("actual", count); - map.put("rate", rate); - map.put("masterUp", count1); - map.put("masterLo", count2); - return R.data(map); } }