mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 10:57:13 +08:00 
			
		
		
		
	feat: 新增系统工具模块(存放系统工具模块相关功能,例如:代码生成、文件管理等)
This commit is contained in:
		| @@ -0,0 +1,42 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.model.query; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
|  | ||||
| /** | ||||
|  * 表信息查询条件 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/12 20:21 | ||||
|  */ | ||||
| @Data | ||||
| @Schema(description = "表信息查询条件") | ||||
| public class TableQuery implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 表名称 | ||||
|      */ | ||||
|     @Schema(description = "表名称") | ||||
|     private String tableName; | ||||
| } | ||||
| @@ -0,0 +1,69 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.model.vo; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.experimental.Accessors; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
|  | ||||
| /** | ||||
|  * 表信息 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/12 20:21 | ||||
|  */ | ||||
| @Data | ||||
| @Accessors(chain = true) | ||||
| @Schema(description = "表信息") | ||||
| public class TableVO implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 表名称 | ||||
|      */ | ||||
|     @Schema(description = "表名称") | ||||
|     private String tableName; | ||||
|  | ||||
|     /** | ||||
|      * 注释 | ||||
|      */ | ||||
|     @Schema(description = "注释") | ||||
|     private String comment; | ||||
|  | ||||
|     /** | ||||
|      * 存储引擎 | ||||
|      */ | ||||
|     @Schema(description = "存储引擎") | ||||
|     private String engine; | ||||
|  | ||||
|     /** | ||||
|      * 字符集 | ||||
|      */ | ||||
|     @Schema(description = "字符集") | ||||
|     private String charset; | ||||
|  | ||||
|     /** | ||||
|      * 创建时间 | ||||
|      */ | ||||
|     @Schema(description = "创建时间") | ||||
|     private LocalDateTime createTime; | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.service; | ||||
|  | ||||
| import java.sql.SQLException; | ||||
|  | ||||
| import top.charles7c.cnadmin.common.model.query.PageQuery; | ||||
| import top.charles7c.cnadmin.common.model.vo.PageDataVO; | ||||
| import top.charles7c.cnadmin.tool.model.query.TableQuery; | ||||
| import top.charles7c.cnadmin.tool.model.vo.TableVO; | ||||
|  | ||||
| /** | ||||
|  * 代码生成业务接口 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/12 23:57 | ||||
|  */ | ||||
| public interface GeneratorService { | ||||
|  | ||||
|     /** | ||||
|      * 分页查询列表 | ||||
|      * | ||||
|      * @param query | ||||
|      *            查询条件 | ||||
|      * @param pageQuery | ||||
|      *            分页查询条件 | ||||
|      * @return 分页列表信息 | ||||
|      */ | ||||
|     PageDataVO<TableVO> pageTable(TableQuery query, PageQuery pageQuery) throws SQLException; | ||||
| } | ||||
| @@ -0,0 +1,65 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.service.impl; | ||||
|  | ||||
| import java.sql.SQLException; | ||||
| import java.util.List; | ||||
|  | ||||
| import javax.sql.DataSource; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
|  | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import cn.hutool.core.bean.BeanUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
|  | ||||
| import top.charles7c.cnadmin.common.model.query.PageQuery; | ||||
| import top.charles7c.cnadmin.common.model.vo.PageDataVO; | ||||
| import top.charles7c.cnadmin.tool.model.query.TableQuery; | ||||
| import top.charles7c.cnadmin.tool.model.vo.TableVO; | ||||
| import top.charles7c.cnadmin.tool.service.GeneratorService; | ||||
| import top.charles7c.cnadmin.tool.util.MetaUtils; | ||||
| import top.charles7c.cnadmin.tool.util.Table; | ||||
|  | ||||
| /** | ||||
|  * 代码生成业务实现 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/12 23:58 | ||||
|  */ | ||||
| @Slf4j | ||||
| @Service | ||||
| @RequiredArgsConstructor | ||||
| public class GeneratorServiceImpl implements GeneratorService { | ||||
|  | ||||
|     private final DataSource dataSource; | ||||
|  | ||||
|     @Override | ||||
|     public PageDataVO<TableVO> pageTable(TableQuery query, PageQuery pageQuery) throws SQLException { | ||||
|         List<Table> tableList = MetaUtils.getTables(dataSource); | ||||
|         String tableName = query.getTableName(); | ||||
|         if (StrUtil.isNotBlank(tableName)) { | ||||
|             tableList.removeIf(table -> !StrUtil.containsAny(table.getTableName(), tableName)); | ||||
|         } | ||||
|         tableList | ||||
|             .removeIf(table -> StrUtil.equalsAny(table.getTableName(), "DATABASECHANGELOG", "DATABASECHANGELOGLOCK")); | ||||
|         List<TableVO> tableVOList = BeanUtil.copyToList(tableList, TableVO.class); | ||||
|         return PageDataVO.build(pageQuery.getPage(), pageQuery.getSize(), tableVOList); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.util; | ||||
|  | ||||
| import java.sql.*; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| import javax.sql.DataSource; | ||||
|  | ||||
| import lombok.AccessLevel; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import cn.hutool.db.Db; | ||||
| import cn.hutool.db.Entity; | ||||
|  | ||||
| /** | ||||
|  * 数据库元数据信息工具类 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/26 21:39 | ||||
|  */ | ||||
| @NoArgsConstructor(access = AccessLevel.PRIVATE) | ||||
| public class MetaUtils { | ||||
|  | ||||
|     /** | ||||
|      * 获取所有表信息 | ||||
|      * | ||||
|      * @param dataSource | ||||
|      *            数据源 | ||||
|      * @return 表信息列表 | ||||
|      */ | ||||
|     public static List<Table> getTables(DataSource dataSource) throws SQLException { | ||||
|         List<Entity> tableEntityList = Db.use(dataSource).query("SHOW TABLE STATUS"); | ||||
|         List<Table> tableList = new ArrayList<>(tableEntityList.size()); | ||||
|         for (Entity tableEntity : tableEntityList) { | ||||
|             Table table = new Table(tableEntity.getStr("NAME")); | ||||
|             table.setComment(tableEntity.getStr("COMMENT")); | ||||
|             table.setEngine(tableEntity.getStr("ENGINE")); | ||||
|             table.setCharset(tableEntity.getStr("COLLATION")); | ||||
|             table.setCreateTime(DateUtil.toLocalDateTime(tableEntity.getDate("CREATE_TIME"))); | ||||
|             table.setUpdateTime(DateUtil.toLocalDateTime(tableEntity.getDate("UPDATE_TIME"))); | ||||
|             tableList.add(table); | ||||
|         } | ||||
|         return tableList; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,70 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| package top.charles7c.cnadmin.tool.util; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import lombok.Getter; | ||||
| import lombok.Setter; | ||||
|  | ||||
| /** | ||||
|  * 数据库表信息 | ||||
|  * | ||||
|  * @author Charles7c | ||||
|  * @since 2023/4/26 21:41 | ||||
|  */ | ||||
| @Getter | ||||
| @Setter | ||||
| public class Table implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 表名称 | ||||
|      */ | ||||
|     private String tableName; | ||||
|  | ||||
|     /** | ||||
|      * 注释 | ||||
|      */ | ||||
|     private String comment; | ||||
|  | ||||
|     /** | ||||
|      * 存储引擎 | ||||
|      */ | ||||
|     private String engine; | ||||
|  | ||||
|     /** | ||||
|      * 字符集 | ||||
|      */ | ||||
|     private String charset; | ||||
|  | ||||
|     /** | ||||
|      * 创建时间 | ||||
|      */ | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
|     /** | ||||
|      * 修改时间 | ||||
|      */ | ||||
|     private LocalDateTime updateTime; | ||||
|  | ||||
|     public Table(String tableName) { | ||||
|         this.tableName = tableName; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user