diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index d0af381a..96557e53 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -16,9 +16,9 @@ spring: master: type: ${spring.datasource.type} driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + url: jdbc:mysql://47.112.190.27:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: ruoyi-ai - password: ruoyi-ai + password: Hp3fMaFNWrTijiZH hikari: # 最大连接池数量 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 80479702..d13c75ce 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -133,6 +133,10 @@ security: - /chat/send # 文件上传 - /chat/upload + # 数据模型分组选择接口 + - /dev/schemaGroup/select + # 代码生成调用 + - /dev/schemaField/getByTableName # 静态资源 - /*.html - /**/*.html @@ -185,7 +189,7 @@ mybatis-plus: # 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl # 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl # 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl - logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl + logImpl: org.apache.ibatis.logging.slf4j.Slf4jImpl global-config: # 是否打印 Logo banner banner: true diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/config/GenConfig.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/config/GenConfig.java index 5530313d..6cc55947 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/config/GenConfig.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/config/GenConfig.java @@ -53,19 +53,11 @@ public class GenConfig { GenConfig.packageName = packageName; } - public static boolean getAutoRemovePre() { - return autoRemovePre; - } - @Value("${autoRemovePre}") public void setAutoRemovePre(boolean autoRemovePre) { GenConfig.autoRemovePre = autoRemovePre; } - public static String getTablePrefix() { - return tablePrefix; - } - @Value("${tablePrefix}") public void setTablePrefix(String tablePrefix) { GenConfig.tablePrefix = tablePrefix; diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/constant/GenConstants.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/constant/GenConstants.java index c3d2b1fe..07ee15a6 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/constant/GenConstants.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/constant/GenConstants.java @@ -36,73 +36,12 @@ public interface GenConstants { */ String PARENT_MENU_ID = "parentMenuId"; - /** - * 上级菜单名称字段 - */ - String PARENT_MENU_NAME = "parentMenuName"; - - /** - * 数据库字符串类型 - */ - String[] COLUMNTYPE_STR = {"char", "varchar", "enum", "set", "nchar", "nvarchar", "varchar2", "nvarchar2"}; - - /** - * 数据库文本类型 - */ - String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext", "binary", "varbinary", "blob", - "ntext", "image", "bytea"}; - - /** - * 数据库时间类型 - */ - String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp", "year", "interval", - "smalldatetime", "datetime2", "datetimeoffset"}; - - /** - * 数据库数字类型 - */ - String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", - "bit", "bigint", "float", "double", "decimal", "numeric", "real", "double precision", - "smallserial", "serial", "bigserial", "money", "smallmoney"}; - - /** - * BO对象 不需要添加字段 - */ - String[] COLUMNNAME_NOT_ADD = {"create_dept", "create_by", "create_time", "del_flag", "update_by", - "update_time", "version", "tenant_id"}; - - /** - * BO对象 不需要编辑字段 - */ - String[] COLUMNNAME_NOT_EDIT = {"create_dept", "create_by", "create_time", "del_flag", "update_by", - "update_time", "version", "tenant_id"}; - - /** - * VO对象 不需要返回字段 - */ - String[] COLUMNNAME_NOT_LIST = {"create_dept", "create_by", "create_time", "del_flag", "update_by", - "update_time", "version", "tenant_id"}; - - /** - * BO对象 不需要查询字段 - */ - String[] COLUMNNAME_NOT_QUERY = {"id", "create_dept", "create_by", "create_time", "del_flag", "update_by", - "update_time", "remark", "version", "tenant_id"}; /** * Entity基类字段 */ String[] BASE_ENTITY = {"createDept", "createBy", "createTime", "updateBy", "updateTime", "tenantId"}; - /** - * 文本框 - */ - String HTML_INPUT = "input"; - - /** - * 文本域 - */ - String HTML_TEXTAREA = "textarea"; /** * 下拉框 @@ -119,46 +58,6 @@ public interface GenConstants { */ String HTML_CHECKBOX = "checkbox"; - /** - * 日期控件 - */ - String HTML_DATETIME = "datetime"; - - /** - * 图片上传控件 - */ - String HTML_IMAGE_UPLOAD = "imageUpload"; - - /** - * 文件上传控件 - */ - String HTML_FILE_UPLOAD = "fileUpload"; - - /** - * 富文本控件 - */ - String HTML_EDITOR = "editor"; - - /** - * 字符串类型 - */ - String TYPE_STRING = "String"; - - /** - * 整型 - */ - String TYPE_INTEGER = "Integer"; - - /** - * 长整型 - */ - String TYPE_LONG = "Long"; - - /** - * 浮点型 - */ - String TYPE_DOUBLE = "Double"; - /** * 高精度计算类型 */ @@ -168,19 +67,4 @@ public interface GenConstants { * 时间类型 */ String TYPE_DATE = "Date"; - - /** - * 模糊查询 - */ - String QUERY_LIKE = "LIKE"; - - /** - * 相等查询 - */ - String QUERY_EQ = "EQ"; - - /** - * 需要 - */ - String REQUIRE = "1"; } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/GenController.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/GenController.java index a70a681d..0fc7a2ea 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/GenController.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/GenController.java @@ -9,19 +9,14 @@ import org.ruoyi.common.core.domain.R; import org.ruoyi.common.log.annotation.Log; import org.ruoyi.common.log.enums.BusinessType; import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.core.page.PageQuery; -import org.ruoyi.core.page.TableDataInfo; -import org.ruoyi.generator.domain.GenTable; -import org.ruoyi.generator.domain.GenTableColumn; import org.ruoyi.generator.service.IGenTableService; import org.ruoyi.helper.DataBaseHelper; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; /** * 代码生成 操作处理 @@ -36,150 +31,6 @@ public class GenController extends BaseController { private final IGenTableService genTableService; - /** - * 查询代码生成列表 - */ - @SaCheckPermission("tool:gen:list") - @GetMapping("/list") - public TableDataInfo genList(GenTable genTable, PageQuery pageQuery) { - - return genTableService.selectPageGenTableList(genTable, pageQuery); - } - - /** - * 修改代码生成业务 - * - * @param tableId 表ID - */ - @SaCheckPermission("tool:gen:query") - @GetMapping(value = "/{tableId}") - public R> getInfo(@PathVariable Long tableId) { - GenTable table = genTableService.selectGenTableById(tableId); - List tables = genTableService.selectGenTableAll(); - List list = genTableService.selectGenTableColumnListByTableId(tableId); - Map map = new HashMap(); - map.put("info", table); - map.put("rows", list); - map.put("tables", tables); - return R.ok(map); - } - - /** - * 查询数据库列表 - */ - @SaCheckPermission("tool:gen:list") - @GetMapping("/db/list") - public TableDataInfo dataList(GenTable genTable, PageQuery pageQuery) { - return genTableService.selectPageDbTableList(genTable, pageQuery); - } - - /** - * 查询数据表字段列表 - * - * @param tableId 表ID - */ - @SaCheckPermission("tool:gen:list") - @GetMapping(value = "/column/{tableId}") - public TableDataInfo columnList(Long tableId) { - TableDataInfo dataInfo = new TableDataInfo<>(); - List list = genTableService.selectGenTableColumnListByTableId(tableId); - dataInfo.setRows(list); - dataInfo.setTotal(list.size()); - return dataInfo; - } - - /** - * 导入表结构(保存) - * - * @param tables 表名串 - */ - @SaCheckPermission("tool:gen:import") - @Log(title = "代码生成", businessType = BusinessType.IMPORT) - @PostMapping("/importTable") - public R importTableSave(String tables) { - String[] tableNames = Convert.toStrArray(tables); - // 查询表信息 - List tableList = genTableService.selectDbTableListByNames(tableNames); - genTableService.importGenTable(tableList); - return R.ok(); - } - - /** - * 修改保存代码生成业务 - */ - @SaCheckPermission("tool:gen:edit") - @Log(title = "代码生成", businessType = BusinessType.UPDATE) - @PutMapping - public R editSave(@Validated @RequestBody GenTable genTable) { - genTableService.validateEdit(genTable); - genTableService.updateGenTable(genTable); - return R.ok(); - } - - /** - * 删除代码生成 - * - * @param tableIds 表ID串 - */ - @SaCheckPermission("tool:gen:remove") - @Log(title = "代码生成", businessType = BusinessType.DELETE) - @DeleteMapping("/{tableIds}") - public R remove(@PathVariable Long[] tableIds) { - genTableService.deleteGenTableByIds(tableIds); - return R.ok(); - } - - /** - * 预览代码 - * - * @param tableId 表ID - */ - @SaCheckPermission("tool:gen:preview") - @GetMapping("/preview/{tableId}") - public R> preview(@PathVariable("tableId") Long tableId) throws IOException { - Map dataMap = genTableService.previewCode(tableId); - return R.ok(dataMap); - } - - /** - * 生成代码(下载方式) - * - * @param tableId 表名 - */ - @SaCheckPermission("tool:gen:code") - @Log(title = "代码生成", businessType = BusinessType.GENCODE) - @GetMapping("/download/{tableId}") - public void download(HttpServletResponse response, @PathVariable("tableId") Long tableId) throws IOException { - byte[] data = genTableService.downloadCode(tableId); - genCode(response, data); - } - - /** - * 生成代码(自定义路径) - * - * @param tableName 表名 - */ - @SaCheckPermission("tool:gen:code") - @Log(title = "代码生成", businessType = BusinessType.GENCODE) - @GetMapping("/genCode/{tableName}") - public R genCode(@PathVariable("tableName") String tableName) { - genTableService.generatorCode(tableName); - return R.ok(); - } - - /** - * 同步数据库 - * - * @param tableName 表名 - */ - @SaCheckPermission("tool:gen:edit") - @Log(title = "代码生成", businessType = BusinessType.UPDATE) - @GetMapping("/synchDb/{tableName}") - public R synchDb(@PathVariable("tableName") String tableName) { - genTableService.synchDb(tableName); - return R.ok(); - } - /** * 批量生成代码 * @@ -213,7 +64,7 @@ public class GenController extends BaseController { */ @SaCheckPermission("tool:gen:list") @GetMapping(value = "/getDataNames") - public R getCurrentDataSourceNameList(){ + public R getCurrentDataSourceNameList() { return R.ok(DataBaseHelper.getDataSourceNameList()); } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaController.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaController.java new file mode 100644 index 00000000..332c2c06 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaController.java @@ -0,0 +1,99 @@ +package org.ruoyi.generator.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.domain.R; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.common.idempotent.annotation.RepeatSubmit; +import org.ruoyi.common.log.annotation.Log; +import org.ruoyi.common.log.enums.BusinessType; +import org.ruoyi.common.web.core.BaseController; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaBo; +import org.ruoyi.generator.domain.vo.SchemaVo; +import org.ruoyi.generator.service.ISchemaService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 数据模型 + * + * @author ruoyi + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/dev/schema") +public class SchemaController extends BaseController { + + private final ISchemaService schemaService; + + /** + * 查询数据模型列表 + */ + @SaCheckPermission("dev:schema:list") + @GetMapping("/list") + public TableDataInfo list(SchemaBo bo, PageQuery pageQuery) { + return schemaService.queryPageList(bo, pageQuery); + } + + /** + * 获取数据模型详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("dev:schema:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(schemaService.queryById(id)); + } + + /** + * 新增数据模型 + */ + @SaCheckPermission("dev:schema:add") + @Log(title = "数据模型", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchemaBo bo) { + return toAjax(schemaService.insertByBo(bo)); + } + + /** + * 修改数据模型 + */ + @SaCheckPermission("dev:schema:edit") + @Log(title = "数据模型", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchemaBo bo) { + return toAjax(schemaService.updateByBo(bo)); + } + + /** + * 删除数据模型 + * + * @param ids 主键串 + */ + @SaCheckPermission("dev:schema:remove") + @Log(title = "数据模型", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(schemaService.deleteWithValidByIds(List.of(ids), true)); + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaFieldController.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaFieldController.java new file mode 100644 index 00000000..c587ffd2 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaFieldController.java @@ -0,0 +1,134 @@ +package org.ruoyi.generator.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.domain.R; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.common.idempotent.annotation.RepeatSubmit; +import org.ruoyi.common.log.annotation.Log; +import org.ruoyi.common.log.enums.BusinessType; +import org.ruoyi.common.web.core.BaseController; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaFieldBo; +import org.ruoyi.generator.domain.vo.SchemaFieldVo; +import org.ruoyi.generator.service.ISchemaFieldService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 数据模型字段 + * + * @author ruoyi + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/dev/schemaField") +public class SchemaFieldController extends BaseController { + + private final ISchemaFieldService schemaFieldService; + + /** + * 查询数据模型字段列表 + */ + @SaCheckPermission("dev:schemaField:list") + @GetMapping("/list") + public TableDataInfo list(SchemaFieldBo bo, PageQuery pageQuery) { + return schemaFieldService.queryPageList(bo, pageQuery); + } + + /** + * 获取数据模型字段详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("dev:schemaField:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(schemaFieldService.queryById(id)); + } + + /** + * 新增数据模型字段 + */ + @SaCheckPermission("dev:schemaField:add") + @Log(title = "数据模型字段", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchemaFieldBo bo) { + return toAjax(schemaFieldService.insertByBo(bo)); + } + + /** + * 修改数据模型字段 + */ + @SaCheckPermission("dev:schemaField:edit") + @Log(title = "数据模型字段", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchemaFieldBo bo) { + return toAjax(schemaFieldService.updateByBo(bo)); + } + + /** + * 删除数据模型字段 + * + * @param ids 主键串 + */ + @SaCheckPermission("dev:schemaField:remove") + @Log(title = "数据模型字段", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(schemaFieldService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 批量更新字段配置 + * + * @param fields 字段配置列表 + */ + @SaCheckPermission("dev:schemaField:edit") + @Log(title = "批量更新字段配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/batchUpdate") + public R batchUpdateFieldConfig(@Validated(EditGroup.class) @RequestBody List fields) { + return toAjax(schemaFieldService.batchUpdateFieldConfig(fields)); + } + + /** + * 根据模型ID查询字段列表 + * + * @param schemaId 模型ID + */ + @SaCheckPermission("dev:schemaField:list") + @GetMapping("/listBySchemaId/{schemaId}") + public R> listBySchemaId(@NotNull(message = "模型ID不能为空") + @PathVariable Long schemaId) { + return R.ok(schemaFieldService.queryListBySchemaId(schemaId)); + } + + /** + * 根据表名获取代码生成元数据 + * + * @param tableName 表名 + */ + @GetMapping("/getByTableName") + public R getByTableName(@NotNull(message = "表名不能为空") String tableName) { + return R.ok(schemaFieldService.getMetaDataByTableName(tableName)); + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaGroupController.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaGroupController.java new file mode 100644 index 00000000..dd246d7f --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/controller/SchemaGroupController.java @@ -0,0 +1,108 @@ +package org.ruoyi.generator.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.domain.R; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.common.idempotent.annotation.RepeatSubmit; +import org.ruoyi.common.log.annotation.Log; +import org.ruoyi.common.log.enums.BusinessType; +import org.ruoyi.common.web.core.BaseController; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaGroupBo; +import org.ruoyi.generator.domain.vo.SchemaGroupVo; +import org.ruoyi.generator.service.ISchemaGroupService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 数据模型分组 + * + * @author ruoyi + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/dev/schemaGroup") +public class SchemaGroupController extends BaseController { + + private final ISchemaGroupService schemaGroupService; + + /** + * 查询数据模型分组列表 + */ + @SaCheckPermission("dev:schemaGroup:list") + @GetMapping("/list") + public TableDataInfo list(SchemaGroupBo bo, PageQuery pageQuery) { + return schemaGroupService.queryPageList(bo, pageQuery); + } + + /** + * 获取数据模型分组选择列表 + */ + @GetMapping("/select") + public R> select() { + SchemaGroupBo bo = new SchemaGroupBo(); + List list = schemaGroupService.queryList(bo); + return R.ok(list); + } + + /** + * 获取数据模型分组详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("dev:schemaGroup:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(schemaGroupService.queryById(id)); + } + + /** + * 新增数据模型分组 + */ + @SaCheckPermission("dev:schemaGroup:add") + @Log(title = "数据模型分组", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchemaGroupBo bo) { + return toAjax(schemaGroupService.insertByBo(bo)); + } + + /** + * 修改数据模型分组 + */ + @SaCheckPermission("dev:schemaGroup:edit") + @Log(title = "数据模型分组", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchemaGroupBo bo) { + return toAjax(schemaGroupService.updateByBo(bo)); + } + + /** + * 删除数据模型分组 + * + * @param ids 主键串 + */ + @SaCheckPermission("dev:schemaGroup:remove") + @Log(title = "数据模型分组", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(schemaGroupService.deleteWithValidByIds(List.of(ids), true)); + } + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTable.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTable.java index 69e2d832..d30a5e93 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTable.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTable.java @@ -8,9 +8,7 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.core.domain.BaseEntity; -import org.ruoyi.generator.constant.GenConstants; import java.util.List; @@ -164,27 +162,4 @@ public class GenTable extends BaseEntity { @TableField(exist = false) private String parentMenuName; - public boolean isTree() { - return isTree(this.tplCategory); - } - - public static boolean isTree(String tplCategory) { - return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); - } - - public boolean isCrud() { - return isCrud(this.tplCategory); - } - - public static boolean isCrud(String tplCategory) { - return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); - } - - public boolean isSuperColumn(String javaField) { - return isSuperColumn(this.tplCategory, javaField); - } - - public static boolean isSuperColumn(String tplCategory, String javaField) { - return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); - } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTableColumn.java index 148906fe..f3e9db8e 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTableColumn.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/GenTableColumn.java @@ -188,10 +188,10 @@ public class GenTableColumn extends BaseEntity { public static boolean isSuperColumn(String javaField) { return StringUtils.equalsAnyIgnoreCase(javaField, - // BaseEntity - "createBy", "createTime", "updateBy", "updateTime", - // TreeEntity - "parentName", "parentId"); + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", + // TreeEntity + "parentName", "parentId"); } public boolean isUsableColumn() { diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/Schema.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/Schema.java new file mode 100644 index 00000000..f12fb823 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/Schema.java @@ -0,0 +1,103 @@ +package org.ruoyi.generator.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 数据模型对象 dev_schema + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("dev_schema") +public class Schema extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 分组ID + */ + private Long schemaGroupId; + + /** + * 模型名称 + */ + private String name; + + /** + * 模型编码 + */ + private String code; + + /** + * 表名 + */ + private String tableName; + + /** + * 表注释 + */ + private String comment; + + /** + * 存储引擎 + */ + private String engine; + + /** + * 列表字段 + */ + private String listKeys; + + /** + * 搜索表单字段 + */ + private String searchFormKeys; + + /** + * 表单设计 + */ + private String designer; + + /** + * 状态 + */ + private String status; + + /** + * 排序 + */ + private Integer sort; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 租户编号 + */ + private String tenantId; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaField.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaField.java new file mode 100644 index 00000000..ac537baf --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaField.java @@ -0,0 +1,153 @@ +package org.ruoyi.generator.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 数据模型字段对象 dev_schema_field + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("dev_schema_field") +public class SchemaField extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 模型ID + */ + private Long schemaId; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段编码 + */ + private String code; + + /** + * 字段类型 + */ + private String type; + + /** + * 字段注释 + */ + private String comment; + + /** + * 是否主键 + */ + private String isPk; + + /** + * 是否必填 + */ + private String isRequired; + + /** + * 是否唯一 + */ + private String isUnique; + + /** + * 默认值 + */ + private String defaultValue; + + /** + * 字段长度 + */ + private Integer length; + + /** + * 小数位数 + */ + private Integer scale; + + /** + * 排序 + */ + private Integer sort; + + /** + * 是否列表显示(0否 1是) + */ + private String isList; + + /** + * 是否查询字段(0否 1是) + */ + private String isQuery; + + /** + * 是否插入字段(0否 1是) + */ + private String isInsert; + + /** + * 是否编辑字段(0否 1是) + */ + private String isEdit; + + /** + * 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) + */ + private String queryType; + + /** + * 显示类型(input输入框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传、upload文件上传、editor富文本编辑器) + */ + private String htmlType; + + /** + * 字典类型 + */ + private String dictType; + + /** + * 状态 + */ + private String status; + + /** + * 扩展JSON + */ + private String extendJson; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 租户编号 + */ + private String tenantId; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaGroup.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaGroup.java new file mode 100644 index 00000000..c921e285 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/SchemaGroup.java @@ -0,0 +1,73 @@ +package org.ruoyi.generator.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 数据模型分组对象 dev_schema_group + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("dev_schema_group") +public class SchemaGroup extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 分组名称 + */ + private String name; + + /** + * 分组编码 + */ + private String code; + + /** + * 图标 + */ + private String icon; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 租户编号 + */ + private String tenantId; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaBo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaBo.java new file mode 100644 index 00000000..cb5ee424 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaBo.java @@ -0,0 +1,92 @@ +package org.ruoyi.generator.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.core.domain.BaseEntity; +import org.ruoyi.generator.domain.Schema; + +/** + * 数据模型业务对象 SchemaBo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = Schema.class, reverseConvertGenerate = false) +public class SchemaBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 分组ID + */ + private Long schemaGroupId; + + /** + * 模型名称 + */ + @NotBlank(message = "模型名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String name; + + /** + * 模型编码 + */ + @NotBlank(message = "模型编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String code; + + /** + * 表名 + */ + private String tableName; + + /** + * 表注释 + */ + private String comment; + + /** + * 存储引擎 + */ + private String engine; + + /** + * 列表字段 + */ + private String listKeys; + + /** + * 搜索表单字段 + */ + private String searchFormKeys; + + /** + * 表单设计 + */ + private String designer; + + /** + * 状态 + */ + private String status; + + /** + * 排序 + */ + private Integer sort; + + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaFieldBo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaFieldBo.java new file mode 100644 index 00000000..942be612 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaFieldBo.java @@ -0,0 +1,143 @@ +package org.ruoyi.generator.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.core.domain.BaseEntity; +import org.ruoyi.generator.domain.SchemaField; + +/** + * 数据模型字段业务对象 SchemaFieldBo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SchemaField.class, reverseConvertGenerate = false) +public class SchemaFieldBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 模型ID + */ + @NotNull(message = "模型ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long schemaId; + + /** + * 字段名称 + */ + @NotBlank(message = "字段名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String name; + + /** + * 字段编码 + */ + @NotBlank(message = "字段编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String code; + + /** + * 字段类型 + */ + private String type; + + /** + * 字段注释 + */ + private String comment; + + /** + * 是否主键 + */ + private String isPk; + + /** + * 是否必填 + */ + private String isRequired; + + /** + * 是否唯一 + */ + private String isUnique; + + /** + * 默认值 + */ + private String defaultValue; + + /** + * 字段长度 + */ + private Integer length; + + /** + * 小数位数 + */ + private Integer scale; + + /** + * 排序 + */ + private Integer sort; + + /** + * 是否列表显示(0否 1是) + */ + private String isList; + + /** + * 是否查询字段(0否 1是) + */ + private String isQuery; + + /** + * 是否插入字段(0否 1是) + */ + private String isInsert; + + /** + * 是否编辑字段(0否 1是) + */ + private String isEdit; + + /** + * 查询方式 + */ + private String queryType; + + /** + * 显示类型 + */ + private String htmlType; + + /** + * 字典类型 + */ + private String dictType; + + /** + * 状态 + */ + private String status; + + /** + * 扩展JSON + */ + private String extendJson; + + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaGroupBo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaGroupBo.java new file mode 100644 index 00000000..21c49d26 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/bo/SchemaGroupBo.java @@ -0,0 +1,62 @@ +package org.ruoyi.generator.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.core.domain.BaseEntity; +import org.ruoyi.generator.domain.SchemaGroup; + +/** + * 数据模型分组业务对象 SchemaGroupBo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SchemaGroup.class, reverseConvertGenerate = false) +public class SchemaGroupBo extends BaseEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 分组名称 + */ + @NotBlank(message = "分组名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String name; + + /** + * 分组编码 + */ + @NotBlank(message = "分组编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private String code; + + /** + * 图标 + */ + private String icon; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaFieldVo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaFieldVo.java new file mode 100644 index 00000000..1de9e5be --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaFieldVo.java @@ -0,0 +1,155 @@ +package org.ruoyi.generator.domain.vo; + + +import io.github.linpeilie.annotations.AutoMapper; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.ruoyi.generator.domain.SchemaField; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 数据模型字段视图对象 SchemaFieldVo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@AutoMapper(target = SchemaField.class) +public class SchemaFieldVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 模型ID + */ + private Long schemaId; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段编码 + */ + private String code; + + /** + * 字段类型 + */ + private String type; + + /** + * 字段注释 + */ + private String comment; + + /** + * 是否主键 + */ + private String isPk; + + /** + * 是否必填 + */ + private String isRequired; + + /** + * 是否唯一 + */ + private String isUnique; + + /** + * 默认值 + */ + private String defaultValue; + + /** + * 字段长度 + */ + private Integer length; + + /** + * 小数位数 + */ + private Integer scale; + + /** + * 排序 + */ + @Schema(description = "排序") + private Integer sort; + + /** + * 是否列表显示(0否 1是) + */ + @Schema(description = "是否列表显示") + private String isList; + + /** + * 是否查询字段(0否 1是) + */ + @Schema(description = "是否查询字段") + private String isQuery; + + /** + * 是否插入字段(0否 1是) + */ + @Schema(description = "是否插入字段") + private String isInsert; + + /** + * 是否编辑字段(0否 1是) + */ + @Schema(description = "是否编辑字段") + private String isEdit; + + /** + * 查询方式 + */ + @Schema(description = "查询方式") + private String queryType; + + /** + * 显示类型 + */ + @Schema(description = "显示类型") + private String htmlType; + + /** + * 字典类型 + */ + @Schema(description = "字典类型") + private String dictType; + + /** + * 状态 + */ + @Schema(description = "状态") + private String status; + + /** + * 扩展JSON + */ + private String extendJson; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaGroupVo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaGroupVo.java new file mode 100644 index 00000000..76741e45 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaGroupVo.java @@ -0,0 +1,64 @@ +package org.ruoyi.generator.domain.vo; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.ruoyi.generator.domain.SchemaGroup; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 数据模型分组视图对象 SchemaGroupVo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@AutoMapper(target = SchemaGroup.class) +public class SchemaGroupVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 分组名称 + */ + private String name; + + /** + * 分组编码 + */ + private String code; + + /** + * 图标 + */ + private String icon; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaVo.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaVo.java new file mode 100644 index 00000000..c2dfd90a --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/domain/vo/SchemaVo.java @@ -0,0 +1,95 @@ +package org.ruoyi.generator.domain.vo; + + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.ruoyi.generator.domain.Schema; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 数据模型视图对象 SchemaVo + * + * @author ruoyi + * @date 2024-01-01 + */ +@Data +@AutoMapper(target = Schema.class) +public class SchemaVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 分组ID + */ + private Long schemaGroupId; + + /** + * 模型名称 + */ + private String name; + + /** + * 模型编码 + */ + private String code; + + /** + * 表名 + */ + private String tableName; + + /** + * 表注释 + */ + private String comment; + + /** + * 存储引擎 + */ + private String engine; + + /** + * 列表字段 + */ + private String listKeys; + + /** + * 搜索表单字段 + */ + private String searchFormKeys; + + /** + * 表单设计 + */ + private String designer; + + /** + * 状态 + */ + private String status; + + /** + * 排序 + */ + private Integer sort; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableColumnMapper.java index 90048881..6e38f67f 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableColumnMapper.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.ruoyi.core.mapper.BaseMapperPlus; import org.ruoyi.generator.domain.GenTableColumn; -import java.util.List; - /** * 业务字段 数据层 * @@ -13,12 +11,5 @@ import java.util.List; */ @InterceptorIgnore(dataPermission = "true", tenantLine = "true") public interface GenTableColumnMapper extends BaseMapperPlus { - /** - * 根据表名称查询列信息 - * - * @param tableName 表名称 - * @return 列信息 - */ - List selectDbTableColumnsByName(String tableName); } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableMapper.java index 982ee9b2..ac7d200a 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableMapper.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableMapper.java @@ -1,13 +1,9 @@ package org.ruoyi.generator.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Param; import org.ruoyi.core.mapper.BaseMapperPlus; import org.ruoyi.generator.domain.GenTable; -import java.util.List; - /** * 业务 数据层 * @@ -16,29 +12,6 @@ import java.util.List; @InterceptorIgnore(dataPermission = "true", tenantLine = "true") public interface GenTableMapper extends BaseMapperPlus { - /** - * 查询据库列表 - * - * @param genTable 查询条件 - * @return 数据库表集合 - */ - Page selectPageDbTableList(@Param("page") Page page, @Param("genTable") GenTable genTable); - - /** - * 查询据库列表 - * - * @param tableNames 表名称组 - * @return 数据库表集合 - */ - List selectDbTableListByNames(String[] tableNames); - - /** - * 查询所有表信息 - * - * @return 表信息集合 - */ - List selectGenTableAll(); - /** * 查询表ID业务信息 * @@ -47,12 +20,5 @@ public interface GenTableMapper extends BaseMapperPlus { */ GenTable selectGenTableById(Long id); - /** - * 查询表名称业务信息 - * - * @param tableName 表名称 - * @return 业务信息 - */ - GenTable selectGenTableByName(String tableName); } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaFieldMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaFieldMapper.java new file mode 100644 index 00000000..4a0b58db --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaFieldMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.generator.mapper; + + +import org.ruoyi.core.mapper.BaseMapperPlus; +import org.ruoyi.generator.domain.SchemaField; +import org.ruoyi.generator.domain.vo.SchemaFieldVo; + +/** + * 数据模型字段Mapper接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface SchemaFieldMapper extends BaseMapperPlus { + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaGroupMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaGroupMapper.java new file mode 100644 index 00000000..79ddab9a --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaGroupMapper.java @@ -0,0 +1,15 @@ +package org.ruoyi.generator.mapper; + +import org.ruoyi.core.mapper.BaseMapperPlus; +import org.ruoyi.generator.domain.SchemaGroup; +import org.ruoyi.generator.domain.vo.SchemaGroupVo; + +/** + * 数据模型分组Mapper接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface SchemaGroupMapper extends BaseMapperPlus { + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaMapper.java new file mode 100644 index 00000000..f1673f2f --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/SchemaMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.generator.mapper; + + +import org.ruoyi.core.mapper.BaseMapperPlus; +import org.ruoyi.generator.domain.Schema; +import org.ruoyi.generator.domain.vo.SchemaVo; + +/** + * 数据模型Mapper接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface SchemaMapper extends BaseMapperPlus { + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/GenTableServiceImpl.java deleted file mode 100644 index 244492c1..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/GenTableServiceImpl.java +++ /dev/null @@ -1,456 +0,0 @@ -package org.ruoyi.generator.service; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.lang.Dict; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.ruoyi.common.core.constant.Constants; -import org.ruoyi.common.core.exception.ServiceException; -import org.ruoyi.common.core.utils.StreamUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.core.utils.file.FileUtils; -import org.ruoyi.common.json.utils.JsonUtils; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.core.page.PageQuery; -import org.ruoyi.core.page.TableDataInfo; -import org.ruoyi.generator.constant.GenConstants; -import org.ruoyi.generator.domain.GenTable; -import org.ruoyi.generator.domain.GenTableColumn; -import org.ruoyi.generator.mapper.GenTableColumnMapper; -import org.ruoyi.generator.mapper.GenTableMapper; -import org.ruoyi.generator.util.GenUtils; -import org.ruoyi.generator.util.VelocityInitializer; -import org.ruoyi.generator.util.VelocityUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -/** - * 业务 服务层实现 - * - * @author Lion Li - */ -//@DS("#header.datasource") -@Slf4j -@RequiredArgsConstructor -@Service -public class GenTableServiceImpl implements IGenTableService { - - private final GenTableMapper baseMapper; - private final GenTableColumnMapper genTableColumnMapper; - private final IdentifierGenerator identifierGenerator; - - /** - * 查询业务字段列表 - * - * @param tableId 业务字段编号 - * @return 业务字段集合 - */ - @Override - public List selectGenTableColumnListByTableId(Long tableId) { - return genTableColumnMapper.selectList(new LambdaQueryWrapper() - .eq(GenTableColumn::getTableId, tableId) - .orderByAsc(GenTableColumn::getSort)); - } - - /** - * 查询业务信息 - * - * @param id 业务ID - * @return 业务信息 - */ - @Override - public GenTable selectGenTableById(Long id) { - GenTable genTable = baseMapper.selectGenTableById(id); - setTableFromOptions(genTable); - return genTable; - } - - @Override - public TableDataInfo selectPageGenTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPage(pageQuery.build(), this.buildGenTableQueryWrapper(genTable)); - return TableDataInfo.build(page); - } - - private QueryWrapper buildGenTableQueryWrapper(GenTable genTable) { - Map params = genTable.getParams(); - QueryWrapper wrapper = Wrappers.query(); - wrapper.like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName())) - .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment())) - .between(params.get("beginTime") != null && params.get("endTime") != null, - "create_time", params.get("beginTime"), params.get("endTime")); - return wrapper; - } - - - @Override - public TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery) { - Page page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable); - return TableDataInfo.build(page); - } - - /** - * 查询据库列表 - * - * @param tableNames 表名称组 - * @return 数据库表集合 - */ - @Override - public List selectDbTableListByNames(String[] tableNames) { - return baseMapper.selectDbTableListByNames(tableNames); - } - - /** - * 查询所有表信息 - * - * @return 表信息集合 - */ - @Override - public List selectGenTableAll() { - return baseMapper.selectGenTableAll(); - } - - /** - * 修改业务 - * - * @param genTable 业务信息 - * @return 结果 - */ - @Transactional(rollbackFor = Exception.class) - @Override - public void updateGenTable(GenTable genTable) { - String options = JsonUtils.toJsonString(genTable.getParams()); - genTable.setOptions(options); - int row = baseMapper.updateById(genTable); - if (row > 0) { - for (GenTableColumn cenTableColumn : genTable.getColumns()) { - genTableColumnMapper.updateById(cenTableColumn); - } - } - } - - /** - * 删除业务对象 - * - * @param tableIds 需要删除的数据ID - * @return 结果 - */ - @Transactional(rollbackFor = Exception.class) - @Override - public void deleteGenTableByIds(Long[] tableIds) { - List ids = Arrays.asList(tableIds); - baseMapper.deleteBatchIds(ids); - genTableColumnMapper.delete(new LambdaQueryWrapper().in(GenTableColumn::getTableId, ids)); - } - - /** - * 导入表结构 - * - * @param tableList 导入表列表 - */ - @Transactional(rollbackFor = Exception.class) - @Override - public void importGenTable(List tableList) { - String operName = LoginHelper.getUsername(); - try { - for (GenTable table : tableList) { - String tableName = table.getTableName(); - GenUtils.initTable(table, operName); - int row = baseMapper.insert(table); - if (row > 0) { - // 保存列信息 - List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); - List saveColumns = new ArrayList<>(); - for (GenTableColumn column : genTableColumns) { - GenUtils.initColumnField(column, table); - saveColumns.add(column); - } - if (CollUtil.isNotEmpty(saveColumns)) { - genTableColumnMapper.insertBatch(saveColumns); - } - } - } - } catch (Exception e) { - throw new ServiceException("导入失败:" + e.getMessage()); - } - } - - /** - * 预览代码 - * - * @param tableId 表编号 - * @return 预览数据列表 - */ - @Override - public Map previewCode(Long tableId) { - Map dataMap = new LinkedHashMap<>(); - // 查询表信息 - GenTable table = baseMapper.selectGenTableById(tableId); - List menuIds = new ArrayList<>(); - for (int i = 0; i < 6; i++) { - menuIds.add(identifierGenerator.nextId(null).longValue()); - } - table.setMenuIds(menuIds); - // 设置主键列信息 - setPkColumn(table); - VelocityInitializer.initVelocity(); - - VelocityContext context = VelocityUtils.prepareContext(table); - - // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { - // 渲染模板 - StringWriter sw = new StringWriter(); - Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); - dataMap.put(template, sw.toString()); - } - return dataMap; - } - - - @Override - public byte[] downloadCode(Long tableId) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipOutputStream zip = new ZipOutputStream(outputStream); - generatorCode(tableId, zip); - IoUtil.close(zip); - return outputStream.toByteArray(); - } - - /** - * 生成代码(下载方式) - * - * @param tableIds 表名称 - * @return 数据 - */ - @Override - public byte[] downloadCode(String[] tableIds) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipOutputStream zip = new ZipOutputStream(outputStream); - for (String tableId : tableIds) { - generatorCode(Long.parseLong(tableId), zip); - } - IoUtil.close(zip); - return outputStream.toByteArray(); - } - - /** - * 生成代码(自定义路径) - * - * @param tableName 表名称 - */ - @Override - public void generatorCode(String tableName) { - // 查询表信息 - GenTable table = baseMapper.selectGenTableByName(tableName); - // 设置主键列信息 - setPkColumn(table); - - VelocityInitializer.initVelocity(); - - VelocityContext context = VelocityUtils.prepareContext(table); - - // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { - if (!StringUtils.containsAny(template, "sql.vm", "api.ts.vm", "types.ts.vm", "index.vue.vm", "index-tree.vue.vm")) { - // 渲染模板 - StringWriter sw = new StringWriter(); - Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); - try { - String path = getGenPath(table, template); - FileUtils.writeUtf8String(sw.toString(), path); - } catch (Exception e) { - throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); - } - } - } - } - - /** - * 同步数据库 - * - * @param tableName 表名称 - */ - @Transactional(rollbackFor = Exception.class) - @Override - public void synchDb(String tableName) { - GenTable table = baseMapper.selectGenTableByName(tableName); - List tableColumns = table.getColumns(); - Map tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName); - - List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); - if (CollUtil.isEmpty(dbTableColumns)) { - throw new ServiceException("同步数据失败,原表结构不存在"); - } - List dbTableColumnNames = StreamUtils.toList(dbTableColumns, GenTableColumn::getColumnName); - - List saveColumns = new ArrayList<>(); - dbTableColumns.forEach(column -> { - GenUtils.initColumnField(column, table); - if (tableColumnMap.containsKey(column.getColumnName())) { - GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); - column.setColumnId(prevColumn.getColumnId()); - if (column.isList()) { - // 如果是列表,继续保留查询方式/字典类型选项 - column.setDictType(prevColumn.getDictType()); - column.setQueryType(prevColumn.getQueryType()); - } - if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk() - && (column.isInsert() || column.isEdit()) - && ((column.isUsableColumn()) || (!column.isSuperColumn()))) { - // 如果是(新增/修改&非主键/非忽略及父属性),继续保留必填/显示类型选项 - column.setIsRequired(prevColumn.getIsRequired()); - column.setHtmlType(prevColumn.getHtmlType()); - } - } - saveColumns.add(column); - }); - if (CollUtil.isNotEmpty(saveColumns)) { - genTableColumnMapper.insertOrUpdateBatch(saveColumns); - } - List delColumns = StreamUtils.filter(tableColumns, column -> !dbTableColumnNames.contains(column.getColumnName())); - if (CollUtil.isNotEmpty(delColumns)) { - List ids = StreamUtils.toList(delColumns, GenTableColumn::getColumnId); - genTableColumnMapper.deleteBatchIds(ids); - } - } - - /** - * 查询表信息并生成代码 - */ - /** - * 查询表信息并生成代码 - */ - private void generatorCode(Long tableId, ZipOutputStream zip) { - // 查询表信息 - GenTable table = baseMapper.selectGenTableById(tableId); - List menuIds = new ArrayList<>(); - for (int i = 0; i < 6; i++) { - menuIds.add(identifierGenerator.nextId(null).longValue()); - } - table.setMenuIds(menuIds); - // 设置主键列信息 - setPkColumn(table); - - VelocityInitializer.initVelocity(); - - VelocityContext context = VelocityUtils.prepareContext(table); - - // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { - // 渲染模板 - StringWriter sw = new StringWriter(); - Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); - try { - // 添加到zip - zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); - IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString()); - IoUtil.close(sw); - zip.flush(); - zip.closeEntry(); - } catch (IOException e) { - log.error("渲染模板失败,表名:" + table.getTableName(), e); - } - } - } - - /** - * 修改保存参数校验 - * - * @param genTable 业务信息 - */ - @Override - public void validateEdit(GenTable genTable) { - if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { - String options = JsonUtils.toJsonString(genTable.getParams()); - Dict paramsObj = JsonUtils.parseMap(options); - if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_CODE))) { - throw new ServiceException("树编码字段不能为空"); - } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_PARENT_CODE))) { - throw new ServiceException("树父编码字段不能为空"); - } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) { - throw new ServiceException("树名称字段不能为空"); - } - } - } - - /** - * 设置主键列信息 - * - * @param table 业务表信息 - */ - public void setPkColumn(GenTable table) { - for (GenTableColumn column : table.getColumns()) { - if (column.isPk()) { - table.setPkColumn(column); - break; - } - } - if (ObjectUtil.isNull(table.getPkColumn())) { - table.setPkColumn(table.getColumns().get(0)); - } - - } - - /** - * 设置代码生成其他选项值 - * - * @param genTable 设置后的生成对象 - */ - public void setTableFromOptions(GenTable genTable) { - Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); - if (ObjectUtil.isNotNull(paramsObj)) { - String treeCode = paramsObj.getStr(GenConstants.TREE_CODE); - String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE); - String treeName = paramsObj.getStr(GenConstants.TREE_NAME); - String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID); - String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME); - - genTable.setTreeCode(treeCode); - genTable.setTreeParentCode(treeParentCode); - genTable.setTreeName(treeName); - genTable.setParentMenuId(parentMenuId); - genTable.setParentMenuName(parentMenuName); - } - } - - /** - * 获取代码生成地址 - * - * @param table 业务表信息 - * @param template 模板文件路径 - * @return 生成地址 - */ - public static String getGenPath(GenTable table, String template) { - String genPath = table.getGenPath(); - if (StringUtils.equals(genPath, "/")) { - return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); - } - return genPath + File.separator + VelocityUtils.getFileName(template, table); - } -} - diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/IGenTableService.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/IGenTableService.java index 7ff208f4..f86da2b3 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/IGenTableService.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/IGenTableService.java @@ -1,13 +1,5 @@ package org.ruoyi.generator.service; -import org.ruoyi.core.page.PageQuery; -import org.ruoyi.core.page.TableDataInfo; -import org.ruoyi.generator.domain.GenTable; -import org.ruoyi.generator.domain.GenTableColumn; - -import java.util.List; -import java.util.Map; - /** * 业务 服务层 * @@ -15,106 +7,6 @@ import java.util.Map; */ public interface IGenTableService { - /** - * 查询业务字段列表 - * - * @param tableId 业务字段编号 - * @return 业务字段集合 - */ - List selectGenTableColumnListByTableId(Long tableId); - - /** - * 查询业务列表 - * - * @param genTable 业务信息 - * @return 业务集合 - */ - TableDataInfo selectPageGenTableList(GenTable genTable, PageQuery pageQuery); - - /** - * 查询据库列表 - * - * @param genTable 业务信息 - * @return 数据库表集合 - */ - TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery); - - /** - * 查询据库列表 - * - * @param tableNames 表名称组 - * @return 数据库表集合 - */ - List selectDbTableListByNames(String[] tableNames); - - /** - * 查询所有表信息 - * - * @return 表信息集合 - */ - List selectGenTableAll(); - - /** - * 查询业务信息 - * - * @param id 业务ID - * @return 业务信息 - */ - GenTable selectGenTableById(Long id); - - /** - * 修改业务 - * - * @param genTable 业务信息 - * @return 结果 - */ - void updateGenTable(GenTable genTable); - - /** - * 删除业务信息 - * - * @param tableIds 需要删除的表数据ID - * @return 结果 - */ - void deleteGenTableByIds(Long[] tableIds); - - /** - * 导入表结构 - * - * @param tableList 导入表列表 - */ - void importGenTable(List tableList); - - /** - * 预览代码 - * - * @param tableId 表编号 - * @return 预览数据列表 - */ - Map previewCode(Long tableId); - - /** - * 生成代码(下载方式) - * - * @param tableName 表名称 - * @return 数据 - */ - byte[] downloadCode(Long tableName); - - /** - * 生成代码(自定义路径) - * - * @param tableName 表名称 - * @return 数据 - */ - void generatorCode(String tableName); - - /** - * 同步数据库 - * - * @param tableName 表名称 - */ - void synchDb(String tableName); /** * 批量生成代码(下载方式) @@ -124,10 +16,4 @@ public interface IGenTableService { */ byte[] downloadCode(String[] tableIds); - /** - * 修改保存参数校验 - * - * @param genTable 业务信息 - */ - void validateEdit(GenTable genTable); } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaFieldService.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaFieldService.java new file mode 100644 index 00000000..fe44efb9 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaFieldService.java @@ -0,0 +1,59 @@ +package org.ruoyi.generator.service; + +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaFieldBo; +import org.ruoyi.generator.domain.vo.SchemaFieldVo; + +import java.util.Collection; +import java.util.List; + +/** + * 数据模型字段Service接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface ISchemaFieldService { + + /** + * 查询数据模型字段 + */ + SchemaFieldVo queryById(Long id); + + /** + * 查询数据模型字段列表 + */ + TableDataInfo queryPageList(SchemaFieldBo bo, PageQuery pageQuery); + + /** + * 新增数据模型字段 + */ + Boolean insertByBo(SchemaFieldBo bo); + + /** + * 修改数据模型字段 + */ + Boolean updateByBo(SchemaFieldBo bo); + + /** + * 校验并批量删除数据模型字段信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量更新字段配置 + */ + Boolean batchUpdateFieldConfig(List fields); + + /** + * 根据模型ID查询字段列表 + */ + List queryListBySchemaId(Long schemaId); + + /** + * 根据表名获取代码生成元数据 + */ + Object getMetaDataByTableName(String tableName); + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaGroupService.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaGroupService.java new file mode 100644 index 00000000..0661ad63 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaGroupService.java @@ -0,0 +1,49 @@ +package org.ruoyi.generator.service; + + +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaGroupBo; +import org.ruoyi.generator.domain.vo.SchemaGroupVo; + +import java.util.Collection; +import java.util.List; + +/** + * 数据模型分组Service接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface ISchemaGroupService { + + /** + * 查询数据模型分组 + */ + SchemaGroupVo queryById(Long id); + + /** + * 查询数据模型分组列表 + */ + TableDataInfo queryPageList(SchemaGroupBo bo, PageQuery pageQuery); + + /** + * 查询数据模型分组列表 + */ + List queryList(SchemaGroupBo bo); + + /** + * 新增数据模型分组 + */ + Boolean insertByBo(SchemaGroupBo bo); + + /** + * 修改数据模型分组 + */ + Boolean updateByBo(SchemaGroupBo bo); + + /** + * 校验并批量删除数据模型分组信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaService.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaService.java new file mode 100644 index 00000000..f3a42277 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/ISchemaService.java @@ -0,0 +1,54 @@ +package org.ruoyi.generator.service; + + +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.bo.SchemaBo; +import org.ruoyi.generator.domain.vo.SchemaVo; + +import java.util.Collection; +import java.util.List; + +/** + * 数据模型Service接口 + * + * @author ruoyi + * @date 2024-01-01 + */ +public interface ISchemaService { + + /** + * 查询数据模型 + */ + SchemaVo queryById(Long id); + + /** + * 查询数据模型列表 + */ + TableDataInfo queryPageList(SchemaBo bo, PageQuery pageQuery); + + /** + * 查询数据模型列表 + */ + List queryList(SchemaBo bo); + + /** + * 新增数据模型 + */ + Boolean insertByBo(SchemaBo bo); + + /** + * 修改数据模型 + */ + Boolean updateByBo(SchemaBo bo); + + /** + * 校验并批量删除数据模型信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据表名查询数据模型 + */ + SchemaVo queryByTableName(String tableName); +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/GenTableServiceImpl.java new file mode 100644 index 00000000..49b3bea5 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/GenTableServiceImpl.java @@ -0,0 +1,122 @@ +package org.ruoyi.generator.service.impl; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.ruoyi.common.core.constant.Constants; +import org.ruoyi.generator.domain.GenTable; +import org.ruoyi.generator.domain.GenTableColumn; +import org.ruoyi.generator.mapper.GenTableMapper; +import org.ruoyi.generator.service.IGenTableService; +import org.ruoyi.generator.util.VelocityInitializer; +import org.ruoyi.generator.util.VelocityUtils; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 业务 服务层实现 + * + * @author Lion Li + */ +//@DS("#header.datasource") +@Slf4j +@RequiredArgsConstructor +@Service +public class GenTableServiceImpl implements IGenTableService { + + private final GenTableMapper baseMapper; + private final IdentifierGenerator identifierGenerator; + + + /** + * 生成代码(下载方式) + * + * @param tableIds 表名称 + * @return 数据 + */ + @Override + public byte[] downloadCode(String[] tableIds) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableId : tableIds) { + generatorCode(Long.parseLong(tableId), zip); + } + IoUtil.close(zip); + return outputStream.toByteArray(); + } + + + /** + * 查询表信息并生成代码 + */ + /** + * 查询表信息并生成代码 + */ + private void generatorCode(Long tableId, ZipOutputStream zip) { + // 查询表信息 + GenTable table = baseMapper.selectGenTableById(tableId); + List menuIds = new ArrayList<>(); + for (int i = 0; i < 6; i++) { + menuIds.add(identifierGenerator.nextId(null).longValue()); + } + table.setMenuIds(menuIds); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(); + for (String template : templates) { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try { + // 添加到zip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString()); + IoUtil.close(sw); + zip.flush(); + zip.closeEntry(); + } catch (IOException e) { + log.error("渲染模板失败,表名:" + table.getTableName(), e); + } + } + } + + + /** + * 设置主键列信息 + * + * @param table 业务表信息 + */ + public void setPkColumn(GenTable table) { + for (GenTableColumn column : table.getColumns()) { + if (column.isPk()) { + table.setPkColumn(column); + break; + } + } + if (ObjectUtil.isNull(table.getPkColumn())) { + table.setPkColumn(table.getColumns().get(0)); + } + } + +} + diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaFieldServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaFieldServiceImpl.java new file mode 100644 index 00000000..9a325f56 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaFieldServiceImpl.java @@ -0,0 +1,286 @@ +package org.ruoyi.generator.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.SchemaField; +import org.ruoyi.generator.domain.bo.SchemaFieldBo; +import org.ruoyi.generator.domain.vo.SchemaFieldVo; +import org.ruoyi.generator.domain.vo.SchemaGroupVo; +import org.ruoyi.generator.domain.vo.SchemaVo; +import org.ruoyi.generator.mapper.SchemaFieldMapper; +import org.ruoyi.generator.service.ISchemaFieldService; +import org.ruoyi.generator.service.ISchemaGroupService; +import org.ruoyi.generator.service.ISchemaService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 数据模型字段Service业务层处理 + * + * @author ruoyi + */ +@RequiredArgsConstructor +@Service +public class SchemaFieldServiceImpl implements ISchemaFieldService { + + private final SchemaFieldMapper baseMapper; + private final ISchemaService schemaService; + private final ISchemaGroupService schemaGroupService; + + /** + * 查询数据模型字段 + */ + @Override + public SchemaFieldVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询数据模型字段列表 + */ + @Override + public TableDataInfo queryPageList(SchemaFieldBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + private LambdaQueryWrapper buildQueryWrapper(SchemaFieldBo bo) { + + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSchemaId() != null, SchemaField::getSchemaId, bo.getSchemaId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), SchemaField::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SchemaField::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), SchemaField::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getIsPk()), SchemaField::getIsPk, bo.getIsPk()); + lqw.eq(StringUtils.isNotBlank(bo.getIsRequired()), SchemaField::getIsRequired, bo.getIsRequired()); + lqw.eq(StringUtils.isNotBlank(bo.getIsList()), SchemaField::getIsList, bo.getIsList()); + lqw.eq(StringUtils.isNotBlank(bo.getIsQuery()), SchemaField::getIsQuery, bo.getIsQuery()); + lqw.eq(StringUtils.isNotBlank(bo.getIsInsert()), SchemaField::getIsInsert, bo.getIsInsert()); + lqw.eq(StringUtils.isNotBlank(bo.getIsEdit()), SchemaField::getIsEdit, bo.getIsEdit()); + lqw.eq(StringUtils.isNotBlank(bo.getQueryType()), SchemaField::getQueryType, bo.getQueryType()); + lqw.eq(StringUtils.isNotBlank(bo.getHtmlType()), SchemaField::getHtmlType, bo.getHtmlType()); + lqw.like(StringUtils.isNotBlank(bo.getDictType()), SchemaField::getDictType, bo.getDictType()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SchemaField::getStatus, bo.getStatus()); + lqw.orderByAsc(SchemaField::getSort); + return lqw; + } + + /** + * 新增数据模型字段 + */ + @Override + public Boolean insertByBo(SchemaFieldBo bo) { + SchemaField add = MapstructUtils.convert(bo, SchemaField.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改数据模型字段 + */ + @Override + public Boolean updateByBo(SchemaFieldBo bo) { + SchemaField update = MapstructUtils.convert(bo, SchemaField.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchemaField entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除数据模型字段 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 批量更新字段配置 + */ + @Override + public Boolean batchUpdateFieldConfig(List fields) { + if (fields == null || fields.isEmpty()) { + return false; + } + + for (SchemaFieldBo field : fields) { + SchemaField update = MapstructUtils.convert(field, SchemaField.class); + validEntityBeforeSave(update); + baseMapper.updateById(update); + } + return true; + } + + /** + * 根据模型ID查询字段列表 + */ + @Override + public List queryListBySchemaId(Long schemaId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SchemaField::getSchemaId, schemaId); + lqw.eq(SchemaField::getStatus, "0"); // 只查询正常状态的字段 + lqw.orderByAsc(SchemaField::getSort); + return baseMapper.selectVoList(lqw); + } + + /** + * 根据表名获取代码生成元数据 + */ + @Override + public Object getMetaDataByTableName(String tableName) { + // 根据表名查询Schema + SchemaVo schema = schemaService.queryByTableName(tableName); + if (schema == null) { + return null; + } + SchemaGroupVo schemaGroupVo = schemaGroupService.queryById(schema.getSchemaGroupId()); + if (schemaGroupVo == null) { + return null; + } + // 查询Schema对应的字段列表 + List fields = queryListBySchemaId(schema.getId()); + if (CollUtil.isEmpty(fields)) { + return null; + } + + // 构建代码生成器需要的数据结构 + Map result = new HashMap<>(); + result.put("schemaGroupCode", schemaGroupVo.getCode()); + result.put("tableName", schema.getTableName()); + result.put("tableComment", schema.getComment()); + result.put("className", toCamelCase(schema.getTableName(), true)); + result.put("tableCamelName", StrUtil.toCamelCase(schema.getTableName())); + result.put("functionName", schema.getName()); + result.put("schemaName", schema.getName()); + + // 查找主键字段 + SchemaFieldVo pkField = fields.stream() + .filter(field -> "1".equals(field.getIsPk())) + .findFirst() + .orElse(null); + + if (pkField != null) { + Map pkColumn = new HashMap<>(); + pkColumn.put("columnName", pkField.getCode()); + pkColumn.put("columnComment", pkField.getName()); + pkColumn.put("javaField", toCamelCase(pkField.getCode(), false)); + pkColumn.put("javaType", getJavaType(pkField.getType())); + result.put("pkColumn", pkColumn); + } + + // 构建字段列表 + List> columns = new ArrayList<>(); + for (SchemaFieldVo field : fields) { + Map column = new HashMap<>(); + column.put("columnName", field.getCode()); + column.put("columnComment", field.getName()); + column.put("javaField", toCamelCase(field.getCode(), false)); + column.put("javaType", getJavaType(field.getType())); + column.put("htmlType", field.getHtmlType()); + column.put("isPk", "1".equals(field.getIsPk())); + column.put("isRequired", "1".equals(field.getIsRequired())); + column.put("isInsert", "1".equals(field.getIsInsert())); + column.put("isEdit", "1".equals(field.getIsEdit())); + column.put("isList", "1".equals(field.getIsList())); + column.put("isQuery", "1".equals(field.getIsQuery())); + column.put("component", getComponentType(field.getHtmlType())); + column.put("remark", field.getRemark()); + columns.add(column); + } + result.put("columns", columns); + + return result; + } + + /** + * 转换为驼峰命名 + */ + private String toCamelCase(String str, boolean firstUpperCase) { + if (StringUtils.isBlank(str)) { + return str; + } + + StringBuilder result = new StringBuilder(); + String[] parts = str.split("_"); + for (int i = 0; i < parts.length; i++) { + String part = parts[i].toLowerCase(); + if (i == 0 && !firstUpperCase) { + result.append(part); + } else { + result.append(part.substring(0, 1).toUpperCase()).append(part.substring(1)); + } + } + return result.toString(); + } + + /** + * 获取Java类型 + */ + private String getJavaType(String dbType) { + if (StringUtils.isBlank(dbType)) { + return "String"; + } + + String type = dbType.toLowerCase(); + if (type.contains("int") || type.contains("tinyint") || type.contains("smallint")) { + return "Integer"; + } else if (type.contains("bigint")) { + return "Long"; + } else if (type.contains("decimal") || type.contains("numeric") || type.contains("float") || type.contains( + "double")) { + return "BigDecimal"; + } else if (type.contains("date") || type.contains("time")) { + return "Date"; + } else if (type.contains("bit") || type.contains("boolean")) { + return "Boolean"; + } else { + return "String"; + } + } + + /** + * 获取组件类型 + */ + private String getComponentType(String htmlType) { + if (StringUtils.isBlank(htmlType)) { + return "input"; + } + + return switch (htmlType) { + case "textarea" -> "textarea"; + case "select" -> "select"; + case "radio" -> "radio"; + case "checkbox" -> "checkbox"; + case "datetime" -> "datetime"; + case "date" -> "date"; + default -> "input"; + }; + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaGroupServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaGroupServiceImpl.java new file mode 100644 index 00000000..3fac948a --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaGroupServiceImpl.java @@ -0,0 +1,110 @@ +package org.ruoyi.generator.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.SchemaGroup; +import org.ruoyi.generator.domain.bo.SchemaGroupBo; +import org.ruoyi.generator.domain.vo.SchemaGroupVo; +import org.ruoyi.generator.mapper.SchemaGroupMapper; +import org.ruoyi.generator.service.ISchemaGroupService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +/** + * 数据模型分组Service业务层处理 + * + * @author ruoyi + */ +@RequiredArgsConstructor +@Service +public class SchemaGroupServiceImpl implements ISchemaGroupService { + + private final SchemaGroupMapper baseMapper; + + /** + * 查询数据模型分组 + */ + @Override + public SchemaGroupVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询数据模型分组列表 + */ + @Override + public TableDataInfo queryPageList(SchemaGroupBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询数据模型分组列表 + */ + @Override + public List queryList(SchemaGroupBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchemaGroupBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), SchemaGroup::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SchemaGroup::getCode, bo.getCode()); + lqw.eq(bo.getSort() != null, SchemaGroup::getSort, bo.getSort()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SchemaGroup::getStatus, bo.getStatus()); + lqw.orderByAsc(SchemaGroup::getSort); + return lqw; + } + + /** + * 新增数据模型分组 + */ + @Override + public Boolean insertByBo(SchemaGroupBo bo) { + SchemaGroup add = MapstructUtils.convert(bo, SchemaGroup.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改数据模型分组 + */ + @Override + public Boolean updateByBo(SchemaGroupBo bo) { + SchemaGroup update = MapstructUtils.convert(bo, SchemaGroup.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchemaGroup entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除数据模型分组 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaServiceImpl.java new file mode 100644 index 00000000..9151521a --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/service/impl/SchemaServiceImpl.java @@ -0,0 +1,123 @@ +package org.ruoyi.generator.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.core.page.PageQuery; +import org.ruoyi.core.page.TableDataInfo; +import org.ruoyi.generator.domain.Schema; +import org.ruoyi.generator.domain.bo.SchemaBo; +import org.ruoyi.generator.domain.vo.SchemaVo; +import org.ruoyi.generator.mapper.SchemaMapper; +import org.ruoyi.generator.service.ISchemaService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +/** + * 数据模型Service业务层处理 + * + * @author ruoyi + */ +@RequiredArgsConstructor +@Service +public class SchemaServiceImpl implements ISchemaService { + + private final SchemaMapper baseMapper; + + /** + * 查询数据模型 + */ + @Override + public SchemaVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询数据模型列表 + */ + @Override + public TableDataInfo queryPageList(SchemaBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询数据模型列表 + */ + @Override + public List queryList(SchemaBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchemaBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSchemaGroupId() != null, Schema::getSchemaGroupId, bo.getSchemaGroupId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), Schema::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), Schema::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getTableName()), Schema::getTableName, bo.getTableName()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), Schema::getStatus, bo.getStatus()); + lqw.orderByAsc(Schema::getSort); + return lqw; + } + + /** + * 新增数据模型 + */ + @Override + public Boolean insertByBo(SchemaBo bo) { + Schema add = MapstructUtils.convert(bo, Schema.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改数据模型 + */ + @Override + public Boolean updateByBo(SchemaBo bo) { + Schema update = MapstructUtils.convert(bo, Schema.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(Schema entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除数据模型 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 根据表名查询数据模型 + */ + @Override + public SchemaVo queryByTableName(String tableName) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(Schema::getTableName, tableName); + // 只查询正常状态的模型 + lqw.eq(Schema::getStatus, "0"); + return baseMapper.selectVoOne(lqw); + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/GenUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/GenUtils.java deleted file mode 100644 index 4a3edfd9..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/GenUtils.java +++ /dev/null @@ -1,233 +0,0 @@ -package org.ruoyi.generator.util; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.apache.commons.lang3.RegExUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.generator.config.GenConfig; -import org.ruoyi.generator.constant.GenConstants; -import org.ruoyi.generator.domain.GenTable; -import org.ruoyi.generator.domain.GenTableColumn; - -import java.util.Arrays; - -/** - * 代码生成器 工具类 - * - * @author ruoyi - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class GenUtils { - - /** - * 初始化表信息 - */ - public static void initTable(GenTable genTable, String operName) { - genTable.setClassName(convertClassName(genTable.getTableName())); - genTable.setPackageName(GenConfig.getPackageName()); - genTable.setModuleName(getModuleName(GenConfig.getPackageName())); - genTable.setBusinessName(getBusinessName(genTable.getTableName())); - genTable.setFunctionName(replaceText(genTable.getTableComment())); - genTable.setFunctionAuthor(GenConfig.getAuthor()); - genTable.setCreateBy(LoginHelper.getUserId()); - } - - /** - * 初始化列属性字段 - */ - public static void initColumnField(GenTableColumn column, GenTable table) { - String dataType = getDbType(column.getColumnType()); - String columnName = column.getColumnName(); - column.setTableId(table.getTableId()); - column.setCreateBy(table.getCreateBy()); - // 设置java字段名 - column.setJavaField(StringUtils.toCamelCase(columnName)); - // 设置默认类型 - column.setJavaType(GenConstants.TYPE_STRING); - column.setQueryType(GenConstants.QUERY_EQ); - - if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) { - // 字符串长度超过500设置为文本域 - Integer columnLength = getColumnLength(column.getColumnType()); - String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; - column.setHtmlType(htmlType); - } else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) { - column.setJavaType(GenConstants.TYPE_DATE); - column.setHtmlType(GenConstants.HTML_DATETIME); - } else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) { - column.setHtmlType(GenConstants.HTML_INPUT); - - // 如果是浮点型 统一用BigDecimal - String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), StringUtils.SEPARATOR); - if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) { - column.setJavaType(GenConstants.TYPE_BIGDECIMAL); - } - // 如果是整形 - else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) { - column.setJavaType(GenConstants.TYPE_INTEGER); - } - // 长整形 - else { - column.setJavaType(GenConstants.TYPE_LONG); - } - } - - // BO对象 默认插入勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_ADD, columnName) && !column.isPk()) { - column.setIsInsert(GenConstants.REQUIRE); - } - // BO对象 默认编辑勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { - column.setIsEdit(GenConstants.REQUIRE); - } - // BO对象 默认是否必填勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { - column.setIsRequired(GenConstants.REQUIRE); - } - // VO对象 默认返回勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName)) { - column.setIsList(GenConstants.REQUIRE); - } - // BO对象 默认查询勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) { - column.setIsQuery(GenConstants.REQUIRE); - } - - // 查询字段类型 - if (StringUtils.endsWithIgnoreCase(columnName, "name")) { - column.setQueryType(GenConstants.QUERY_LIKE); - } - // 状态字段设置单选框 - if (StringUtils.endsWithIgnoreCase(columnName, "status")) { - column.setHtmlType(GenConstants.HTML_RADIO); - } - // 类型&性别字段设置下拉框 - else if (StringUtils.endsWithIgnoreCase(columnName, "type") - || StringUtils.endsWithIgnoreCase(columnName, "sex")) { - column.setHtmlType(GenConstants.HTML_SELECT); - } - // 图片字段设置图片上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "image")) { - column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); - } - // 文件字段设置文件上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "file")) { - column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); - } - // 内容字段设置富文本控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "content")) { - column.setHtmlType(GenConstants.HTML_EDITOR); - } - } - - /** - * 校验数组是否包含指定值 - * - * @param arr 数组 - * @param targetValue 值 - * @return 是否包含 - */ - public static boolean arraysContains(String[] arr, String targetValue) { - return Arrays.asList(arr).contains(targetValue); - } - - /** - * 获取模块名 - * - * @param packageName 包名 - * @return 模块名 - */ - public static String getModuleName(String packageName) { - int lastIndex = packageName.lastIndexOf("."); - int nameLength = packageName.length(); - return StringUtils.substring(packageName, lastIndex + 1, nameLength); - } - - /** - * 获取业务名 - * - * @param tableName 表名 - * @return 业务名 - */ - public static String getBusinessName(String tableName) { - int firstIndex = tableName.indexOf("_"); - int nameLength = tableName.length(); - String businessName = StringUtils.substring(tableName, firstIndex + 1, nameLength); - businessName = StringUtils.toCamelCase(businessName); - return businessName; - } - - /** - * 表名转换成Java类名 - * - * @param tableName 表名称 - * @return 类名 - */ - public static String convertClassName(String tableName) { - boolean autoRemovePre = GenConfig.getAutoRemovePre(); - String tablePrefix = GenConfig.getTablePrefix(); - if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { - String[] searchList = StringUtils.split(tablePrefix, StringUtils.SEPARATOR); - tableName = replaceFirst(tableName, searchList); - } - return StringUtils.convertToCamelCase(tableName); - } - - /** - * 批量替换前缀 - * - * @param replacementm 替换值 - * @param searchList 替换列表 - * @return - */ - public static String replaceFirst(String replacementm, String[] searchList) { - String text = replacementm; - for (String searchString : searchList) { - if (replacementm.startsWith(searchString)) { - text = replacementm.replaceFirst(searchString, ""); - break; - } - } - return text; - } - - /** - * 关键字替换 - * - * @param text 需要被替换的名字 - * @return 替换后的名字 - */ - public static String replaceText(String text) { - return RegExUtils.replaceAll(text, "(?:表|若依)", ""); - } - - /** - * 获取数据库类型字段 - * - * @param columnType 列类型 - * @return 截取后的列类型 - */ - public static String getDbType(String columnType) { - if (StringUtils.indexOf(columnType, '(') > 0) { - return StringUtils.substringBefore(columnType, "("); - } else { - return columnType; - } - } - - /** - * 获取字段长度 - * - * @param columnType 列类型 - * @return 截取后的列类型 - */ - public static Integer getColumnLength(String columnType) { - if (StringUtils.indexOf(columnType, '(') > 0) { - String length = StringUtils.substringBetween(columnType, "(", ")"); - return Integer.valueOf(length); - } else { - return 0; - } - } -} diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityInitializer.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityInitializer.java index 51ffc437..355c6b8b 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityInitializer.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityInitializer.java @@ -22,7 +22,8 @@ public class VelocityInitializer { Properties p = new Properties(); try { // 加载classpath目录下的vm文件 - p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader" + + ".ClasspathResourceLoader"); // 定义字符集 p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); // 初始化Velocity引擎,指定配置Properties diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityUtils.java index 90445eea..7687766a 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/util/VelocityUtils.java @@ -15,7 +15,12 @@ import org.ruoyi.generator.domain.GenTable; import org.ruoyi.generator.domain.GenTableColumn; import org.ruoyi.helper.DataBaseHelper; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; /** * 模板处理工具类 @@ -25,386 +30,366 @@ import java.util.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class VelocityUtils { - /** - * 项目空间路径 - */ - private static final String PROJECT_PATH = "main/java"; + /** + * 项目空间路径 + */ + private static final String PROJECT_PATH = "main/java"; - /** - * mybatis空间路径 - */ - private static final String MYBATIS_PATH = "main/resources/mapper"; + /** + * mybatis空间路径 + */ + private static final String MYBATIS_PATH = "main/resources/mapper"; - /** - * 默认上级菜单,系统工具 - */ - private static final String DEFAULT_PARENT_MENU_ID = "3"; + /** + * 默认上级菜单,系统工具 + */ + private static final String DEFAULT_PARENT_MENU_ID = "3"; - /** - * 设置模板变量信息 - * - * @return 模板列表 - */ - public static VelocityContext prepareContext(GenTable genTable) { - String moduleName = genTable.getModuleName(); - String businessName = genTable.getBusinessName(); - String packageName = genTable.getPackageName(); - String tplCategory = genTable.getTplCategory(); - String functionName = genTable.getFunctionName(); + /** + * 设置模板变量信息 + * + * @return 模板列表 + */ + public static VelocityContext prepareContext(GenTable genTable) { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + String functionName = genTable.getFunctionName(); - VelocityContext velocityContext = new VelocityContext(); - velocityContext.put("tplCategory", genTable.getTplCategory()); - velocityContext.put("tableName", genTable.getTableName()); - velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】"); - velocityContext.put("ClassName", genTable.getClassName()); - velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); - velocityContext.put("moduleName", genTable.getModuleName()); - velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); - velocityContext.put("businessName", genTable.getBusinessName()); - velocityContext.put("basePackage", getPackagePrefix(packageName)); - velocityContext.put("packageName", packageName); - velocityContext.put("author", genTable.getFunctionAuthor()); - velocityContext.put("datetime", DateUtils.getDate()); - velocityContext.put("pkColumn", genTable.getPkColumn()); - velocityContext.put("importList", getImportList(genTable)); - velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); - velocityContext.put("columns", genTable.getColumns()); - velocityContext.put("table", genTable); - velocityContext.put("dicts", getDicts(genTable)); - setMenuVelocityContext(velocityContext, genTable); - if (GenConstants.TPL_TREE.equals(tplCategory)) { - setTreeVelocityContext(velocityContext, genTable); + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】"); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable)); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + velocityContext.put("dicts", getDicts(genTable)); + setMenuVelocityContext(velocityContext, genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) { + setTreeVelocityContext(velocityContext, genTable); + } + // 判断是modal还是drawer + Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); + if (ObjectUtil.isNotNull(paramsObj)) { + String popupComponent = Optional + .ofNullable(paramsObj.getStr("popupComponent")) + .orElse("modal"); + velocityContext.put("popupComponent", popupComponent); + velocityContext.put("PopupComponent", StringUtils.capitalize(popupComponent)); + } else { + velocityContext.put("popupComponent", "modal"); + velocityContext.put("PopupComponent", "Modal"); + } + // 判断是原生antd表单还是useForm表单 + // native 原生antd表单 + // useForm useVbenForm + if (ObjectUtil.isNotNull(paramsObj)) { + String formComponent = Optional + .ofNullable(paramsObj.getStr("formComponent")) + .orElse("useForm"); + velocityContext.put("formComponent", formComponent); + } + return velocityContext; } - // 判断是modal还是drawer - Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); - if (ObjectUtil.isNotNull(paramsObj)) { - String popupComponent = Optional - .ofNullable(paramsObj.getStr("popupComponent")) - .orElse("modal"); - velocityContext.put("popupComponent", popupComponent); - velocityContext.put("PopupComponent", StringUtils.capitalize(popupComponent)); - } else { - velocityContext.put("popupComponent", "modal"); - velocityContext.put("PopupComponent", "Modal"); - } - // 判断是原生antd表单还是useForm表单 - // native 原生antd表单 - // useForm useVbenForm - if (ObjectUtil.isNotNull(paramsObj)) { - String formComponent = Optional - .ofNullable(paramsObj.getStr("formComponent")) - .orElse("useForm"); - velocityContext.put("formComponent", formComponent); - } - return velocityContext; - } - public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { - String options = genTable.getOptions(); - Dict paramsObj = JsonUtils.parseMap(options); - String parentMenuId = getParentMenuId(paramsObj); - context.put("parentMenuId", parentMenuId); - } - - public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { - String options = genTable.getOptions(); - Dict paramsObj = JsonUtils.parseMap(options); - String treeCode = getTreecode(paramsObj); - String treeParentCode = getTreeParentCode(paramsObj); - String treeName = getTreeName(paramsObj); - - context.put("treeCode", treeCode); - context.put("treeParentCode", treeParentCode); - context.put("treeName", treeName); - context.put("expandColumn", getExpandColumn(genTable)); - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { - context.put("tree_parent_code", paramsObj.get(GenConstants.TREE_PARENT_CODE)); + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { + String options = genTable.getOptions(); + Dict paramsObj = JsonUtils.parseMap(options); + String parentMenuId = getParentMenuId(paramsObj); + context.put("parentMenuId", parentMenuId); } - if (paramsObj.containsKey(GenConstants.TREE_NAME)) { - context.put("tree_name", paramsObj.get(GenConstants.TREE_NAME)); - } - } - /** - * 获取模板信息 - * - * @return 模板列表 - */ - public static List getTemplateList(String tplCategory) { - List templates = new ArrayList<>(); - templates.add("vm/java/domain.java.vm"); - templates.add("vm/java/vo.java.vm"); - templates.add("vm/java/bo.java.vm"); - templates.add("vm/java/mapper.java.vm"); - templates.add("vm/java/service.java.vm"); - templates.add("vm/java/serviceImpl.java.vm"); - templates.add("vm/java/controller.java.vm"); - templates.add("vm/xml/mapper.xml.vm"); - if (DataBaseHelper.isOracle()) { - templates.add("vm/sql/oracle/sql.vm"); - } else if (DataBaseHelper.isPostgerSql()) { - templates.add("vm/sql/postgres/sql.vm"); - } else if (DataBaseHelper.isSqlServer()) { - templates.add("vm/sql/sqlserver/sql.vm"); - } else { - templates.add("vm/sql/sql.vm"); - } - templates.add("vm/ts/api.ts.vm"); - templates.add("vm/ts/types.ts.vm"); - if (GenConstants.TPL_CRUD.equals(tplCategory)) { - templates.add("vm/vue/index.vue.vm"); - } else if (GenConstants.TPL_TREE.equals(tplCategory)) { - templates.add("vm/vue/index-tree.vue.vm"); + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { + String options = genTable.getOptions(); + Dict paramsObj = JsonUtils.parseMap(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { + context.put("tree_parent_code", paramsObj.get(GenConstants.TREE_PARENT_CODE)); + } + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { + context.put("tree_name", paramsObj.get(GenConstants.TREE_NAME)); + } } /** - * 添加vben5 + * 获取模板信息 + * + * @return 模板列表 */ - templates.add("vm/vben5/api/index.ts.vm"); - templates.add("vm/vben5/api/model.d.ts.vm"); - templates.add("vm/vben5/views/data.ts.vm"); - if (GenConstants.TPL_CRUD.equals(tplCategory)) { - templates.add("vm/vben5/views/index_vben.vue.vm"); - templates.add("vm/vben5/views/popup.vue.vm"); - } else if (GenConstants.TPL_TREE.equals(tplCategory)) { - templates.add("vm/vben5/views/index_vben_tree.vue.vm"); - templates.add("vm/vben5/views/popup_tree.vue.vm"); - } - - return templates; - } - - /** - * 获取文件名 - */ - public static String getFileName(String template, GenTable genTable) { - // 文件名称 - String fileName = ""; - // 包路径 - String packageName = genTable.getPackageName(); - // 模块名 - String moduleName = genTable.getModuleName(); - // 大写类名 - String className = genTable.getClassName(); - // 业务名称 - String businessName = genTable.getBusinessName(); - - String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); - String mybatisPath = MYBATIS_PATH + "/" + moduleName; - String vuePath = "vue"; - - if (template.contains("domain.java.vm")) { - fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); - } - if (template.contains("vo.java.vm")) { - fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className); - } - if (template.contains("bo.java.vm")) { - fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); - } - if (template.contains("mapper.java.vm")) { - fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); - } else if (template.contains("service.java.vm")) { - fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); - } else if (template.contains("serviceImpl.java.vm")) { - fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); - } else if (template.contains("controller.java.vm")) { - fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); - } else if (template.contains("mapper.xml.vm")) { - fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); - } else if (template.contains("sql.vm")) { - fileName = businessName + "Menu.sql"; - } else if (template.contains("api.ts.vm")) { - fileName = StringUtils.format("{}/api/{}/{}/index.ts", vuePath, moduleName, businessName); - } else if (template.contains("types.ts.vm")) { - fileName = StringUtils.format("{}/api/{}/{}/types.ts", vuePath, moduleName, businessName); - } else if (template.contains("index.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } else if (template.contains("index-tree.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } - - // 判断是modal还是drawer - Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); - String popupComponent = "modal"; - if (ObjectUtil.isNotNull(paramsObj)) { - popupComponent = Optional - .ofNullable(paramsObj.getStr("popupComponent")) - .orElse("modal"); - } - String vben5Path = "vben5"; - if (template.contains("vm/vben5/api/index.ts.vm")) { - fileName = StringUtils.format("{}/api/{}/{}/index.ts", vben5Path, moduleName, businessName); - } - if (template.contains("vm/vben5/api/model.d.ts.vm")) { - fileName = StringUtils.format("{}/api/{}/{}/model.d.ts", vben5Path, moduleName, businessName); - } - if (template.contains("vm/vben5/views/index_vben.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vben5Path, moduleName, businessName); - } - if (template.contains("vm/vben5/views/index_vben_tree.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vben5Path, moduleName, businessName); - } - if (template.contains("vm/vben5/views/data.ts.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/data.ts", vben5Path, moduleName, businessName); - } - if (template.contains("vm/vben5/views/popup.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/{}-{}.vue", vben5Path, moduleName, businessName, businessName, popupComponent); - } - if (template.contains("vm/vben5/views/popup_tree.vue.vm")) { - fileName = StringUtils.format("{}/views/{}/{}/{}-{}.vue", vben5Path, moduleName, businessName, businessName, popupComponent); - } - - return fileName; - } - - /** - * 获取包前缀 - * - * @param packageName 包名称 - * @return 包前缀名称 - */ - public static String getPackagePrefix(String packageName) { - int lastIndex = packageName.lastIndexOf("."); - return StringUtils.substring(packageName, 0, lastIndex); - } - - /** - * 根据列类型获取导入包 - * - * @param genTable 业务表对象 - * @return 返回需要导入的包列表 - */ - public static HashSet getImportList(GenTable genTable) { - List columns = genTable.getColumns(); - HashSet importList = new HashSet<>(); - for (GenTableColumn column : columns) { - if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { - importList.add("java.util.Date"); - importList.add("com.fasterxml.jackson.annotation.JsonFormat"); - } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { - importList.add("java.math.BigDecimal"); - } else if (!column.isSuperColumn() && "imageUpload".equals(column.getHtmlType())) { - importList.add("org.ruoyi.common.translation.annotation.Translation"); - importList.add("org.ruoyi.common.translation.constant.TransConstant"); - } - } - return importList; - } - - /** - * 根据列类型获取字典组 - * - * @param genTable 业务表对象 - * @return 返回字典组 - */ - public static String getDicts(GenTable genTable) { - List columns = genTable.getColumns(); - Set dicts = new HashSet<>(); - addDicts(dicts, columns); - return StringUtils.join(dicts, ", "); - } - - /** - * 添加字典列表 - * - * @param dicts 字典列表 - * @param columns 列集合 - */ - public static void addDicts(Set dicts, List columns) { - for (GenTableColumn column : columns) { - if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( - column.getHtmlType(), - new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) { - dicts.add("'" + column.getDictType() + "'"); - } - } - } - - /** - * 获取权限前缀 - * - * @param moduleName 模块名称 - * @param businessName 业务名称 - * @return 返回权限前缀 - */ - public static String getPermissionPrefix(String moduleName, String businessName) { - return StringUtils.format("{}:{}", moduleName, businessName); - } - - /** - * 获取上级菜单ID字段 - * - * @param paramsObj 生成其他选项 - * @return 上级菜单ID字段 - */ - public static String getParentMenuId(Dict paramsObj) { - if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) - && StringUtils.isNotEmpty(paramsObj.getStr(GenConstants.PARENT_MENU_ID))) { - return paramsObj.getStr(GenConstants.PARENT_MENU_ID); - } - return DEFAULT_PARENT_MENU_ID; - } - - /** - * 获取树编码 - * - * @param paramsObj 生成其他选项 - * @return 树编码 - */ - public static String getTreecode(Map paramsObj) { - if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_CODE)) { - return StringUtils.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_CODE))); - } - return StringUtils.EMPTY; - } - - /** - * 获取树父编码 - * - * @param paramsObj 生成其他选项 - * @return 树父编码 - */ - public static String getTreeParentCode(Dict paramsObj) { - if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { - return StringUtils.toCamelCase(paramsObj.getStr(GenConstants.TREE_PARENT_CODE)); - } - return StringUtils.EMPTY; - } - - /** - * 获取树名称 - * - * @param paramsObj 生成其他选项 - * @return 树名称 - */ - public static String getTreeName(Dict paramsObj) { - if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_NAME)) { - return StringUtils.toCamelCase(paramsObj.getStr(GenConstants.TREE_NAME)); - } - return StringUtils.EMPTY; - } - - /** - * 获取需要在哪一列上面显示展开按钮 - * - * @param genTable 业务表对象 - * @return 展开按钮列序号 - */ - public static int getExpandColumn(GenTable genTable) { - String options = genTable.getOptions(); - Dict paramsObj = JsonUtils.parseMap(options); - String treeName = paramsObj.getStr(GenConstants.TREE_NAME); - int num = 0; - for (GenTableColumn column : genTable.getColumns()) { - if (column.isList()) { - num++; - String columnName = column.getColumnName(); - if (columnName.equals(treeName)) { - break; + public static List getTemplateList() { + List templates = new ArrayList<>(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/vo.java.vm"); + templates.add("vm/java/bo.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + if (DataBaseHelper.isOracle()) { + templates.add("vm/sql/oracle/sql.vm"); + } else if (DataBaseHelper.isPostgerSql()) { + templates.add("vm/sql/postgres/sql.vm"); + } else if (DataBaseHelper.isSqlServer()) { + templates.add("vm/sql/sqlserver/sql.vm"); + } else { + templates.add("vm/sql/sql.vm"); } - } + return templates; + } + + /** + * 获取文件名 + */ + public static String getFileName(String template, GenTable genTable) { + // 文件名称 + String fileName = ""; + // 包路径 + String packageName = genTable.getPackageName(); + // 模块名 + String moduleName = genTable.getModuleName(); + // 大写类名 + String className = genTable.getClassName(); + // 业务名称 + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String vuePath = "vue"; + + if (template.contains("domain.java.vm")) { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + } + if (template.contains("vo.java.vm")) { + fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className); + } + if (template.contains("bo.java.vm")) { + fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); + } + if (template.contains("mapper.java.vm")) { + fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + } else if (template.contains("service.java.vm")) { + fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); + } else if (template.contains("serviceImpl.java.vm")) { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } else if (template.contains("controller.java.vm")) { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } else if (template.contains("mapper.xml.vm")) { + fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + } else if (template.contains("sql.vm")) { + fileName = businessName + "Menu.sql"; + } else if (template.contains("api.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/index.ts", vuePath, moduleName, businessName); + } else if (template.contains("types.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/types.ts", vuePath, moduleName, businessName); + } else if (template.contains("index.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } else if (template.contains("index-tree.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + + // 判断是modal还是drawer + Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); + String popupComponent = "modal"; + if (ObjectUtil.isNotNull(paramsObj)) { + popupComponent = Optional + .ofNullable(paramsObj.getStr("popupComponent")) + .orElse("modal"); + } + String vben5Path = "vben5"; + if (template.contains("vm/vben5/api/index.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/index.ts", vben5Path, moduleName, businessName); + } + if (template.contains("vm/vben5/api/model.d.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/model.d.ts", vben5Path, moduleName, businessName); + } + if (template.contains("vm/vben5/views/index_vben.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vben5Path, moduleName, businessName); + } + if (template.contains("vm/vben5/views/index_vben_tree.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vben5Path, moduleName, businessName); + } + if (template.contains("vm/vben5/views/data.ts.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/data.ts", vben5Path, moduleName, businessName); + } + if (template.contains("vm/vben5/views/popup.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/{}-{}.vue", vben5Path, moduleName, businessName, + businessName, popupComponent); + } + if (template.contains("vm/vben5/views/popup_tree.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/{}-{}.vue", vben5Path, moduleName, businessName, + businessName, popupComponent); + } + + return fileName; + } + + /** + * 获取包前缀 + * + * @param packageName 包名称 + * @return 包前缀名称 + */ + public static String getPackagePrefix(String packageName) { + int lastIndex = packageName.lastIndexOf("."); + return StringUtils.substring(packageName, 0, lastIndex); + } + + /** + * 根据列类型获取导入包 + * + * @param genTable 业务表对象 + * @return 返回需要导入的包列表 + */ + public static HashSet getImportList(GenTable genTable) { + List columns = genTable.getColumns(); + HashSet importList = new HashSet<>(); + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { + importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); + } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { + importList.add("java.math.BigDecimal"); + } else if (!column.isSuperColumn() && "imageUpload".equals(column.getHtmlType())) { + importList.add("org.ruoyi.common.translation.annotation.Translation"); + importList.add("org.ruoyi.common.translation.constant.TransConstant"); + } + } + return importList; + } + + /** + * 根据列类型获取字典组 + * + * @param genTable 业务表对象 + * @return 返回字典组 + */ + public static String getDicts(GenTable genTable) { + List columns = genTable.getColumns(); + Set dicts = new HashSet<>(); + addDicts(dicts, columns); + return StringUtils.join(dicts, ", "); + } + + /** + * 添加字典列表 + * + * @param dicts 字典列表 + * @param columns 列集合 + */ + public static void addDicts(Set dicts, List columns) { + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( + column.getHtmlType(), + new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) { + dicts.add("'" + column.getDictType() + "'"); + } + } + } + + /** + * 获取权限前缀 + * + * @param moduleName 模块名称 + * @param businessName 业务名称 + * @return 返回权限前缀 + */ + public static String getPermissionPrefix(String moduleName, String businessName) { + return StringUtils.format("{}:{}", moduleName, businessName); + } + + /** + * 获取上级菜单ID字段 + * + * @param paramsObj 生成其他选项 + * @return 上级菜单ID字段 + */ + public static String getParentMenuId(Dict paramsObj) { + if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) + && StringUtils.isNotEmpty(paramsObj.getStr(GenConstants.PARENT_MENU_ID))) { + return paramsObj.getStr(GenConstants.PARENT_MENU_ID); + } + return DEFAULT_PARENT_MENU_ID; + } + + /** + * 获取树编码 + * + * @param paramsObj 生成其他选项 + * @return 树编码 + */ + public static String getTreecode(Map paramsObj) { + if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_CODE)) { + return StringUtils.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_CODE))); + } + return StringUtils.EMPTY; + } + + /** + * 获取树父编码 + * + * @param paramsObj 生成其他选项 + * @return 树父编码 + */ + public static String getTreeParentCode(Dict paramsObj) { + if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { + return StringUtils.toCamelCase(paramsObj.getStr(GenConstants.TREE_PARENT_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 获取树名称 + * + * @param paramsObj 生成其他选项 + * @return 树名称 + */ + public static String getTreeName(Dict paramsObj) { + if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_NAME)) { + return StringUtils.toCamelCase(paramsObj.getStr(GenConstants.TREE_NAME)); + } + return StringUtils.EMPTY; + } + + /** + * 获取需要在哪一列上面显示展开按钮 + * + * @param genTable 业务表对象 + * @return 展开按钮列序号 + */ + public static int getExpandColumn(GenTable genTable) { + String options = genTable.getOptions(); + Dict paramsObj = JsonUtils.parseMap(options); + String treeName = paramsObj.getStr(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) { + if (column.isList()) { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) { + break; + } + } + } + return num; } - return num; - } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml index f4e49357..59102a63 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -1,93 +1,8 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 6c994d82..bde64ffe 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -1,220 +1,59 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - + + - - - - - - - - - + diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm index 3a0bc2bd..81cf1798 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm @@ -21,28 +21,28 @@ import ${import}; @AutoMapper(target = ${ClassName}.class, reverseConvertGenerate = false) public class ${ClassName}Bo extends BaseEntity { -#foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField) && ($column.query || $column.insert || $column.edit)) - /** - * $column.columnComment - */ -#if($column.insert && $column.edit) -#set($Group="AddGroup.class, EditGroup.class") -#elseif($column.insert) -#set($Group="AddGroup.class") -#elseif($column.edit) -#set($Group="EditGroup.class") -#end -#if($column.required) -#if($column.javaType == 'String') - @NotBlank(message = "$column.columnComment不能为空", groups = { $Group }) -#else - @NotNull(message = "$column.columnComment不能为空", groups = { $Group }) -#end -#end - private $column.javaType $column.javaField; + #foreach ($column in $columns) + #if(!$table.isSuperColumn($column.javaField) && ($column.query || $column.insert || $column.edit)) + /** + * $column.columnComment + */ + #if($column.insert && $column.edit) + #set($Group="AddGroup.class, EditGroup.class") + #elseif($column.insert) + #set($Group="AddGroup.class") + #elseif($column.edit) + #set($Group="EditGroup.class") + #end + #if($column.required) + #if($column.javaType == 'String') + @NotBlank(message = "$column.columnComment不能为空", groups = { $Group }) + #else + @NotNull(message = "$column.columnComment不能为空", groups = { $Group }) + #end + #end + private $column.javaType $column.javaField; -#end -#end + #end + #end } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index 47808b6b..7d70e1b8 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -39,21 +39,21 @@ public class ${ClassName}Controller extends BaseController { private final I${ClassName}Service ${className}Service; - /** - * 查询${functionName}列表 - */ - @SaCheckPermission("${permissionPrefix}:list") - @GetMapping("/list") -#if($table.crud || $table.sub) +/** + * 查询${functionName}列表 + */ +@SaCheckPermission("${permissionPrefix}:list") +@GetMapping("/list") + #if($table.crud || $table.sub) public TableDataInfo<${ClassName}Vo> list(${ClassName}Bo bo, PageQuery pageQuery) { return ${className}Service.queryPageList(bo, pageQuery); } -#elseif($table.tree) - public R> list(${ClassName}Bo bo) { - List<${ClassName}Vo> list = ${className}Service.queryList(bo); - return R.ok(list); - } -#end + #elseif($table.tree) + public R> list(${ClassName}Bo bo) { + List<${ClassName}Vo> list = ${className}Service.queryList(bo); + return R.ok(list); + } + #end /** * 导出${functionName}列表 diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm index b1f8d92f..39bd6e5e 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -1,20 +1,20 @@ package ${packageName}.domain; -#foreach ($column in $columns) -#if($column.javaField=='tenantId') -#set($IsTenant=1) -#end -#end -#if($IsTenant==1) -import core.tenant.common.org.ruoyi.TenantEntity; -#else -#end + #foreach ($column in $columns) + #if($column.javaField=='tenantId') + #set($IsTenant=1) + #end + #end + #if($IsTenant==1) + import core.tenant.common.org.ruoyi.TenantEntity; + #else + #end import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; -#foreach ($import in $importList) -import ${import}; -#end + #foreach ($import in $importList) + import ${import}; + #end import java.io.Serial; @@ -25,35 +25,35 @@ import java.io.Serial; * @date ${datetime} */ #if($IsTenant==1) -#set($Entity="TenantEntity") + #set($Entity="TenantEntity") #else -#set($Entity="BaseEntity") + #set($Entity="BaseEntity") #end @Data @EqualsAndHashCode(callSuper = true) @TableName("${tableName}") public class ${ClassName} extends ${Entity} { - @Serial - private static final long serialVersionUID = 1L; +@Serial +private static final long serialVersionUID=1L; #foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField)) + #if(!$table.isSuperColumn($column.javaField)) /** * $column.columnComment */ -#if($column.javaField=='delFlag') - @TableLogic -#end -#if($column.javaField=='version') - @Version -#end -#if($column.isPk==1) - @TableId(value = "$column.columnName") -#end + #if($column.javaField=='delFlag') + @TableLogic + #end + #if($column.javaField=='version') + @Version + #end + #if($column.isPk==1) + @TableId(value = "$column.columnName") + #end private $column.javaType $column.javaField; -#end + #end #end } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm index 97b98361..9720761a 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm @@ -3,10 +3,10 @@ package ${packageName}.service; import ${packageName}.domain.${ClassName}; import ${packageName}.domain.vo.${ClassName}Vo; import ${packageName}.domain.bo.${ClassName}Bo; -#if($table.crud || $table.sub) -import org.ruoyi.core.page.TableDataInfo; -import org.ruoyi.core.page.PageQuery; -#end + #if($table.crud || $table.sub) + import org.ruoyi.core.page.TableDataInfo; + import org.ruoyi.core.page.PageQuery; + #end import java.util.Collection; import java.util.List; @@ -22,14 +22,14 @@ public interface I${ClassName}Service { /** * 查询${functionName} */ - ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}); + ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}); -#if($table.crud || $table.sub) - /** - * 查询${functionName}列表 - */ - TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery); -#end + #if($table.crud || $table.sub) + /** + * 查询${functionName}列表 + */ + TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery); + #end /** * 查询${functionName}列表 diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index 7577d2cb..649a5b9b 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -2,10 +2,10 @@ package ${packageName}.service.impl; import org.ruoyi.common.core.utils.MapstructUtils; #if($table.crud || $table.sub) -import org.ruoyi.core.page.TableDataInfo; -import org.ruoyi.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -#end + import org.ruoyi.core.page.TableDataInfo; + import org.ruoyi.core.page.PageQuery; + import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + #end import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; @@ -36,21 +36,21 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { * 查询${functionName} */ @Override - public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){ + public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}) { return baseMapper.selectVoById(${pkColumn.javaField}); } -#if($table.crud || $table.sub) - /** - * 查询${functionName}列表 - */ - @Override - public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) { - LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo); - Page<${ClassName}Vo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } -#end + #if($table.crud || $table.sub) + /** + * 查询${functionName}列表 + */ + @Override + public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) { + LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo); + Page<${ClassName}Vo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + #end /** * 查询${functionName}列表 @@ -64,27 +64,27 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { private LambdaQueryWrapper<${ClassName}> buildQueryWrapper(${ClassName}Bo bo) { Map params = bo.getParams(); LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery(); -#foreach($column in $columns) -#if($column.query) -#set($queryType=$column.queryType) -#set($javaField=$column.javaField) -#set($javaType=$column.javaType) -#set($columnName=$column.columnName) -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#set($mpMethod=$column.queryType.toLowerCase()) -#if($queryType != 'BETWEEN') -#if($javaType == 'String') -#set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())') -#else -#set($condition='bo.get'+$AttrName+'() != null') -#end - lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName()); -#else - lqw.between(params.get("begin$AttrName") != null && params.get("end$AttrName") != null, - ${ClassName}::get$AttrName ,params.get("begin$AttrName"), params.get("end$AttrName")); -#end -#end -#end + #foreach($column in $columns) + #if($column.query) + #set($queryType=$column.queryType) + #set($javaField=$column.javaField) + #set($javaType=$column.javaType) + #set($columnName=$column.columnName) + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set($mpMethod=$column.queryType.toLowerCase()) + #if($queryType != 'BETWEEN') + #if($javaType == 'String') + #set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())') + #else + #set($condition='bo.get'+$AttrName+'() != null') + #end + lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName()); + #else + lqw.between(params.get("begin$AttrName") != null && params.get("end$AttrName") != null, + ${ClassName}::get$AttrName , params.get("begin$AttrName"), params.get("end$AttrName")); + #end + #end + #end return lqw; } @@ -93,10 +93,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { */ @Override public Boolean insertByBo(${ClassName}Bo bo) { - ${ClassName} add = MapstructUtils.convert(bo, ${ClassName}.class); + ${ClassName} add = MapstructUtils.convert(bo, ${ClassName}. class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; -#set($pk=$pkColumn.javaField.substring(0,1).toUpperCase() + ${pkColumn.javaField.substring(1)}) + #set($pk=$pkColumn.javaField.substring(0,1).toUpperCase() + ${pkColumn.javaField.substring(1)}) if (flag) { bo.set$pk(add.get$pk()); } @@ -108,7 +108,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { */ @Override public Boolean updateByBo(${ClassName}Bo bo) { - ${ClassName} update = MapstructUtils.convert(bo, ${ClassName}.class); + ${ClassName} update = MapstructUtils.convert(bo, ${ClassName}. class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } @@ -116,7 +116,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(${ClassName} entity){ + private void validEntityBeforeSave(${ClassName} entity) { //TODO 做一些数据校验,如唯一约束 } @@ -125,7 +125,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { */ @Override public Boolean deleteWithValidByIds(Collection<${pkColumn.javaType}> ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm index 2f419165..59eb2e82 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm @@ -1,8 +1,8 @@ package ${packageName}.domain.vo; -#foreach ($import in $importList) -import ${import}; -#end + #foreach ($import in $importList) + import ${import}; + #end import ${packageName}.domain.${ClassName}; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -16,7 +16,6 @@ import java.io.Serializable; import java.util.Date; - /** * ${functionName}视图对象 ${tableName} * @@ -31,29 +30,29 @@ public class ${ClassName}Vo implements Serializable { @Serial private static final long serialVersionUID = 1L; -#foreach ($column in $columns) -#if($column.list) - /** - * $column.columnComment - */ -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#if(${column.dictType} && ${column.dictType} != '') - @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "${column.dictType}") -#elseif($parentheseIndex != -1) - @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") -#else - @ExcelProperty(value = "${comment}") -#end - private $column.javaType $column.javaField; + #foreach ($column in $columns) + #if($column.list) + /** + * $column.columnComment + */ + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if(${column.dictType} && ${column.dictType} != '') + @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "${column.dictType}") + #elseif($parentheseIndex != -1) + @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") + #else + @ExcelProperty(value = "${comment}") + #end + private $column.javaType $column.javaField; -#end -#end + #end + #end } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/js/api.js.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/js/api.js.vm deleted file mode 100644 index 9295524a..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/js/api.js.vm +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询${functionName}列表 -export function list${BusinessName}(query) { - return request({ - url: '/${moduleName}/${businessName}/list', - method: 'get', - params: query - }) -} - -// 查询${functionName}详细 -export function get${BusinessName}(${pkColumn.javaField}) { - return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, - method: 'get' - }) -} - -// 新增${functionName} -export function add${BusinessName}(data) { - return request({ - url: '/${moduleName}/${businessName}', - method: 'post', - data: data - }) -} - -// 修改${functionName} -export function update${BusinessName}(data) { - return request({ - url: '/${moduleName}/${businessName}', - method: 'put', - data: data - }) -} - -// 删除${functionName} -export function del${BusinessName}(${pkColumn.javaField}) { - return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, - method: 'delete' - }) -} diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm deleted file mode 100644 index 9ef9ff4a..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm +++ /dev/null @@ -1,63 +0,0 @@ -import request from '@/utils/request'; -import {AxiosPromise} from 'axios'; -import {${BusinessName}Form, ${BusinessName}Query, ${BusinessName}VO} from '@/api/'; - -/** - * 查询${functionName}列表 - * @param query - * @returns {*} - */ - -export const list${BusinessName} = (query?: ${BusinessName}Query): AxiosPromise<${BusinessName}VO[]> => { - return request({ - url: '/${moduleName}/${businessName}/list', - method: 'get', - params: query - }); -}; - -/** - * 查询${functionName}详细 - * @param ${pkColumn.javaField} - */ -export const get${BusinessName} = (${pkColumn.javaField}: string | number): AxiosPromise<${BusinessName}VO> => { - return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, - method: 'get' - }); -}; - -/** - * 新增${functionName} - * @param data - */ -export const add${BusinessName} = (data: ${BusinessName}Form) => { - return request({ - url: '/${moduleName}/${businessName}', - method: 'post', - data: data - }); -}; - -/** - * 修改${functionName} - * @param data - */ -export const update${BusinessName} = (data: ${BusinessName}Form) => { - return request({ - url: '/${moduleName}/${businessName}', - method: 'put', - data: data - }); -}; - -/** - * 删除${functionName} - * @param ${pkColumn.javaField} - */ -export const del${BusinessName} = (${pkColumn.javaField}: string | number | Array) => { - return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, - method: 'delete' - }); -}; diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/types.ts.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/types.ts.vm deleted file mode 100644 index 99359e02..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/types.ts.vm +++ /dev/null @@ -1,44 +0,0 @@ -export interface ${BusinessName}VO { -#foreach ($column in $columns) -#if($column.insert || $column.edit) - /** - * $column.columnComment - */ - $column.javaField:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number; - #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number; - #elseif($column.javaType == 'Boolean') boolean; - #else string; - #end -#end -#end -} - -export interface ${BusinessName}Form extends BaseEntity { -#foreach ($column in $columns) -#if($column.insert || $column.edit) - /** - * $column.columnComment - */ - $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number; - #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number; - #elseif($column.javaType == 'Boolean') boolean; - #else string; - #end -#end -#end -} - -export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{ -#foreach ($column in $columns) -#if($column.query) - /** - * $column.columnComment - */ - $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number; - #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number; - #elseif($column.javaType == 'Boolean') boolean; - #else string; - #end -#end -#end -} diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm deleted file mode 100644 index 81aef5ca..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm +++ /dev/null @@ -1,509 +0,0 @@ - - - diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm deleted file mode 100644 index 2f65b83c..00000000 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ /dev/null @@ -1,475 +0,0 @@ - - - diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm index 9fb48d99..473e757f 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -1,7 +1,7 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd">