若依 3.0
This commit is contained in:
		
							
								
								
									
										34
									
								
								ruoyi-generator/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								ruoyi-generator/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <parent> | ||||
|         <artifactId>ruoyi</artifactId> | ||||
|         <groupId>com.ruoyi</groupId> | ||||
|         <version>3.0.0</version> | ||||
|     </parent> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|     <artifactId>ruoyi-generator</artifactId> | ||||
|  | ||||
|     <description> | ||||
|         generator代码生成 | ||||
|     </description> | ||||
|  | ||||
|     <dependencies> | ||||
|  | ||||
|         <!--velocity代码生成使用模板 --> | ||||
|         <dependency> | ||||
|             <groupId>org.apache.velocity</groupId> | ||||
|             <artifactId>velocity</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- 通用工具--> | ||||
|         <dependency> | ||||
|             <groupId>com.ruoyi</groupId> | ||||
|             <artifactId>ruoyi-common</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|     </dependencies> | ||||
|  | ||||
| </project> | ||||
| @@ -0,0 +1,73 @@ | ||||
| package com.ruoyi.generator.config; | ||||
|  | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | ||||
| import org.springframework.context.annotation.PropertySource; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| /** | ||||
|  * 读取代码生成相关配置 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| @Component | ||||
| @ConfigurationProperties(prefix = "gen") | ||||
| @PropertySource(value = { "classpath:generator.yml" }) | ||||
| public class GenConfig | ||||
| { | ||||
|     /** 作者 */ | ||||
|     public static String author; | ||||
|  | ||||
|     /** 生成包路径 */ | ||||
|     public static String packageName; | ||||
|  | ||||
|     /** 自动去除表前缀,默认是false */ | ||||
|     public static boolean autoRemovePre; | ||||
|  | ||||
|     /** 表前缀(类名不会包含表前缀) */ | ||||
|     public static String tablePrefix; | ||||
|  | ||||
|     public static String getAuthor() | ||||
|     { | ||||
|         return author; | ||||
|     } | ||||
|  | ||||
|     @Value("${author}") | ||||
|     public void setAuthor(String author) | ||||
|     { | ||||
|         GenConfig.author = author; | ||||
|     } | ||||
|  | ||||
|     public static String getPackageName() | ||||
|     { | ||||
|         return packageName; | ||||
|     } | ||||
|  | ||||
|     @Value("${packageName}") | ||||
|     public void setPackageName(String packageName) | ||||
|     { | ||||
|         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; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,186 @@ | ||||
| package com.ruoyi.generator.controller; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import org.apache.commons.io.IOUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| 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 com.ruoyi.common.annotation.Log; | ||||
| import com.ruoyi.common.core.controller.BaseController; | ||||
| import com.ruoyi.common.core.domain.AjaxResult; | ||||
| import com.ruoyi.common.core.page.TableDataInfo; | ||||
| import com.ruoyi.common.core.text.Convert; | ||||
| import com.ruoyi.common.enums.BusinessType; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
| import com.ruoyi.generator.service.IGenTableColumnService; | ||||
| import com.ruoyi.generator.service.IGenTableService; | ||||
|  | ||||
| /** | ||||
|  * 代码生成 操作处理 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/tool/gen") | ||||
| public class GenController extends BaseController | ||||
| { | ||||
|     @Autowired | ||||
|     private IGenTableService genTableService; | ||||
|  | ||||
|     @Autowired | ||||
|     private IGenTableColumnService genTableColumnService; | ||||
|  | ||||
|     /** | ||||
|      * 查询代码生成列表 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:list')") | ||||
|     @GetMapping("/list") | ||||
|     public TableDataInfo genList(GenTable genTable) | ||||
|     { | ||||
|         startPage(); | ||||
|         List<GenTable> list = genTableService.selectGenTableList(genTable); | ||||
|         return getDataTable(list); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改代码生成业务 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:query')") | ||||
|     @GetMapping(value = "/{talbleId}") | ||||
|     public AjaxResult getInfo(@PathVariable Long talbleId) | ||||
|     { | ||||
|         GenTable table = genTableService.selectGenTableById(talbleId); | ||||
|         List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId); | ||||
|         Map<String, Object> map = new HashMap<String, Object>(); | ||||
|         map.put("info", table); | ||||
|         map.put("rows", list); | ||||
|         return AjaxResult.success(map); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询数据库列表 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:list')") | ||||
|     @GetMapping("/db/list") | ||||
|     public TableDataInfo dataList(GenTable genTable) | ||||
|     { | ||||
|         startPage(); | ||||
|         List<GenTable> list = genTableService.selectDbTableList(genTable); | ||||
|         return getDataTable(list); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询数据表字段列表 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:list')") | ||||
|     @GetMapping(value = "/column/{talbleId}") | ||||
|     public TableDataInfo columnList(Long tableId) | ||||
|     { | ||||
|         TableDataInfo dataInfo = new TableDataInfo(); | ||||
|         List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId); | ||||
|         dataInfo.setRows(list); | ||||
|         dataInfo.setTotal(list.size()); | ||||
|         return dataInfo; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 导入表结构(保存) | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:list')") | ||||
|     @Log(title = "代码生成", businessType = BusinessType.IMPORT) | ||||
|     @PostMapping("/importTable") | ||||
|     public AjaxResult importTableSave(String tables) | ||||
|     { | ||||
|         String[] tableNames = Convert.toStrArray(tables); | ||||
|         // 查询表信息 | ||||
|         List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames); | ||||
|         genTableService.importGenTable(tableList); | ||||
|         return AjaxResult.success(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改保存代码生成业务 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:edit')") | ||||
|     @Log(title = "代码生成", businessType = BusinessType.UPDATE) | ||||
|     @PutMapping | ||||
|     public AjaxResult editSave(@Validated @RequestBody GenTable genTable) | ||||
|     { | ||||
|         genTableService.validateEdit(genTable); | ||||
|         genTableService.updateGenTable(genTable); | ||||
|         return AjaxResult.success(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除代码生成 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:remove')") | ||||
|     @Log(title = "代码生成", businessType = BusinessType.DELETE) | ||||
|     @DeleteMapping("/{tableIds}") | ||||
|     public AjaxResult remove(@PathVariable Long[] tableIds) | ||||
|     { | ||||
|         genTableService.deleteGenTableByIds(tableIds); | ||||
|         return AjaxResult.success(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 预览代码 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:preview')") | ||||
|     @GetMapping("/preview/{tableId}") | ||||
|     public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException | ||||
|     { | ||||
|         Map<String, String> dataMap = genTableService.previewCode(tableId); | ||||
|         return AjaxResult.success(dataMap); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成代码 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:code')") | ||||
|     @Log(title = "代码生成", businessType = BusinessType.GENCODE) | ||||
|     @GetMapping("/genCode/{tableName}") | ||||
|     public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException | ||||
|     { | ||||
|         byte[] data = genTableService.generatorCode(tableName); | ||||
|         genCode(response, data); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 批量生成代码 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('tool:gen:code')") | ||||
|     @Log(title = "代码生成", businessType = BusinessType.GENCODE) | ||||
|     @GetMapping("/batchGenCode") | ||||
|     public void batchGenCode(HttpServletResponse response, String tables) throws IOException | ||||
|     { | ||||
|         String[] tableNames = Convert.toStrArray(tables); | ||||
|         byte[] data = genTableService.generatorCode(tableNames); | ||||
|         genCode(response, data); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成zip文件 | ||||
|      */ | ||||
|     private void genCode(HttpServletResponse response, byte[] data) throws IOException | ||||
|     { | ||||
|         response.reset(); | ||||
|         response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); | ||||
|         response.addHeader("Content-Length", "" + data.length); | ||||
|         response.setContentType("application/octet-stream; charset=UTF-8"); | ||||
|         IOUtils.write(data, response.getOutputStream()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,271 @@ | ||||
| package com.ruoyi.generator.domain; | ||||
|  | ||||
| import java.util.List; | ||||
| import javax.validation.Valid; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import org.apache.commons.lang3.ArrayUtils; | ||||
| import com.ruoyi.common.constant.GenConstants; | ||||
| import com.ruoyi.common.core.domain.BaseEntity; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
|  | ||||
| /** | ||||
|  * 业务表 gen_table | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public class GenTable extends BaseEntity | ||||
| { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** 编号 */ | ||||
|     private Long tableId; | ||||
|  | ||||
|     /** 表名称 */ | ||||
|     @NotBlank(message = "表名称不能为空") | ||||
|     private String tableName; | ||||
|  | ||||
|     /** 表描述 */ | ||||
|     @NotBlank(message = "表描述不能为空") | ||||
|     private String tableComment; | ||||
|  | ||||
|     /** 实体类名称(首字母大写) */ | ||||
|     @NotBlank(message = "实体类名称不能为空") | ||||
|     private String className; | ||||
|  | ||||
|     /** 使用的模板(crud单表操作 tree树表操作) */ | ||||
|     private String tplCategory; | ||||
|  | ||||
|     /** 生成包路径 */ | ||||
|     @NotBlank(message = "生成包路径不能为空") | ||||
|     private String packageName; | ||||
|  | ||||
|     /** 生成模块名 */ | ||||
|     @NotBlank(message = "生成模块名不能为空") | ||||
|     private String moduleName; | ||||
|  | ||||
|     /** 生成业务名 */ | ||||
|     @NotBlank(message = "生成业务名不能为空") | ||||
|     private String businessName; | ||||
|  | ||||
|     /** 生成功能名 */ | ||||
|     @NotBlank(message = "生成功能名不能为空") | ||||
|     private String functionName; | ||||
|  | ||||
|     /** 生成作者 */ | ||||
|     @NotBlank(message = "作者不能为空") | ||||
|     private String functionAuthor; | ||||
|  | ||||
|     /** 主键信息 */ | ||||
|     private GenTableColumn pkColumn; | ||||
|  | ||||
|     /** 表列信息 */ | ||||
|     @Valid | ||||
|     private List<GenTableColumn> columns; | ||||
|  | ||||
|     /** 其它生成选项 */ | ||||
|     private String options; | ||||
|  | ||||
|     /** 树编码字段 */ | ||||
|     private String treeCode; | ||||
|  | ||||
|     /** 树父编码字段 */ | ||||
|     private String treeParentCode; | ||||
|  | ||||
|     /** 树名称字段 */ | ||||
|     private String treeName; | ||||
|  | ||||
|     public Long getTableId() | ||||
|     { | ||||
|         return tableId; | ||||
|     } | ||||
|  | ||||
|     public void setTableId(Long tableId) | ||||
|     { | ||||
|         this.tableId = tableId; | ||||
|     } | ||||
|  | ||||
|     public String getTableName() | ||||
|     { | ||||
|         return tableName; | ||||
|     } | ||||
|  | ||||
|     public void setTableName(String tableName) | ||||
|     { | ||||
|         this.tableName = tableName; | ||||
|     } | ||||
|  | ||||
|     public String getTableComment() | ||||
|     { | ||||
|         return tableComment; | ||||
|     } | ||||
|  | ||||
|     public void setTableComment(String tableComment) | ||||
|     { | ||||
|         this.tableComment = tableComment; | ||||
|     } | ||||
|  | ||||
|     public String getClassName() | ||||
|     { | ||||
|         return className; | ||||
|     } | ||||
|  | ||||
|     public void setClassName(String className) | ||||
|     { | ||||
|         this.className = className; | ||||
|     } | ||||
|  | ||||
|     public String getTplCategory() | ||||
|     { | ||||
|         return tplCategory; | ||||
|     } | ||||
|  | ||||
|     public void setTplCategory(String tplCategory) | ||||
|     { | ||||
|         this.tplCategory = tplCategory; | ||||
|     } | ||||
|  | ||||
|     public String getPackageName() | ||||
|     { | ||||
|         return packageName; | ||||
|     } | ||||
|  | ||||
|     public void setPackageName(String packageName) | ||||
|     { | ||||
|         this.packageName = packageName; | ||||
|     } | ||||
|  | ||||
|     public String getModuleName() | ||||
|     { | ||||
|         return moduleName; | ||||
|     } | ||||
|  | ||||
|     public void setModuleName(String moduleName) | ||||
|     { | ||||
|         this.moduleName = moduleName; | ||||
|     } | ||||
|  | ||||
|     public String getBusinessName() | ||||
|     { | ||||
|         return businessName; | ||||
|     } | ||||
|  | ||||
|     public void setBusinessName(String businessName) | ||||
|     { | ||||
|         this.businessName = businessName; | ||||
|     } | ||||
|  | ||||
|     public String getFunctionName() | ||||
|     { | ||||
|         return functionName; | ||||
|     } | ||||
|  | ||||
|     public void setFunctionName(String functionName) | ||||
|     { | ||||
|         this.functionName = functionName; | ||||
|     } | ||||
|  | ||||
|     public String getFunctionAuthor() | ||||
|     { | ||||
|         return functionAuthor; | ||||
|     } | ||||
|  | ||||
|     public void setFunctionAuthor(String functionAuthor) | ||||
|     { | ||||
|         this.functionAuthor = functionAuthor; | ||||
|     } | ||||
|  | ||||
|     public GenTableColumn getPkColumn() | ||||
|     { | ||||
|         return pkColumn; | ||||
|     } | ||||
|  | ||||
|     public void setPkColumn(GenTableColumn pkColumn) | ||||
|     { | ||||
|         this.pkColumn = pkColumn; | ||||
|     } | ||||
|  | ||||
|     public List<GenTableColumn> getColumns() | ||||
|     { | ||||
|         return columns; | ||||
|     } | ||||
|  | ||||
|     public void setColumns(List<GenTableColumn> columns) | ||||
|     { | ||||
|         this.columns = columns; | ||||
|     } | ||||
|  | ||||
|     public String getOptions() | ||||
|     { | ||||
|         return options; | ||||
|     } | ||||
|  | ||||
|     public void setOptions(String options) | ||||
|     { | ||||
|         this.options = options; | ||||
|     } | ||||
|  | ||||
|     public String getTreeCode() | ||||
|     { | ||||
|         return treeCode; | ||||
|     } | ||||
|  | ||||
|     public void setTreeCode(String treeCode) | ||||
|     { | ||||
|         this.treeCode = treeCode; | ||||
|     } | ||||
|  | ||||
|     public String getTreeParentCode() | ||||
|     { | ||||
|         return treeParentCode; | ||||
|     } | ||||
|  | ||||
|     public void setTreeParentCode(String treeParentCode) | ||||
|     { | ||||
|         this.treeParentCode = treeParentCode; | ||||
|     } | ||||
|  | ||||
|     public String getTreeName() | ||||
|     { | ||||
|         return treeName; | ||||
|     } | ||||
|  | ||||
|     public void setTreeName(String treeName) | ||||
|     { | ||||
|         this.treeName = treeName; | ||||
|     } | ||||
|  | ||||
|     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) | ||||
|     { | ||||
|         if (isTree(tplCategory)) | ||||
|         { | ||||
|             return StringUtils.equalsAnyIgnoreCase(javaField, | ||||
|                     ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); | ||||
|         } | ||||
|         return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,368 @@ | ||||
| package com.ruoyi.generator.domain; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import com.ruoyi.common.core.domain.BaseEntity; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
|  | ||||
| /** | ||||
|  * 代码生成业务字段表 gen_table_column | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public class GenTableColumn extends BaseEntity | ||||
| { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** 编号 */ | ||||
|     private Long columnId; | ||||
|  | ||||
|     /** 归属表编号 */ | ||||
|     private Long tableId; | ||||
|  | ||||
|     /** 列名称 */ | ||||
|     private String columnName; | ||||
|  | ||||
|     /** 列描述 */ | ||||
|     private String columnComment; | ||||
|  | ||||
|     /** 列类型 */ | ||||
|     private String columnType; | ||||
|  | ||||
|     /** JAVA类型 */ | ||||
|     private String javaType; | ||||
|  | ||||
|     /** JAVA字段名 */ | ||||
|     @NotBlank(message = "Java属性不能为空") | ||||
|     private String javaField; | ||||
|  | ||||
|     /** 是否主键(1是) */ | ||||
|     private String isPk; | ||||
|  | ||||
|     /** 是否自增(1是) */ | ||||
|     private String isIncrement; | ||||
|  | ||||
|     /** 是否必填(1是) */ | ||||
|     private String isRequired; | ||||
|  | ||||
|     /** 是否为插入字段(1是) */ | ||||
|     private String isInsert; | ||||
|  | ||||
|     /** 是否编辑字段(1是) */ | ||||
|     private String isEdit; | ||||
|  | ||||
|     /** 是否列表字段(1是) */ | ||||
|     private String isList; | ||||
|  | ||||
|     /** 是否查询字段(1是) */ | ||||
|     private String isQuery; | ||||
|  | ||||
|     /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */ | ||||
|     private String queryType; | ||||
|  | ||||
|     /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件) */ | ||||
|     private String htmlType; | ||||
|  | ||||
|     /** 字典类型 */ | ||||
|     private String dictType; | ||||
|  | ||||
|     /** 排序 */ | ||||
|     private Integer sort; | ||||
|  | ||||
|     public void setColumnId(Long columnId) | ||||
|     { | ||||
|         this.columnId = columnId; | ||||
|     } | ||||
|  | ||||
|     public Long getColumnId() | ||||
|     { | ||||
|         return columnId; | ||||
|     } | ||||
|  | ||||
|     public void setTableId(Long tableId) | ||||
|     { | ||||
|         this.tableId = tableId; | ||||
|     } | ||||
|  | ||||
|     public Long getTableId() | ||||
|     { | ||||
|         return tableId; | ||||
|     } | ||||
|  | ||||
|     public void setColumnName(String columnName) | ||||
|     { | ||||
|         this.columnName = columnName; | ||||
|     } | ||||
|  | ||||
|     public String getColumnName() | ||||
|     { | ||||
|         return columnName; | ||||
|     } | ||||
|  | ||||
|     public void setColumnComment(String columnComment) | ||||
|     { | ||||
|         this.columnComment = columnComment; | ||||
|     } | ||||
|  | ||||
|     public String getColumnComment() | ||||
|     { | ||||
|         return columnComment; | ||||
|     } | ||||
|  | ||||
|     public void setColumnType(String columnType) | ||||
|     { | ||||
|         this.columnType = columnType; | ||||
|     } | ||||
|  | ||||
|     public String getColumnType() | ||||
|     { | ||||
|         return columnType; | ||||
|     } | ||||
|  | ||||
|     public void setJavaType(String javaType) | ||||
|     { | ||||
|         this.javaType = javaType; | ||||
|     } | ||||
|  | ||||
|     public String getJavaType() | ||||
|     { | ||||
|         return javaType; | ||||
|     } | ||||
|  | ||||
|     public void setJavaField(String javaField) | ||||
|     { | ||||
|         this.javaField = javaField; | ||||
|     } | ||||
|  | ||||
|     public String getJavaField() | ||||
|     { | ||||
|         return javaField; | ||||
|     } | ||||
|  | ||||
|     public void setIsPk(String isPk) | ||||
|     { | ||||
|         this.isPk = isPk; | ||||
|     } | ||||
|  | ||||
|     public String getIsPk() | ||||
|     { | ||||
|         return isPk; | ||||
|     } | ||||
|  | ||||
|     public boolean isPk() | ||||
|     { | ||||
|         return isPk(this.isPk); | ||||
|     } | ||||
|  | ||||
|     public boolean isPk(String isPk) | ||||
|     { | ||||
|         return isPk != null && StringUtils.equals("1", isPk); | ||||
|     } | ||||
|  | ||||
|     public String getIsIncrement() | ||||
|     { | ||||
|         return isIncrement; | ||||
|     } | ||||
|  | ||||
|     public void setIsIncrement(String isIncrement) | ||||
|     { | ||||
|         this.isIncrement = isIncrement; | ||||
|     } | ||||
|  | ||||
|     public boolean isIncrement() | ||||
|     { | ||||
|         return isIncrement(this.isIncrement); | ||||
|     } | ||||
|  | ||||
|     public boolean isIncrement(String isIncrement) | ||||
|     { | ||||
|         return isIncrement != null && StringUtils.equals("1", isIncrement); | ||||
|     } | ||||
|  | ||||
|     public void setIsRequired(String isRequired) | ||||
|     { | ||||
|         this.isRequired = isRequired; | ||||
|     } | ||||
|  | ||||
|     public String getIsRequired() | ||||
|     { | ||||
|         return isRequired; | ||||
|     } | ||||
|  | ||||
|     public boolean isRequired() | ||||
|     { | ||||
|         return isRequired(this.isRequired); | ||||
|     } | ||||
|  | ||||
|     public boolean isRequired(String isRequired) | ||||
|     { | ||||
|         return isRequired != null && StringUtils.equals("1", isRequired); | ||||
|     } | ||||
|  | ||||
|     public void setIsInsert(String isInsert) | ||||
|     { | ||||
|         this.isInsert = isInsert; | ||||
|     } | ||||
|  | ||||
|     public String getIsInsert() | ||||
|     { | ||||
|         return isInsert; | ||||
|     } | ||||
|  | ||||
|     public boolean isInsert() | ||||
|     { | ||||
|         return isInsert(this.isInsert); | ||||
|     } | ||||
|  | ||||
|     public boolean isInsert(String isInsert) | ||||
|     { | ||||
|         return isInsert != null && StringUtils.equals("1", isInsert); | ||||
|     } | ||||
|  | ||||
|     public void setIsEdit(String isEdit) | ||||
|     { | ||||
|         this.isEdit = isEdit; | ||||
|     } | ||||
|  | ||||
|     public String getIsEdit() | ||||
|     { | ||||
|         return isEdit; | ||||
|     } | ||||
|  | ||||
|     public boolean isEdit() | ||||
|     { | ||||
|         return isInsert(this.isEdit); | ||||
|     } | ||||
|  | ||||
|     public boolean isEdit(String isEdit) | ||||
|     { | ||||
|         return isEdit != null && StringUtils.equals("1", isEdit); | ||||
|     } | ||||
|  | ||||
|     public void setIsList(String isList) | ||||
|     { | ||||
|         this.isList = isList; | ||||
|     } | ||||
|  | ||||
|     public String getIsList() | ||||
|     { | ||||
|         return isList; | ||||
|     } | ||||
|  | ||||
|     public boolean isList() | ||||
|     { | ||||
|         return isList(this.isList); | ||||
|     } | ||||
|  | ||||
|     public boolean isList(String isList) | ||||
|     { | ||||
|         return isList != null && StringUtils.equals("1", isList); | ||||
|     } | ||||
|  | ||||
|     public void setIsQuery(String isQuery) | ||||
|     { | ||||
|         this.isQuery = isQuery; | ||||
|     } | ||||
|  | ||||
|     public String getIsQuery() | ||||
|     { | ||||
|         return isQuery; | ||||
|     } | ||||
|  | ||||
|     public boolean isQuery() | ||||
|     { | ||||
|         return isQuery(this.isQuery); | ||||
|     } | ||||
|  | ||||
|     public boolean isQuery(String isQuery) | ||||
|     { | ||||
|         return isQuery != null && StringUtils.equals("1", isQuery); | ||||
|     } | ||||
|  | ||||
|     public void setQueryType(String queryType) | ||||
|     { | ||||
|         this.queryType = queryType; | ||||
|     } | ||||
|  | ||||
|     public String getQueryType() | ||||
|     { | ||||
|         return queryType; | ||||
|     } | ||||
|  | ||||
|     public String getHtmlType() | ||||
|     { | ||||
|         return htmlType; | ||||
|     } | ||||
|  | ||||
|     public void setHtmlType(String htmlType) | ||||
|     { | ||||
|         this.htmlType = htmlType; | ||||
|     } | ||||
|  | ||||
|     public void setDictType(String dictType) | ||||
|     { | ||||
|         this.dictType = dictType; | ||||
|     } | ||||
|  | ||||
|     public String getDictType() | ||||
|     { | ||||
|         return dictType; | ||||
|     } | ||||
|  | ||||
|     public void setSort(Integer sort) | ||||
|     { | ||||
|         this.sort = sort; | ||||
|     } | ||||
|  | ||||
|     public Integer getSort() | ||||
|     { | ||||
|         return sort; | ||||
|     } | ||||
|  | ||||
|     public boolean isSuperColumn() | ||||
|     { | ||||
|         return isSuperColumn(this.javaField); | ||||
|     } | ||||
|  | ||||
|     public static boolean isSuperColumn(String javaField) | ||||
|     { | ||||
|         return StringUtils.equalsAnyIgnoreCase(javaField, | ||||
|                 // BaseEntity | ||||
|                 "createBy", "createTime", "updateBy", "updateTime", "remark", | ||||
|                 // TreeEntity | ||||
|                 "parentName", "parentId", "orderNum", "ancestors"); | ||||
|     } | ||||
|  | ||||
|     public boolean isUsableColumn() | ||||
|     { | ||||
|         return isUsableColumn(javaField); | ||||
|     } | ||||
|  | ||||
|     public static boolean isUsableColumn(String javaField) | ||||
|     { | ||||
|         // isSuperColumn()中的名单用于避免生成多余Domain属性,若某些属性在生成页面时需要用到不能忽略,则放在此处白名单 | ||||
|         return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum"); | ||||
|     } | ||||
|  | ||||
|     public String readConverterExp() | ||||
|     { | ||||
|         String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); | ||||
|         StringBuffer sb = new StringBuffer(); | ||||
|         if (StringUtils.isNotEmpty(remarks)) | ||||
|         { | ||||
|             for (String value : remarks.split(" ")) | ||||
|             { | ||||
|                 if (StringUtils.isNotEmpty(value)) | ||||
|                 { | ||||
|                     Object startStr = value.subSequence(0, 1); | ||||
|                     String endStr = value.substring(1); | ||||
|                     sb.append("").append(startStr).append("=").append(endStr).append(","); | ||||
|                 } | ||||
|             } | ||||
|             return sb.deleteCharAt(sb.length() - 1).toString(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             return this.columnComment; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,52 @@ | ||||
| package com.ruoyi.generator.mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
|  | ||||
| /** | ||||
|  * 业务字段 数据层 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public interface GenTableColumnMapper | ||||
| { | ||||
|     /** | ||||
|      * 根据表名称查询列信息 | ||||
|      *  | ||||
|      * @param tableName 表名称 | ||||
|      * @return 列信息 | ||||
|      */ | ||||
|     public List<GenTableColumn> selectDbTableColumnsByName(String tableName); | ||||
|      | ||||
|     /** | ||||
|      * 查询业务字段列表 | ||||
|      *  | ||||
|      * @param tableId 业务字段编号 | ||||
|      * @return 业务字段集合 | ||||
|      */ | ||||
|     public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId); | ||||
|  | ||||
|     /** | ||||
|      * 新增业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertGenTableColumn(GenTableColumn genTableColumn); | ||||
|  | ||||
|     /** | ||||
|      * 修改业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateGenTableColumn(GenTableColumn genTableColumn); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除业务字段 | ||||
|      *  | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteGenTableColumnByIds(Long[] ids); | ||||
| } | ||||
| @@ -0,0 +1,76 @@ | ||||
| package com.ruoyi.generator.mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
|  | ||||
| /** | ||||
|  * 业务 数据层 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public interface GenTableMapper | ||||
| { | ||||
|     /** | ||||
|      * 查询业务列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 业务集合 | ||||
|      */ | ||||
|     public List<GenTable> selectGenTableList(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     public List<GenTable> selectDbTableList(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param tableNames 表名称组 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     public List<GenTable> selectDbTableListByNames(String[] tableNames); | ||||
|  | ||||
|     /** | ||||
|      * 查询表ID业务信息 | ||||
|      *  | ||||
|      * @param id 业务ID | ||||
|      * @return 业务信息 | ||||
|      */ | ||||
|     public GenTable selectGenTableById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询表名称业务信息 | ||||
|      *  | ||||
|      * @param tableName 表名称 | ||||
|      * @return 业务信息 | ||||
|      */ | ||||
|     public GenTable selectGenTableByName(String tableName); | ||||
|  | ||||
|     /** | ||||
|      * 新增业务 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertGenTable(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 修改业务 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateGenTable(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除业务 | ||||
|      *  | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteGenTableByIds(Long[] ids); | ||||
| } | ||||
| @@ -0,0 +1,68 @@ | ||||
| package com.ruoyi.generator.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import com.ruoyi.common.core.text.Convert; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
| import com.ruoyi.generator.mapper.GenTableColumnMapper; | ||||
|  | ||||
| /** | ||||
|  * 业务字段 服务层实现 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| @Service | ||||
| public class GenTableColumnServiceImpl implements IGenTableColumnService  | ||||
| { | ||||
| 	@Autowired | ||||
| 	private GenTableColumnMapper genTableColumnMapper; | ||||
|  | ||||
| 	/** | ||||
|      * 查询业务字段列表 | ||||
|      *  | ||||
|      * @param tableId 业务字段编号 | ||||
|      * @return 业务字段集合 | ||||
|      */ | ||||
| 	@Override | ||||
| 	public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) | ||||
| 	{ | ||||
| 	    return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); | ||||
| 	} | ||||
| 	 | ||||
|     /** | ||||
|      * 新增业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
| 	@Override | ||||
| 	public int insertGenTableColumn(GenTableColumn genTableColumn) | ||||
| 	{ | ||||
| 	    return genTableColumnMapper.insertGenTableColumn(genTableColumn); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
|      * 修改业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
| 	@Override | ||||
| 	public int updateGenTableColumn(GenTableColumn genTableColumn) | ||||
| 	{ | ||||
| 	    return genTableColumnMapper.updateGenTableColumn(genTableColumn); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|      * 删除业务字段对象 | ||||
|      *  | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
| 	@Override | ||||
| 	public int deleteGenTableColumnByIds(String ids) | ||||
| 	{ | ||||
| 		return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,345 @@ | ||||
| package com.ruoyi.generator.service; | ||||
|  | ||||
| import java.io.ByteArrayOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.StringWriter; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.zip.ZipEntry; | ||||
| import java.util.zip.ZipOutputStream; | ||||
| import org.apache.commons.io.IOUtils; | ||||
| import org.apache.velocity.Template; | ||||
| import org.apache.velocity.VelocityContext; | ||||
| import org.apache.velocity.app.Velocity; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
| import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | ||||
| import com.ruoyi.common.constant.Constants; | ||||
| import com.ruoyi.common.constant.GenConstants; | ||||
| import com.ruoyi.common.exception.CustomException; | ||||
| import com.ruoyi.common.utils.SecurityUtils; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
| import com.ruoyi.generator.mapper.GenTableColumnMapper; | ||||
| import com.ruoyi.generator.mapper.GenTableMapper; | ||||
| import com.ruoyi.generator.util.GenUtils; | ||||
| import com.ruoyi.generator.util.VelocityInitializer; | ||||
| import com.ruoyi.generator.util.VelocityUtils; | ||||
|  | ||||
| /** | ||||
|  * 业务 服务层实现 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| @Service | ||||
| public class GenTableServiceImpl implements IGenTableService | ||||
| { | ||||
|     private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); | ||||
|  | ||||
|     @Autowired | ||||
|     private GenTableMapper genTableMapper; | ||||
|  | ||||
|     @Autowired | ||||
|     private GenTableColumnMapper genTableColumnMapper; | ||||
|  | ||||
|     /** | ||||
|      * 查询业务信息 | ||||
|      *  | ||||
|      * @param id 业务ID | ||||
|      * @return 业务信息 | ||||
|      */ | ||||
|     @Override | ||||
|     public GenTable selectGenTableById(Long id) | ||||
|     { | ||||
|         GenTable genTable = genTableMapper.selectGenTableById(id); | ||||
|         setTableFromOptions(genTable); | ||||
|         return genTable; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询业务列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 业务集合 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<GenTable> selectGenTableList(GenTable genTable) | ||||
|     { | ||||
|         return genTableMapper.selectGenTableList(genTable); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<GenTable> selectDbTableList(GenTable genTable) | ||||
|     { | ||||
|         return genTableMapper.selectDbTableList(genTable); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param tableNames 表名称组 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<GenTable> selectDbTableListByNames(String[] tableNames) | ||||
|     { | ||||
|         return genTableMapper.selectDbTableListByNames(tableNames); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改业务 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     @Transactional | ||||
|     public void updateGenTable(GenTable genTable) | ||||
|     { | ||||
|         String options = JSON.toJSONString(genTable.getParams()); | ||||
|         genTable.setOptions(options); | ||||
|         int row = genTableMapper.updateGenTable(genTable); | ||||
|         if (row > 0) | ||||
|         { | ||||
|             for (GenTableColumn cenTableColumn : genTable.getColumns()) | ||||
|             { | ||||
|                 genTableColumnMapper.updateGenTableColumn(cenTableColumn); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除业务对象 | ||||
|      *  | ||||
|      * @param tableIds 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     @Transactional | ||||
|     public void deleteGenTableByIds(Long[] tableIds) | ||||
|     { | ||||
|         genTableMapper.deleteGenTableByIds(tableIds); | ||||
|         genTableColumnMapper.deleteGenTableColumnByIds(tableIds); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 导入表结构 | ||||
|      *  | ||||
|      * @param tableList 导入表列表 | ||||
|      */ | ||||
|     @Override | ||||
|     @Transactional | ||||
|     public void importGenTable(List<GenTable> tableList) | ||||
|     { | ||||
|         String operName = SecurityUtils.getUsername(); | ||||
|         try | ||||
|         { | ||||
|             for (GenTable table : tableList) | ||||
|             { | ||||
|                 String tableName = table.getTableName(); | ||||
|                 GenUtils.initTable(table, operName); | ||||
|                 int row = genTableMapper.insertGenTable(table); | ||||
|                 if (row > 0) | ||||
|                 { | ||||
|                     // 保存列信息 | ||||
|                     List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); | ||||
|                     for (GenTableColumn column : genTableColumns) | ||||
|                     { | ||||
|                         GenUtils.initColumnField(column, table); | ||||
|                         genTableColumnMapper.insertGenTableColumn(column); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             throw new CustomException("导入失败:" + e.getMessage()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 预览代码 | ||||
|      *  | ||||
|      * @param tableId 表编号 | ||||
|      * @return 预览数据列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public Map<String, String> previewCode(Long tableId) | ||||
|     { | ||||
|         Map<String, String> dataMap = new LinkedHashMap<>(); | ||||
|         // 查询表信息 | ||||
|         GenTable table = genTableMapper.selectGenTableById(tableId); | ||||
|         // 查询列信息 | ||||
|         List<GenTableColumn> columns = table.getColumns(); | ||||
|         setPkColumn(table, columns); | ||||
|         VelocityInitializer.initVelocity(); | ||||
|  | ||||
|         VelocityContext context = VelocityUtils.prepareContext(table); | ||||
|  | ||||
|         // 获取模板列表 | ||||
|         List<String> 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; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成代码 | ||||
|      *  | ||||
|      * @param tableName 表名称 | ||||
|      * @return 数据 | ||||
|      */ | ||||
|     @Override | ||||
|     public byte[] generatorCode(String tableName) | ||||
|     { | ||||
|         ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); | ||||
|         ZipOutputStream zip = new ZipOutputStream(outputStream); | ||||
|         generatorCode(tableName, zip); | ||||
|         IOUtils.closeQuietly(zip); | ||||
|         return outputStream.toByteArray(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 批量生成代码 | ||||
|      *  | ||||
|      * @param tableNames 表数组 | ||||
|      * @return 数据 | ||||
|      */ | ||||
|     @Override | ||||
|     public byte[] generatorCode(String[] tableNames) | ||||
|     { | ||||
|         ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); | ||||
|         ZipOutputStream zip = new ZipOutputStream(outputStream); | ||||
|         for (String tableName : tableNames) | ||||
|         { | ||||
|             generatorCode(tableName, zip); | ||||
|         } | ||||
|         IOUtils.closeQuietly(zip); | ||||
|         return outputStream.toByteArray(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询表信息并生成代码 | ||||
|      */ | ||||
|     private void generatorCode(String tableName, ZipOutputStream zip) | ||||
|     { | ||||
|         // 查询表信息 | ||||
|         GenTable table = genTableMapper.selectGenTableByName(tableName); | ||||
|         // 查询列信息 | ||||
|         List<GenTableColumn> columns = table.getColumns(); | ||||
|         setPkColumn(table, columns); | ||||
|  | ||||
|         VelocityInitializer.initVelocity(); | ||||
|  | ||||
|         VelocityContext context = VelocityUtils.prepareContext(table); | ||||
|  | ||||
|         // 获取模板列表 | ||||
|         List<String> 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))); | ||||
|                 IOUtils.write(sw.toString(), zip, Constants.UTF8); | ||||
|                 IOUtils.closeQuietly(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 = JSON.toJSONString(genTable.getParams()); | ||||
|             JSONObject paramsObj = JSONObject.parseObject(options); | ||||
|             if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) | ||||
|             { | ||||
|                 throw new CustomException("树编码字段不能为空"); | ||||
|             } | ||||
|             else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) | ||||
|             { | ||||
|                 throw new CustomException("树父编码字段不能为空"); | ||||
|             } | ||||
|             else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) | ||||
|             { | ||||
|                 throw new CustomException("树名称字段不能为空"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 设置主键列信息 | ||||
|      *  | ||||
|      * @param table 业务表信息 | ||||
|      * @param columns 业务字段列表 | ||||
|      */ | ||||
|     public void setPkColumn(GenTable table, List<GenTableColumn> columns) | ||||
|     { | ||||
|         for (GenTableColumn column : columns) | ||||
|         { | ||||
|             if (column.isPk()) | ||||
|             { | ||||
|                 table.setPkColumn(column); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         if (StringUtils.isNull(table.getPkColumn())) | ||||
|         { | ||||
|             table.setPkColumn(columns.get(0)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 设置代码生成其他选项值 | ||||
|      *  | ||||
|      * @param genTable 设置后的生成对象 | ||||
|      */ | ||||
|     public void setTableFromOptions(GenTable genTable) | ||||
|     { | ||||
|         JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions()); | ||||
|         if (StringUtils.isNotNull(paramsObj)) | ||||
|         { | ||||
|             String treeCode = paramsObj.getString(GenConstants.TREE_CODE); | ||||
|             String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); | ||||
|             String treeName = paramsObj.getString(GenConstants.TREE_NAME); | ||||
|             genTable.setTreeCode(treeCode); | ||||
|             genTable.setTreeParentCode(treeParentCode); | ||||
|             genTable.setTreeName(treeName); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| package com.ruoyi.generator.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
|  | ||||
| /** | ||||
|  * 业务字段 服务层 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public interface IGenTableColumnService | ||||
| { | ||||
|     /** | ||||
|      * 查询业务字段列表 | ||||
|      *  | ||||
|      * @param tableId 业务字段编号 | ||||
|      * @return 业务字段集合 | ||||
|      */ | ||||
|     public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId); | ||||
|  | ||||
|     /** | ||||
|      * 新增业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertGenTableColumn(GenTableColumn genTableColumn); | ||||
|  | ||||
|     /** | ||||
|      * 修改业务字段 | ||||
|      *  | ||||
|      * @param genTableColumn 业务字段信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateGenTableColumn(GenTableColumn genTableColumn); | ||||
|  | ||||
|     /** | ||||
|      * 删除业务字段信息 | ||||
|      *  | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteGenTableColumnByIds(String ids); | ||||
| } | ||||
| @@ -0,0 +1,99 @@ | ||||
| package com.ruoyi.generator.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
|  | ||||
| /** | ||||
|  * 业务 服务层 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public interface IGenTableService | ||||
| { | ||||
|     /** | ||||
|      * 查询业务列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 业务集合 | ||||
|      */ | ||||
|     public List<GenTable> selectGenTableList(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     public List<GenTable> selectDbTableList(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 查询据库列表 | ||||
|      *  | ||||
|      * @param tableNames 表名称组 | ||||
|      * @return 数据库表集合 | ||||
|      */ | ||||
|     public List<GenTable> selectDbTableListByNames(String[] tableNames); | ||||
|  | ||||
|     /** | ||||
|      * 查询业务信息 | ||||
|      *  | ||||
|      * @param id 业务ID | ||||
|      * @return 业务信息 | ||||
|      */ | ||||
|     public GenTable selectGenTableById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 修改业务 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public void updateGenTable(GenTable genTable); | ||||
|  | ||||
|     /** | ||||
|      * 删除业务信息 | ||||
|      *  | ||||
|      * @param tableIds 需要删除的表数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public void deleteGenTableByIds(Long[] tableIds); | ||||
|  | ||||
|     /** | ||||
|      * 导入表结构 | ||||
|      *  | ||||
|      * @param tableList 导入表列表 | ||||
|      */ | ||||
|     public void importGenTable(List<GenTable> tableList); | ||||
|  | ||||
|     /** | ||||
|      * 预览代码 | ||||
|      *  | ||||
|      * @param tableId 表编号 | ||||
|      * @return 预览数据列表 | ||||
|      */ | ||||
|     public Map<String, String> previewCode(Long tableId); | ||||
|  | ||||
|     /** | ||||
|      * 生成代码 | ||||
|      *  | ||||
|      * @param tableName 表名称 | ||||
|      * @return 数据 | ||||
|      */ | ||||
|     public byte[] generatorCode(String tableName); | ||||
|  | ||||
|     /** | ||||
|      * 批量生成代码 | ||||
|      *  | ||||
|      * @param tableNames 表数组 | ||||
|      * @return 数据 | ||||
|      */ | ||||
|     public byte[] generatorCode(String[] tableNames); | ||||
|  | ||||
|     /** | ||||
|      * 修改保存参数校验 | ||||
|      *  | ||||
|      * @param genTable 业务信息 | ||||
|      */ | ||||
|     public void validateEdit(GenTable genTable); | ||||
| } | ||||
| @@ -0,0 +1,242 @@ | ||||
| package com.ruoyi.generator.util; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import org.apache.commons.lang3.RegExUtils; | ||||
| import com.ruoyi.common.constant.GenConstants; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
| import com.ruoyi.generator.config.GenConfig; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
|  | ||||
| /** | ||||
|  * 代码生成器 工具类 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| 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(operName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 初始化列属性字段 | ||||
|      */ | ||||
|     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)); | ||||
|  | ||||
|         if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType)) | ||||
|         { | ||||
|             column.setJavaType(GenConstants.TYPE_STRING); | ||||
|             // 字符串长度超过500设置为文本域 | ||||
|             Integer columnLength = getColumnLength(column.getColumnType()); | ||||
|             String htmlType = columnLength >= 500 ? 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(), "(", ")"), ","); | ||||
|             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); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // 插入字段(默认所有字段都需要插入) | ||||
|         column.setIsInsert(GenConstants.REQUIRE); | ||||
|  | ||||
|         // 编辑字段 | ||||
|         if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) | ||||
|         { | ||||
|             column.setIsEdit(GenConstants.REQUIRE); | ||||
|         } | ||||
|         // 列表字段 | ||||
|         if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) | ||||
|         { | ||||
|             column.setIsList(GenConstants.REQUIRE); | ||||
|         } | ||||
|         // 查询字段 | ||||
|         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); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验数组是否包含指定值 | ||||
|      *  | ||||
|      * @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(); | ||||
|         String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength); | ||||
|         return moduleName; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取业务名 | ||||
|      *  | ||||
|      * @param tableName 表名 | ||||
|      * @return 业务名 | ||||
|      */ | ||||
|     public static String getBusinessName(String tableName) | ||||
|     { | ||||
|         int lastIndex = tableName.lastIndexOf("_"); | ||||
|         int nameLength = tableName.length(); | ||||
|         String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength); | ||||
|         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, ","); | ||||
|             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 name 需要被替换的名字 | ||||
|      * @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; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,35 @@ | ||||
| package com.ruoyi.generator.util; | ||||
|  | ||||
| import java.util.Properties; | ||||
| import org.apache.velocity.app.Velocity; | ||||
| import com.ruoyi.common.constant.Constants; | ||||
|  | ||||
| /** | ||||
|  * VelocityEngine工厂 | ||||
|  *  | ||||
|  * @author RuoYi | ||||
|  */ | ||||
| public class VelocityInitializer | ||||
| { | ||||
|     /** | ||||
|      * 初始化vm方法 | ||||
|      */ | ||||
|     public static void initVelocity() | ||||
|     { | ||||
|         Properties p = new Properties(); | ||||
|         try | ||||
|         { | ||||
|             // 加载classpath目录下的vm文件 | ||||
|             p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); | ||||
|             // 定义字符集 | ||||
|             p.setProperty(Velocity.ENCODING_DEFAULT, Constants.UTF8); | ||||
|             p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8); | ||||
|             // 初始化Velocity引擎,指定配置Properties | ||||
|             Velocity.init(p); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             throw new RuntimeException(e); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,298 @@ | ||||
| package com.ruoyi.generator.util; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashSet; | ||||
| import java.util.List; | ||||
| import org.apache.velocity.VelocityContext; | ||||
| import com.alibaba.fastjson.JSONObject; | ||||
| import com.ruoyi.common.constant.GenConstants; | ||||
| import com.ruoyi.common.utils.DateUtils; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
| import com.ruoyi.generator.domain.GenTable; | ||||
| import com.ruoyi.generator.domain.GenTableColumn; | ||||
|  | ||||
| /** | ||||
|  * 代码生成模板处理 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public class VelocityUtils | ||||
| { | ||||
|     /** 项目空间路径 */ | ||||
|     private static final String PROJECT_PATH = "main/java"; | ||||
|  | ||||
|     /** mybatis空间路径 */ | ||||
|     private static final String MYBATIS_PATH = "main/resources/mapper"; | ||||
|  | ||||
|     /** | ||||
|      * 设置模板变量信息 | ||||
|      *  | ||||
|      * @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.getColumns())); | ||||
|         velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); | ||||
|         velocityContext.put("columns", genTable.getColumns()); | ||||
|         velocityContext.put("table", genTable); | ||||
|         if (GenConstants.TPL_TREE.equals(tplCategory)) | ||||
|         { | ||||
|             setTreeVelocityContext(velocityContext, genTable); | ||||
|         } | ||||
|         return velocityContext; | ||||
|     } | ||||
|  | ||||
|     public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) | ||||
|     { | ||||
|         String options = genTable.getOptions(); | ||||
|         JSONObject paramsObj = JSONObject.parseObject(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.getString(GenConstants.TREE_PARENT_CODE)); | ||||
|         } | ||||
|         if (paramsObj.containsKey(GenConstants.TREE_NAME)) | ||||
|         { | ||||
|             context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取模板信息 | ||||
|      *  | ||||
|      * @return 模板列表 | ||||
|      */ | ||||
|     public static List<String> getTemplateList(String tplCategory) | ||||
|     { | ||||
|         List<String> templates = new ArrayList<String>(); | ||||
|         templates.add("vm/java/domain.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"); | ||||
|         templates.add("vm/sql/sql.vm"); | ||||
|         templates.add("vm/js/api.js.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"); | ||||
|         } | ||||
|         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); | ||||
|         } | ||||
|         else 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.js.vm")) | ||||
|         { | ||||
|             fileName = StringUtils.format("{}/api/{}/{}.js", 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); | ||||
|         } | ||||
|         return fileName; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取包前缀 | ||||
|      *  | ||||
|      * @param packageName 包名称 | ||||
|      * @return 包前缀名称 | ||||
|      */ | ||||
|     public static String getPackagePrefix(String packageName) | ||||
|     { | ||||
|         int lastIndex = packageName.lastIndexOf("."); | ||||
|         String basePackage = StringUtils.substring(packageName, 0, lastIndex); | ||||
|         return basePackage; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据列类型获取导入包 | ||||
|      *  | ||||
|      * @param column 列集合 | ||||
|      * @return 返回需要导入的包列表 | ||||
|      */ | ||||
|     public static HashSet<String> getImportList(List<GenTableColumn> columns) | ||||
|     { | ||||
|         HashSet<String> importList = new HashSet<String>(); | ||||
|         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"); | ||||
|             } | ||||
|         } | ||||
|         return importList; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取权限前缀 | ||||
|      *  | ||||
|      * @param moduleName 模块名称 | ||||
|      * @param businessName 业务名称 | ||||
|      * @return 返回权限前缀 | ||||
|      */ | ||||
|     public static String getPermissionPrefix(String moduleName, String businessName) | ||||
|     { | ||||
|         return StringUtils.format("{}:{}", moduleName, businessName); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取树编码 | ||||
|      *  | ||||
|      * @param options 生成其他选项 | ||||
|      * @return 树编码 | ||||
|      */ | ||||
|     public static String getTreecode(JSONObject paramsObj) | ||||
|     { | ||||
|         if (paramsObj.containsKey(GenConstants.TREE_CODE)) | ||||
|         { | ||||
|             return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); | ||||
|         } | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取树父编码 | ||||
|      *  | ||||
|      * @param options 生成其他选项 | ||||
|      * @return 树父编码 | ||||
|      */ | ||||
|     public static String getTreeParentCode(JSONObject paramsObj) | ||||
|     { | ||||
|         if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) | ||||
|         { | ||||
|             return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); | ||||
|         } | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取树名称 | ||||
|      *  | ||||
|      * @param options 生成其他选项 | ||||
|      * @return 树名称 | ||||
|      */ | ||||
|     public static String getTreeName(JSONObject paramsObj) | ||||
|     { | ||||
|         if (paramsObj.containsKey(GenConstants.TREE_NAME)) | ||||
|         { | ||||
|             return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); | ||||
|         } | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取需要在哪一列上面显示展开按钮 | ||||
|      *  | ||||
|      * @param genTable 业务表对象 | ||||
|      * @return 展开按钮列序号 | ||||
|      */ | ||||
|     public static int getExpandColumn(GenTable genTable) | ||||
|     { | ||||
|         String options = genTable.getOptions(); | ||||
|         JSONObject paramsObj = JSONObject.parseObject(options); | ||||
|         String treeName = paramsObj.getString(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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								ruoyi-generator/src/main/resources/generator.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ruoyi-generator/src/main/resources/generator.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| # 代码生成 | ||||
| gen:  | ||||
|   # 作者 | ||||
|   author: ruoyi | ||||
|   # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool | ||||
|   packageName: com.ruoyi.system | ||||
|   # 自动去除表前缀,默认是false | ||||
|   autoRemovePre: false | ||||
|   # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) | ||||
|   tablePrefix: sys_ | ||||
| @@ -0,0 +1,120 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.ruoyi.generator.mapper.GenTableColumnMapper"> | ||||
|      | ||||
|     <resultMap type="GenTableColumn" id="GenTableColumnResult"> | ||||
|         <id     property="columnId"       column="column_id"      /> | ||||
|         <result property="tableId"        column="table_id"       /> | ||||
|         <result property="columnName"     column="column_name"    /> | ||||
|         <result property="columnComment"  column="column_comment" /> | ||||
|         <result property="columnType"     column="column_type"    /> | ||||
|         <result property="javaType"       column="java_type"      /> | ||||
|         <result property="javaField"      column="java_field"     /> | ||||
|         <result property="isPk"           column="is_pk"          /> | ||||
|         <result property="isIncrement"    column="is_increment"   /> | ||||
|         <result property="isRequired"     column="is_required"    /> | ||||
|         <result property="isInsert"       column="is_insert"      /> | ||||
|         <result property="isEdit"         column="is_edit"        /> | ||||
|         <result property="isList"         column="is_list"        /> | ||||
|         <result property="isQuery"        column="is_query"       /> | ||||
|         <result property="queryType"      column="query_type"     /> | ||||
|         <result property="htmlType"       column="html_type"      /> | ||||
|         <result property="dictType"       column="dict_type"      /> | ||||
|         <result property="sort"           column="sort"           /> | ||||
|         <result property="createBy"       column="create_by"      /> | ||||
|         <result property="createTime"     column="create_time"    /> | ||||
|         <result property="updateBy"       column="update_by"      /> | ||||
|         <result property="updateTime"     column="update_time"    /> | ||||
|     </resultMap> | ||||
| 	 | ||||
| 	<sql id="selectGenTableColumnVo"> | ||||
|         select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column | ||||
|     </sql> | ||||
| 	 | ||||
|     <select id="selectGenTableColumnListByTableId" parameterType="Long" resultMap="GenTableColumnResult"> | ||||
|         <include refid="selectGenTableColumnVo"/> | ||||
|         where table_id = #{tableId} | ||||
|         order by sort | ||||
|     </select> | ||||
|      | ||||
|     <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult"> | ||||
| 		select column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else null end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type | ||||
| 		from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName}) | ||||
| 		order by ordinal_position | ||||
| 	</select> | ||||
|      | ||||
|     <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId"> | ||||
|         insert into gen_table_column ( | ||||
| 			<if test="tableId != null and tableId != ''">table_id,</if> | ||||
| 			<if test="columnName != null and columnName != ''">column_name,</if> | ||||
| 			<if test="columnComment != null and columnComment != ''">column_comment,</if> | ||||
| 			<if test="columnType != null and columnType != ''">column_type,</if> | ||||
| 			<if test="javaType != null and javaType != ''">java_type,</if> | ||||
| 			<if test="javaField != null  and javaField != ''">java_field,</if> | ||||
| 			<if test="isPk != null and isPk != ''">is_pk,</if> | ||||
| 			<if test="isIncrement != null and isIncrement != ''">is_increment,</if> | ||||
| 			<if test="isRequired != null and isRequired != ''">is_required,</if> | ||||
| 			<if test="isInsert != null and isInsert != ''">is_insert,</if> | ||||
| 			<if test="isEdit != null and isEdit != ''">is_edit,</if> | ||||
| 			<if test="isList != null and isList != ''">is_list,</if> | ||||
| 			<if test="isQuery != null and isQuery != ''">is_query,</if> | ||||
| 			<if test="queryType != null and queryType != ''">query_type,</if> | ||||
| 			<if test="htmlType != null and htmlType != ''">html_type,</if> | ||||
| 			<if test="dictType != null and dictType != ''">dict_type,</if> | ||||
| 			<if test="sort != null">sort,</if> | ||||
| 			<if test="createBy != null and createBy != ''">create_by,</if> | ||||
| 			create_time | ||||
|          )values( | ||||
| 			<if test="tableId != null and tableId != ''">#{tableId},</if> | ||||
| 			<if test="columnName != null and columnName != ''">#{columnName},</if> | ||||
| 			<if test="columnComment != null and columnComment != ''">#{columnComment},</if> | ||||
| 			<if test="columnType != null and columnType != ''">#{columnType},</if> | ||||
| 			<if test="javaType != null and javaType != ''">#{javaType},</if> | ||||
| 			<if test="javaField != null and javaField != ''">#{javaField},</if> | ||||
| 			<if test="isPk != null and isPk != ''">#{isPk},</if> | ||||
| 			<if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if> | ||||
| 			<if test="isRequired != null and isRequired != ''">#{isRequired},</if> | ||||
| 			<if test="isInsert != null and isInsert != ''">#{isInsert},</if> | ||||
| 			<if test="isEdit != null and isEdit != ''">#{isEdit},</if> | ||||
| 			<if test="isList != null and isList != ''">#{isList},</if> | ||||
| 			<if test="isQuery != null and isQuery != ''">#{isQuery},</if> | ||||
| 			<if test="queryType != null and queryType != ''">#{queryType},</if> | ||||
| 			<if test="htmlType != null and htmlType != ''">#{htmlType},</if> | ||||
| 			<if test="dictType != null and dictType != ''">#{dictType},</if> | ||||
| 			<if test="sort != null">#{sort},</if> | ||||
| 			<if test="createBy != null and createBy != ''">#{createBy},</if> | ||||
| 			sysdate() | ||||
|          ) | ||||
|     </insert> | ||||
| 	  | ||||
|     <update id="updateGenTableColumn" parameterType="GenTableColumn"> | ||||
|         update gen_table_column | ||||
|         <set> | ||||
|             column_comment = #{columnComment}, | ||||
|             java_type = #{javaType}, | ||||
|             java_field = #{javaField}, | ||||
|             is_insert = #{isInsert}, | ||||
|             is_edit = #{isEdit}, | ||||
|             is_list = #{isList}, | ||||
|             is_query = #{isQuery}, | ||||
|             is_required = #{isRequired}, | ||||
|             query_type = #{queryType}, | ||||
|             html_type = #{htmlType}, | ||||
|             dict_type = #{dictType}, | ||||
|             sort = #{sort}, | ||||
|             update_by = #{updateBy}, | ||||
|             update_time = sysdate() | ||||
|         </set> | ||||
|         where column_id = #{columnId} | ||||
|     </update> | ||||
|  | ||||
|     <delete id="deleteGenTableColumnByIds" parameterType="Long"> | ||||
|         delete from gen_table_column where table_id in  | ||||
|         <foreach collection="array" item="tableId" open="(" separator="," close=")"> | ||||
|             #{tableId} | ||||
|         </foreach> | ||||
|     </delete> | ||||
|      | ||||
| </mapper> | ||||
| @@ -0,0 +1,181 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.ruoyi.generator.mapper.GenTableMapper"> | ||||
|  | ||||
| 	<resultMap type="GenTable" id="GenTableResult"> | ||||
| 	    <id     property="tableId"        column="table_id"        /> | ||||
| 		<result property="tableName"      column="table_name"      /> | ||||
| 		<result property="tableComment"   column="table_comment"   /> | ||||
| 		<result property="className"      column="class_name"      /> | ||||
| 		<result property="tplCategory"    column="tpl_category"    /> | ||||
| 		<result property="packageName"    column="package_name"    /> | ||||
| 		<result property="moduleName"     column="module_name"     /> | ||||
| 		<result property="businessName"   column="business_name"   /> | ||||
| 		<result property="functionName"   column="function_name"   /> | ||||
| 		<result property="functionAuthor" column="function_author" /> | ||||
| 		<result property="options"        column="options"         /> | ||||
| 		<result property="createBy"       column="create_by"       /> | ||||
| 		<result property="createTime"     column="create_time"     /> | ||||
| 		<result property="updateBy"       column="update_by"       /> | ||||
| 		<result property="updateTime"     column="update_time"     /> | ||||
| 		<result property="remark"         column="remark"          /> | ||||
| 		<collection  property="columns"  javaType="java.util.List"  resultMap="GenTableColumnResult" /> | ||||
| 	</resultMap> | ||||
| 	 | ||||
| 	<resultMap type="GenTableColumn" id="GenTableColumnResult"> | ||||
|         <id     property="columnId"       column="column_id"      /> | ||||
|         <result property="tableId"        column="table_id"       /> | ||||
|         <result property="columnName"     column="column_name"    /> | ||||
|         <result property="columnComment"  column="column_comment" /> | ||||
|         <result property="columnType"     column="column_type"    /> | ||||
|         <result property="javaType"       column="java_type"      /> | ||||
|         <result property="javaField"      column="java_field"     /> | ||||
|         <result property="isPk"           column="is_pk"          /> | ||||
|         <result property="isIncrement"    column="is_increment"   /> | ||||
|         <result property="isRequired"     column="is_required"    /> | ||||
|         <result property="isInsert"       column="is_insert"      /> | ||||
|         <result property="isEdit"         column="is_edit"        /> | ||||
|         <result property="isList"         column="is_list"        /> | ||||
|         <result property="isQuery"        column="is_query"       /> | ||||
|         <result property="queryType"      column="query_type"     /> | ||||
|         <result property="htmlType"       column="html_type"      /> | ||||
|         <result property="dictType"       column="dict_type"      /> | ||||
|         <result property="sort"           column="sort"           /> | ||||
|         <result property="createBy"       column="create_by"      /> | ||||
|         <result property="createTime"     column="create_time"    /> | ||||
|         <result property="updateBy"       column="update_by"      /> | ||||
|         <result property="updateTime"     column="update_time"    /> | ||||
|     </resultMap> | ||||
| 	 | ||||
| 	<sql id="selectGenTableVo"> | ||||
|         select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, options, create_by, create_time, update_by, update_time, remark from gen_table | ||||
|     </sql> | ||||
|      | ||||
|     <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult"> | ||||
| 		<include refid="selectGenTableVo"/> | ||||
| 		<where> | ||||
| 			<if test="tableName != null and tableName != ''"> | ||||
| 				AND lower(table_name) like lower(concat('%', #{tableName}, '%')) | ||||
| 			</if> | ||||
| 			<if test="tableComment != null and tableComment != ''"> | ||||
| 				AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) | ||||
| 			</if> | ||||
| 			<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 --> | ||||
| 				AND date_format(create_time,'%y%m%d') >= date_format(#{beginTime},'%y%m%d') | ||||
| 			</if> | ||||
| 			<if test="endTime != null and endTime != ''"><!-- 结束时间检索 --> | ||||
| 				AND date_format(create_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') | ||||
| 			</if> | ||||
| 		</where> | ||||
| 	</select> | ||||
|  | ||||
| 	<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult"> | ||||
| 		select table_name, table_comment, create_time, update_time from information_schema.tables | ||||
| 		where table_schema = (select database()) | ||||
| 		AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%' | ||||
| 		AND table_name NOT IN (select table_name from gen_table) | ||||
| 		<if test="tableName != null and tableName != ''"> | ||||
| 			AND lower(table_name) like lower(concat('%', #{tableName}, '%')) | ||||
| 		</if> | ||||
| 		<if test="tableComment != null and tableComment != ''"> | ||||
| 			AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) | ||||
| 		</if> | ||||
| 		<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 --> | ||||
| 			AND date_format(create_time,'%y%m%d') >= date_format(#{beginTime},'%y%m%d') | ||||
| 		</if> | ||||
| 		<if test="endTime != null and endTime != ''"><!-- 结束时间检索 --> | ||||
| 			AND date_format(create_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') | ||||
| 		</if> | ||||
| 	</select> | ||||
| 	 | ||||
| 	<select id="selectDbTableListByNames" resultMap="GenTableResult"> | ||||
| 		select table_name, table_comment, create_time, update_time from information_schema.tables | ||||
| 		where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) | ||||
| 		and table_name in | ||||
| 	    <foreach collection="array" item="name" open="(" separator="," close=")"> | ||||
|  			#{name} | ||||
|         </foreach>  | ||||
| 	</select> | ||||
| 	 | ||||
| 	<select id="selectTableByName" parameterType="String" resultMap="GenTableResult"> | ||||
| 		select table_name, table_comment, create_time, update_time from information_schema.tables | ||||
| 		where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database()) | ||||
| 		and table_name = #{tableName} | ||||
| 	</select> | ||||
| 	 | ||||
| 	<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult"> | ||||
| 	    SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark, | ||||
| 			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort | ||||
| 		FROM gen_table t | ||||
| 			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id | ||||
| 		where t.table_id = #{tableId} order by c.sort | ||||
| 	</select> | ||||
| 	 | ||||
| 	<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult"> | ||||
| 	    SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark, | ||||
| 			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort | ||||
| 		FROM gen_table t | ||||
| 			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id | ||||
| 		where t.table_name = #{tableName} order by c.sort | ||||
| 	</select> | ||||
| 	 | ||||
| 	<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId"> | ||||
|         insert into gen_table ( | ||||
| 			<if test="tableName != null">table_name,</if> | ||||
| 			<if test="tableComment != null and tableComment != ''">table_comment,</if> | ||||
| 			<if test="className != null and className != ''">class_name,</if> | ||||
| 			<if test="tplCategory != null and tplCategory != ''">tpl_category,</if> | ||||
| 			<if test="packageName != null and packageName != ''">package_name,</if> | ||||
| 			<if test="moduleName != null and moduleName != ''">module_name,</if> | ||||
| 			<if test="businessName != null and businessName != ''">business_name,</if> | ||||
| 			<if test="functionName != null and functionName != ''">function_name,</if> | ||||
| 			<if test="functionAuthor != null and functionAuthor != ''">function_author,</if> | ||||
| 			<if test="remark != null and remark != ''">remark,</if> | ||||
|  			<if test="createBy != null and createBy != ''">create_by,</if> | ||||
| 			create_time | ||||
|          )values( | ||||
| 			<if test="tableName != null">#{tableName},</if> | ||||
| 			<if test="tableComment != null and tableComment != ''">#{tableComment},</if> | ||||
| 			<if test="className != null and className != ''">#{className},</if> | ||||
| 			<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if> | ||||
| 			<if test="packageName != null and packageName != ''">#{packageName},</if> | ||||
| 			<if test="moduleName != null and moduleName != ''">#{moduleName},</if> | ||||
| 			<if test="businessName != null and businessName != ''">#{businessName},</if> | ||||
| 			<if test="functionName != null and functionName != ''">#{functionName},</if> | ||||
| 			<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if> | ||||
| 			<if test="remark != null and remark != ''">#{remark},</if> | ||||
|  			<if test="createBy != null and createBy != ''">#{createBy},</if> | ||||
| 			sysdate() | ||||
|          ) | ||||
|     </insert> | ||||
|      | ||||
|     <update id="updateGenTable" parameterType="GenTable"> | ||||
|         update gen_table | ||||
|         <set> | ||||
|             <if test="tableName != null">table_name = #{tableName},</if> | ||||
|             <if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if> | ||||
|             <if test="className != null and className != ''">class_name = #{className},</if> | ||||
|             <if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if> | ||||
|             <if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if> | ||||
|             <if test="packageName != null and packageName != ''">package_name = #{packageName},</if> | ||||
|             <if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if> | ||||
|             <if test="businessName != null and businessName != ''">business_name = #{businessName},</if> | ||||
|             <if test="functionName != null and functionName != ''">function_name = #{functionName},</if> | ||||
|             <if test="options != null and options != ''">options = #{options},</if> | ||||
|             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> | ||||
|             <if test="remark != null">remark = #{remark},</if> | ||||
|             update_time = sysdate() | ||||
|         </set> | ||||
|         where table_id = #{tableId} | ||||
|     </update> | ||||
|      | ||||
|     <delete id="deleteGenTableByIds" parameterType="Long"> | ||||
|         delete from gen_table where table_id in  | ||||
|         <foreach collection="array" item="tableId" open="(" separator="," close=")"> | ||||
|             #{tableId} | ||||
|         </foreach> | ||||
|     </delete> | ||||
|  | ||||
| </mapper>  | ||||
							
								
								
									
										114
									
								
								ruoyi-generator/src/main/resources/vm/java/controller.java.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								ruoyi-generator/src/main/resources/vm/java/controller.java.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | ||||
| package ${packageName}.controller; | ||||
|  | ||||
| import java.util.List; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.PutMapping; | ||||
| import org.springframework.web.bind.annotation.DeleteMapping; | ||||
| import org.springframework.web.bind.annotation.PathVariable; | ||||
| import org.springframework.web.bind.annotation.RequestBody; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import com.ruoyi.common.annotation.Log; | ||||
| import com.ruoyi.common.core.controller.BaseController; | ||||
| import com.ruoyi.common.core.domain.AjaxResult; | ||||
| import com.ruoyi.common.enums.BusinessType; | ||||
| import ${packageName}.domain.${ClassName}; | ||||
| import ${packageName}.service.I${ClassName}Service; | ||||
| import com.ruoyi.common.utils.poi.ExcelUtil; | ||||
| #if($table.crud) | ||||
| import com.ruoyi.common.core.page.TableDataInfo; | ||||
| #elseif($table.tree) | ||||
| #end | ||||
|  | ||||
| /** | ||||
|  * ${functionName}Controller | ||||
|  *  | ||||
|  * @author ${author} | ||||
|  * @date ${datetime} | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/${moduleName}/${businessName}") | ||||
| public class ${ClassName}Controller extends BaseController | ||||
| { | ||||
|     @Autowired | ||||
|     private I${ClassName}Service ${className}Service; | ||||
|  | ||||
|     /** | ||||
|      * 查询${functionName}列表 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") | ||||
|     @GetMapping("/list") | ||||
| #if($table.crud) | ||||
|     public TableDataInfo list(${ClassName} ${className}) | ||||
|     { | ||||
|         startPage(); | ||||
|         List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); | ||||
|         return getDataTable(list); | ||||
|     } | ||||
| #elseif($table.tree) | ||||
|     public AjaxResult list(${ClassName} ${className}) | ||||
|     { | ||||
|         List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); | ||||
|         return AjaxResult.success(list); | ||||
|     } | ||||
| #end | ||||
|  | ||||
|     /** | ||||
|      * 导出${functionName}列表 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") | ||||
|     @Log(title = "${functionName}", businessType = BusinessType.EXPORT) | ||||
|     @GetMapping("/export") | ||||
|     public AjaxResult export(${ClassName} ${className}) | ||||
|     { | ||||
|         List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); | ||||
|         ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); | ||||
|         return util.exportExcel(list, "${businessName}"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取${functionName}详细信息 | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") | ||||
|     @GetMapping(value = "/{${pkColumn.javaField}}") | ||||
|     public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) | ||||
|     { | ||||
|         return AjaxResult.success(${className}Service.select${ClassName}ById(${pkColumn.javaField})); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增${functionName} | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") | ||||
|     @Log(title = "${functionName}", businessType = BusinessType.INSERT) | ||||
|     @PostMapping | ||||
|     public AjaxResult add(@RequestBody ${ClassName} ${className}) | ||||
|     { | ||||
|         return toAjax(${className}Service.insert${ClassName}(${className})); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改${functionName} | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") | ||||
|     @Log(title = "${functionName}", businessType = BusinessType.UPDATE) | ||||
|     @PutMapping | ||||
|     public AjaxResult edit(@RequestBody ${ClassName} ${className}) | ||||
|     { | ||||
|         return toAjax(${className}Service.update${ClassName}(${className})); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除${functionName} | ||||
|      */ | ||||
|     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") | ||||
|     @Log(title = "${functionName}", businessType = BusinessType.DELETE) | ||||
| 	@DeleteMapping("/{${pkColumn.javaField}s}") | ||||
|     public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) | ||||
|     { | ||||
|         return toAjax(${className}Service.delete${ClassName}ByIds(${pkColumn.javaField}s)); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										85
									
								
								ruoyi-generator/src/main/resources/vm/java/domain.java.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								ruoyi-generator/src/main/resources/vm/java/domain.java.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| package ${packageName}.domain; | ||||
|  | ||||
| #foreach ($import in $importList) | ||||
| import ${import}; | ||||
| #end | ||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | ||||
| import org.apache.commons.lang3.builder.ToStringStyle; | ||||
| import com.ruoyi.common.annotation.Excel; | ||||
| #if($table.crud) | ||||
| import com.ruoyi.common.core.domain.BaseEntity; | ||||
| #elseif($table.tree) | ||||
| import com.ruoyi.common.core.domain.TreeEntity; | ||||
| #end | ||||
|  | ||||
| /** | ||||
|  * ${functionName}对象 ${tableName} | ||||
|  *  | ||||
|  * @author ${author} | ||||
|  * @date ${datetime} | ||||
|  */ | ||||
| #if($table.crud) | ||||
| #set($Entity="BaseEntity") | ||||
| #elseif($table.tree) | ||||
| #set($Entity="TreeEntity") | ||||
| #end | ||||
| public class ${ClassName} extends ${Entity} | ||||
| { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
| #foreach ($column in $columns) | ||||
| #if(!$table.isSuperColumn($column.javaField)) | ||||
|     /** $column.columnComment */ | ||||
| #if($column.list) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if($parentheseIndex != -1) | ||||
|     @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") | ||||
| #elseif($column.javaType == 'Date') | ||||
|     @JsonFormat(pattern = "yyyy-MM-dd") | ||||
|     @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") | ||||
| #else | ||||
|     @Excel(name = "${comment}") | ||||
| #end | ||||
| #end | ||||
|     private $column.javaType $column.javaField; | ||||
|  | ||||
| #end | ||||
| #end | ||||
| #foreach ($column in $columns) | ||||
| #if(!$table.isSuperColumn($column.javaField)) | ||||
| #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) | ||||
| #set($AttrName=$column.javaField) | ||||
| #else | ||||
| #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) | ||||
| #end | ||||
|     public void set${AttrName}($column.javaType $column.javaField)  | ||||
|     { | ||||
|         this.$column.javaField = $column.javaField; | ||||
|     } | ||||
|  | ||||
|     public $column.javaType get${AttrName}()  | ||||
|     { | ||||
|         return $column.javaField; | ||||
|     } | ||||
| #end | ||||
| #end | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | ||||
| #foreach ($column in $columns) | ||||
| #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) | ||||
| #set($AttrName=$column.javaField) | ||||
| #else | ||||
| #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) | ||||
| #end | ||||
|             .append("${column.javaField}", get${AttrName}()) | ||||
| #end | ||||
|             .toString(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										61
									
								
								ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| package ${packageName}.mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import ${packageName}.domain.${ClassName}; | ||||
|  | ||||
| /** | ||||
|  * ${functionName}Mapper接口 | ||||
|  *  | ||||
|  * @author ${author} | ||||
|  * @date ${datetime} | ||||
|  */ | ||||
| public interface ${ClassName}Mapper  | ||||
| { | ||||
|     /** | ||||
|      * 查询${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return ${functionName} | ||||
|      */ | ||||
|     public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); | ||||
|  | ||||
|     /** | ||||
|      * 查询${functionName}列表 | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return ${functionName}集合 | ||||
|      */ | ||||
|     public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 新增${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insert${ClassName}(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 修改${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int update${ClassName}(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 删除${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField}s 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s); | ||||
| } | ||||
							
								
								
									
										61
									
								
								ruoyi-generator/src/main/resources/vm/java/service.java.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ruoyi-generator/src/main/resources/vm/java/service.java.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| package ${packageName}.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import ${packageName}.domain.${ClassName}; | ||||
|  | ||||
| /** | ||||
|  * ${functionName}Service接口 | ||||
|  *  | ||||
|  * @author ${author} | ||||
|  * @date ${datetime} | ||||
|  */ | ||||
| public interface I${ClassName}Service  | ||||
| { | ||||
|     /** | ||||
|      * 查询${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return ${functionName} | ||||
|      */ | ||||
|     public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); | ||||
|  | ||||
|     /** | ||||
|      * 查询${functionName}列表 | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return ${functionName}集合 | ||||
|      */ | ||||
|     public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 新增${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insert${ClassName}(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 修改${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int update${ClassName}(${ClassName} ${className}); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField}s 需要删除的${functionName}ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s); | ||||
|  | ||||
|     /** | ||||
|      * 删除${functionName}信息 | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); | ||||
| } | ||||
							
								
								
									
										109
									
								
								ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| package ${packageName}.service.impl; | ||||
|  | ||||
| import java.util.List; | ||||
| #foreach ($column in $columns) | ||||
| #if($column.javaField == 'createTime' || $column.javaField == 'updateTime') | ||||
| import com.ruoyi.common.utils.DateUtils; | ||||
| #break | ||||
| #end | ||||
| #end | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import ${packageName}.mapper.${ClassName}Mapper; | ||||
| import ${packageName}.domain.${ClassName}; | ||||
| import ${packageName}.service.I${ClassName}Service; | ||||
|  | ||||
| /** | ||||
|  * ${functionName}Service业务层处理 | ||||
|  *  | ||||
|  * @author ${author} | ||||
|  * @date ${datetime} | ||||
|  */ | ||||
| @Service | ||||
| public class ${ClassName}ServiceImpl implements I${ClassName}Service  | ||||
| { | ||||
|     @Autowired | ||||
|     private ${ClassName}Mapper ${className}Mapper; | ||||
|  | ||||
|     /** | ||||
|      * 查询${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return ${functionName} | ||||
|      */ | ||||
|     @Override | ||||
|     public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}) | ||||
|     { | ||||
|         return ${className}Mapper.select${ClassName}ById(${pkColumn.javaField}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询${functionName}列表 | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return ${functionName} | ||||
|      */ | ||||
|     @Override | ||||
|     public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) | ||||
|     { | ||||
|         return ${className}Mapper.select${ClassName}List(${className}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int insert${ClassName}(${ClassName} ${className}) | ||||
|     { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.javaField == 'createTime') | ||||
|         ${className}.setCreateTime(DateUtils.getNowDate()); | ||||
| #end | ||||
| #end | ||||
|         return ${className}Mapper.insert${ClassName}(${className}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改${functionName} | ||||
|      *  | ||||
|      * @param ${className} ${functionName} | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int update${ClassName}(${ClassName} ${className}) | ||||
|     { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.javaField == 'updateTime') | ||||
|         ${className}.setUpdateTime(DateUtils.getNowDate()); | ||||
| #end | ||||
| #end | ||||
|         return ${className}Mapper.update${ClassName}(${className}); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 批量删除${functionName} | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField}s 需要删除的${functionName}ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s) | ||||
|     { | ||||
|         return ${className}Mapper.delete${ClassName}ByIds(${pkColumn.javaField}s); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除${functionName}信息 | ||||
|      *  | ||||
|      * @param ${pkColumn.javaField} ${functionName}ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}) | ||||
|     { | ||||
|         return ${className}Mapper.delete${ClassName}ById(${pkColumn.javaField}); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										53
									
								
								ruoyi-generator/src/main/resources/vm/js/api.js.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								ruoyi-generator/src/main/resources/vm/js/api.js.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| 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' | ||||
|   }) | ||||
| } | ||||
|  | ||||
| // 导出${functionName} | ||||
| export function export${BusinessName}(query) { | ||||
|   return request({ | ||||
|     url: '/${moduleName}/${businessName}/export', | ||||
|     method: 'get', | ||||
|     params: query | ||||
|   }) | ||||
| } | ||||
							
								
								
									
										22
									
								
								ruoyi-generator/src/main/resources/vm/sql/sql.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								ruoyi-generator/src/main/resources/vm/sql/sql.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| -- 菜单 SQL | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}', '3', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '${functionName}菜单'); | ||||
|  | ||||
| -- 按钮父菜单ID | ||||
| SELECT @parentId := LAST_INSERT_ID(); | ||||
|  | ||||
| -- 按钮 SQL | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}查询', @parentId, '1',  '#', '', 1,  'F', '0',  '0', '${permissionPrefix}:query',        '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); | ||||
|  | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}新增', @parentId, '2',  '#', '', 1,  'F', '0',  '0', '${permissionPrefix}:add',          '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); | ||||
|  | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}修改', @parentId, '3',  '#', '', 1,  'F', '0',  '0', '${permissionPrefix}:edit',         '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); | ||||
|  | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}删除', @parentId, '4',  '#', '', 1,  'F', '0',  '0', '${permissionPrefix}:remove',       '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); | ||||
|  | ||||
| insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) | ||||
| values('${functionName}导出', @parentId, '5',  '#', '', 1,  'F', '0',  '0', '${permissionPrefix}:export',       '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); | ||||
							
								
								
									
										407
									
								
								ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										407
									
								
								ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,407 @@ | ||||
| <template> | ||||
|   <div class="app-container"> | ||||
|     <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px"> | ||||
| #foreach($column in $columns) | ||||
| #if($column.query) | ||||
| #set($dictType=$column.dictType) | ||||
| #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if($column.htmlType == "input") | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-input | ||||
|           v-model="queryParams.${column.javaField}" | ||||
|           placeholder="请输入${comment}" | ||||
|           clearable | ||||
|           size="small" | ||||
|           @keyup.enter.native="handleQuery" | ||||
|         /> | ||||
|       </el-form-item> | ||||
| #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable size="small"> | ||||
|           <el-option | ||||
|             v-for="dict in ${column.javaField}Options" | ||||
|             :key="dict.dictValue" | ||||
|             :label="dict.dictLabel" | ||||
|             :value="dict.dictValue" | ||||
|           /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
| #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType) | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable size="small"> | ||||
|           <el-option label="请选择字典生成" value="" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
| #elseif($column.htmlType == "datetime") | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-date-picker clearable size="small" style="width: 200px" | ||||
|           v-model="queryParams.${column.javaField}" | ||||
|           type="date" | ||||
|           value-format="yyyy-MM-dd" | ||||
|           placeholder="选择${comment}"> | ||||
|         </el-date-picker> | ||||
|       </el-form-item> | ||||
| #end | ||||
| #end | ||||
| #end | ||||
|       <el-form-item> | ||||
|         <el-button | ||||
|           class="filter-item" | ||||
|           type="primary" | ||||
|           icon="el-icon-search" | ||||
|           size="mini" | ||||
|           @click="handleQuery" | ||||
|         >搜索</el-button> | ||||
|         <el-button | ||||
|           class="filter-item" | ||||
|           type="primary" | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['${moduleName}:${businessName}:add']" | ||||
|         >新增</el-button> | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
|  | ||||
|     <el-table | ||||
|       v-loading="loading" | ||||
|       :data="${businessName}List" | ||||
|       row-key="${treeCode}" | ||||
|       default-expand-all | ||||
|       :tree-props="{children: 'children', hasChildren: 'hasChildren'}" | ||||
|     > | ||||
| #foreach($column in $columns) | ||||
| #set($javaField=$column.javaField) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if($column.pk) | ||||
| #elseif($column.list && $column.htmlType == "datetime") | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" width="180"> | ||||
|         <template slot-scope="scope"> | ||||
|           <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
| #elseif($column.list && "" != $column.dictType) | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" :formatter="${javaField}Format" /> | ||||
| #elseif($column.list && "" != $javaField) | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" /> | ||||
| #end | ||||
| #end | ||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|         <template slot-scope="scope"> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['${moduleName}:${businessName}:edit']" | ||||
|           >修改</el-button> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['${moduleName}:${businessName}:remove']" | ||||
|           >删除</el-button> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|     </el-table> | ||||
|  | ||||
|     <!-- 添加或修改${functionName}对话框 --> | ||||
|     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | ||||
|       <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | ||||
| #foreach($column in $columns) | ||||
| #set($field=$column.javaField) | ||||
| #if($column.insert && !$column.pk) | ||||
| #if(($column.usableColumn) || (!$column.superColumn)) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #set($dictType=$column.dictType) | ||||
| #if("" != $treeParentCode && $column.javaField == $treeParentCode) | ||||
|         <el-form-item label="${comment}" prop="${treeParentCode}"> | ||||
|           <treeselect v-model="form.${treeParentCode}" :options="${businessName}Options" :normalizer="normalizer" placeholder="请选择${comment}" /> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "input") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-input v-model="form.${field}" placeholder="请输入${comment}" /> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "select" && "" != $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-select v-model="form.${field}" placeholder="请选择${comment}"> | ||||
|             <el-option | ||||
|               v-for="dict in ${field}Options" | ||||
|               :key="dict.dictValue" | ||||
|               :label="dict.dictLabel" | ||||
|               #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.dictValue)"#else:value="dict.dictValue"#end | ||||
|  | ||||
|             ></el-option> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "select" && $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-select v-model="form.${field}" placeholder="请选择${comment}"> | ||||
|             <el-option label="请选择字典生成" value="" /> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "radio" && "" != $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-radio-group v-model="form.${field}"> | ||||
|             <el-radio | ||||
|               v-for="dict in ${field}Options" | ||||
|               :key="dict.dictValue" | ||||
|               #if($column.javaType == "Integer" || $column.javaType == "Long"):label="parseInt(dict.dictValue)"#else:label="dict.dictValue"#end | ||||
|  | ||||
|             >{{dict.dictLabel}}</el-radio> | ||||
|           </el-radio-group> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "radio" && $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-radio-group v-model="form.${field}"> | ||||
|             <el-radio label="1">请选择字典生成</el-radio> | ||||
|           </el-radio-group> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "datetime") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-date-picker clearable size="small" style="width: 200px" | ||||
|             v-model="form.${field}" | ||||
|             type="date" | ||||
|             value-format="yyyy-MM-dd" | ||||
|             placeholder="选择${comment}"> | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "textarea") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> | ||||
|         </el-form-item> | ||||
| #end | ||||
| #end | ||||
| #end | ||||
| #end | ||||
|       </el-form> | ||||
|       <div slot="footer" class="dialog-footer"> | ||||
|         <el-button type="primary" @click="submitForm">确 定</el-button> | ||||
|         <el-button @click="cancel">取 消</el-button> | ||||
|       </div> | ||||
|     </el-dialog> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName}, export${BusinessName} } from "@/api/${moduleName}/${businessName}"; | ||||
| import Treeselect from "@riophae/vue-treeselect"; | ||||
| import "@riophae/vue-treeselect/dist/vue-treeselect.css"; | ||||
|  | ||||
| export default { | ||||
|   name: "${BusinessName}", | ||||
|   components: { Treeselect }, | ||||
|   data() { | ||||
|     return { | ||||
|       // 遮罩层 | ||||
|       loading: true, | ||||
|       // ${functionName}表格数据 | ||||
|       ${businessName}List: [], | ||||
|       // ${functionName}树选项 | ||||
|       ${businessName}Options: [], | ||||
|       // 弹出层标题 | ||||
|       title: "", | ||||
|       // 是否显示弹出层 | ||||
|       open: false, | ||||
| #foreach ($column in $columns) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if(${column.dictType} != '') | ||||
|       // $comment字典 | ||||
|       ${column.javaField}Options: [], | ||||
| #end | ||||
| #end | ||||
|       // 查询参数 | ||||
|       queryParams: { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.query) | ||||
|         $column.javaField: undefined#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       }, | ||||
|       // 表单参数 | ||||
|       form: {}, | ||||
|       // 表单校验 | ||||
|       rules: { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.required) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #set($comment=$column.columnComment) | ||||
|         $column.javaField: [ | ||||
|           { required: true, message: "$comment不能为空", trigger: "blur" } | ||||
|         ]#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       } | ||||
|     }; | ||||
|   }, | ||||
|   created() { | ||||
|     this.getList(); | ||||
| #foreach ($column in $columns) | ||||
| #if(${column.dictType} != '') | ||||
|     this.getDicts("${column.dictType}").then(response => { | ||||
|       this.${column.javaField}Options = response.data; | ||||
|     }); | ||||
| #end | ||||
| #end | ||||
|   }, | ||||
|   methods: { | ||||
|     /** 查询${functionName}列表 */ | ||||
|     getList() { | ||||
|       this.loading = true; | ||||
|       list${BusinessName}(this.queryParams).then(response => { | ||||
|         this.${businessName}List = this.handleTree(response.data, "${treeCode}", "${treeParentCode}"); | ||||
|         this.loading = false; | ||||
|       }); | ||||
|     }, | ||||
|     /** 转换${functionName}数据结构 */ | ||||
|     normalizer(node) { | ||||
|       if (node.children && !node.children.length) { | ||||
|         delete node.children; | ||||
|       } | ||||
|       return { | ||||
|         id: node.${treeCode}, | ||||
|         label: node.${treeName}, | ||||
|         children: node.children | ||||
|       }; | ||||
|     }, | ||||
| 	/** 查询部门下拉树结构 */ | ||||
|     getTreeselect() { | ||||
|       list${BusinessName}().then(response => { | ||||
|         this.${businessName}Options = []; | ||||
|         const data = { ${treeCode}: 0, ${treeName}: '顶级节点', children: [] }; | ||||
|         data.children = this.handleTree(response.data, "${treeCode}", "${treeParentCode}"); | ||||
|         this.${businessName}Options.push(data); | ||||
|       }); | ||||
|     }, | ||||
| #foreach ($column in $columns) | ||||
| #if(${column.dictType} != '') | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
|     // $comment字典翻译 | ||||
|     ${column.javaField}Format(row, column) { | ||||
|       return this.selectDictLabel(this.${column.javaField}Options, row.${column.javaField}); | ||||
|     }, | ||||
| #end | ||||
| #end | ||||
|     // 取消按钮 | ||||
|     cancel() { | ||||
|       this.open = false; | ||||
|       this.reset(); | ||||
|     }, | ||||
|     // 表单重置 | ||||
|     reset() { | ||||
|       this.form = { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.htmlType == "radio") | ||||
|         $column.javaField: "0"#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #else | ||||
|         $column.javaField: undefined#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|     }, | ||||
|     /** 搜索按钮操作 */ | ||||
|     handleQuery() { | ||||
|       this.getList(); | ||||
|     }, | ||||
|     /** 重置按钮操作 */ | ||||
|     resetQuery() { | ||||
|       this.resetForm("queryForm"); | ||||
|       this.handleQuery(); | ||||
|     }, | ||||
|     /** 新增按钮操作 */ | ||||
|     handleAdd() { | ||||
|       this.reset(); | ||||
| 	  this.getTreeselect(); | ||||
|       this.open = true; | ||||
|       this.title = "添加${functionName}"; | ||||
|     }, | ||||
|     /** 修改按钮操作 */ | ||||
|     handleUpdate(row) { | ||||
|       this.reset(); | ||||
| 	  this.getTreeselect(); | ||||
|       if (row != undefined) { | ||||
|         this.form.${treeParentCode} = row.${treeCode}; | ||||
|       } | ||||
|       get${BusinessName}(row.${pkColumn.javaField}).then(response => { | ||||
|         this.form = response.data; | ||||
|         this.open = true; | ||||
|         this.title = "修改${functionName}"; | ||||
|       }); | ||||
|     }, | ||||
|     /** 提交按钮 */ | ||||
|     submitForm: function() { | ||||
|       this.#[[$]]#refs["form"].validate(valid => { | ||||
|         if (valid) { | ||||
|           if (this.form.${pkColumn.javaField} != undefined) { | ||||
|             update${BusinessName}(this.form).then(response => { | ||||
|               if (response.code === 200) { | ||||
|                 this.msgSuccess("修改成功"); | ||||
|                 this.open = false; | ||||
|                 this.getList(); | ||||
|               } | ||||
|             }); | ||||
|           } else { | ||||
|             add${BusinessName}(this.form).then(response => { | ||||
|               if (response.code === 200) { | ||||
|                 this.msgSuccess("新增成功"); | ||||
|                 this.open = false; | ||||
|                 this.getList(); | ||||
|               } | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|     /** 删除按钮操作 */ | ||||
|     handleDelete(row) { | ||||
|       this.$confirm('是否确认删除${functionName}编号为"' + row.${pkColumn.javaField} + '"的数据项?', "警告", { | ||||
|           confirmButtonText: "确定", | ||||
|           cancelButtonText: "取消", | ||||
|           type: "warning" | ||||
|         }).then(function() { | ||||
|           return del${BusinessName}(row.${pkColumn.javaField}); | ||||
|         }).then(() => { | ||||
|           this.getList(); | ||||
|           this.msgSuccess("删除成功"); | ||||
|         }).catch(function() {}); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
| </script> | ||||
							
								
								
									
										438
									
								
								ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										438
									
								
								ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,438 @@ | ||||
| <template> | ||||
|   <div class="app-container"> | ||||
|     <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px"> | ||||
| #foreach($column in $columns) | ||||
| #if($column.query) | ||||
| #set($dictType=$column.dictType) | ||||
| #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if($column.htmlType == "input") | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-input | ||||
|           v-model="queryParams.${column.javaField}" | ||||
|           placeholder="请输入${comment}" | ||||
|           clearable | ||||
|           size="small" | ||||
|           @keyup.enter.native="handleQuery" | ||||
|         /> | ||||
|       </el-form-item> | ||||
| #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable size="small"> | ||||
|           <el-option | ||||
|             v-for="dict in ${column.javaField}Options" | ||||
|             :key="dict.dictValue" | ||||
|             :label="dict.dictLabel" | ||||
|             :value="dict.dictValue" | ||||
|           /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
| #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType) | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable size="small"> | ||||
|           <el-option label="请选择字典生成" value="" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
| #elseif($column.htmlType == "datetime") | ||||
|       <el-form-item label="${comment}" prop="${column.javaField}"> | ||||
|         <el-date-picker clearable size="small" style="width: 200px" | ||||
|           v-model="queryParams.${column.javaField}" | ||||
|           type="date" | ||||
|           value-format="yyyy-MM-dd" | ||||
|           placeholder="选择${comment}"> | ||||
|         </el-date-picker> | ||||
|       </el-form-item> | ||||
| #end | ||||
| #end | ||||
| #end | ||||
|       <el-form-item> | ||||
|         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
|  | ||||
|     <el-row :gutter="10" class="mb8"> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="primary" | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['${moduleName}:${businessName}:add']" | ||||
|         >新增</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="success" | ||||
|           icon="el-icon-edit" | ||||
|           size="mini" | ||||
|           :disabled="single" | ||||
|           @click="handleUpdate" | ||||
|           v-hasPermi="['${moduleName}:${businessName}:edit']" | ||||
|         >修改</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="danger" | ||||
|           icon="el-icon-delete" | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete" | ||||
|           v-hasPermi="['${moduleName}:${businessName}:remove']" | ||||
|         >删除</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="warning" | ||||
|           icon="el-icon-download" | ||||
|           size="mini" | ||||
|           @click="handleExport" | ||||
|           v-hasPermi="['${moduleName}:${businessName}:export']" | ||||
|         >导出</el-button> | ||||
|       </el-col> | ||||
|     </el-row> | ||||
|  | ||||
|     <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange"> | ||||
|       <el-table-column type="selection" width="55" align="center" /> | ||||
| #foreach($column in $columns) | ||||
| #set($javaField=$column.javaField) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if($column.pk) | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" /> | ||||
| #elseif($column.list && $column.htmlType == "datetime") | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" width="180"> | ||||
|         <template slot-scope="scope"> | ||||
|           <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
| #elseif($column.list && "" != $column.dictType) | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" :formatter="${javaField}Format" /> | ||||
| #elseif($column.list && "" != $javaField) | ||||
|       <el-table-column label="${comment}" align="center" prop="${javaField}" /> | ||||
| #end | ||||
| #end | ||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|         <template slot-scope="scope"> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['${moduleName}:${businessName}:edit']" | ||||
|           >修改</el-button> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['${moduleName}:${businessName}:remove']" | ||||
|           >删除</el-button> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|     </el-table> | ||||
|      | ||||
|     <pagination | ||||
|       v-show="total>0" | ||||
|       :total="total" | ||||
|       :page.sync="queryParams.pageNum" | ||||
|       :limit.sync="queryParams.pageSize" | ||||
|       @pagination="getList" | ||||
|     /> | ||||
|  | ||||
|     <!-- 添加或修改${functionName}对话框 --> | ||||
|     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | ||||
|       <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | ||||
| #foreach($column in $columns) | ||||
| #set($field=$column.javaField) | ||||
| #if($column.insert && !$column.pk) | ||||
| #if(($column.usableColumn) || (!$column.superColumn)) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #set($dictType=$column.dictType) | ||||
| #if($column.htmlType == "input") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-input v-model="form.${field}" placeholder="请输入${comment}" /> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "select" && "" != $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-select v-model="form.${field}" placeholder="请选择${comment}"> | ||||
|             <el-option | ||||
|               v-for="dict in ${field}Options" | ||||
|               :key="dict.dictValue" | ||||
|               :label="dict.dictLabel" | ||||
|               #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.dictValue)"#else:value="dict.dictValue"#end | ||||
|  | ||||
|             ></el-option> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "select" && $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-select v-model="form.${field}" placeholder="请选择${comment}"> | ||||
|             <el-option label="请选择字典生成" value="" /> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "radio" && "" != $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-radio-group v-model="form.${field}"> | ||||
|             <el-radio | ||||
|               v-for="dict in ${field}Options" | ||||
|               :key="dict.dictValue" | ||||
|               #if($column.javaType == "Integer" || $column.javaType == "Long"):label="parseInt(dict.dictValue)"#else:label="dict.dictValue"#end | ||||
|  | ||||
|             >{{dict.dictLabel}}</el-radio> | ||||
|           </el-radio-group> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "radio" && $dictType) | ||||
|         <el-form-item label="${comment}"> | ||||
|           <el-radio-group v-model="form.${field}"> | ||||
|             <el-radio label="1">请选择字典生成</el-radio> | ||||
|           </el-radio-group> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "datetime") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-date-picker clearable size="small" style="width: 200px" | ||||
|             v-model="form.${field}" | ||||
|             type="date" | ||||
|             value-format="yyyy-MM-dd" | ||||
|             placeholder="选择${comment}"> | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
| #elseif($column.htmlType == "textarea") | ||||
|         <el-form-item label="${comment}" prop="${field}"> | ||||
|           <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> | ||||
|         </el-form-item> | ||||
| #end | ||||
| #end | ||||
| #end | ||||
| #end | ||||
|       </el-form> | ||||
|       <div slot="footer" class="dialog-footer"> | ||||
|         <el-button type="primary" @click="submitForm">确 定</el-button> | ||||
|         <el-button @click="cancel">取 消</el-button> | ||||
|       </div> | ||||
|     </el-dialog> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName}, export${BusinessName} } from "@/api/${moduleName}/${businessName}"; | ||||
|  | ||||
| export default { | ||||
|   name: "${BusinessName}", | ||||
|   data() { | ||||
|     return { | ||||
|       // 遮罩层 | ||||
|       loading: true, | ||||
|       // 选中数组 | ||||
|       ids: [], | ||||
|       // 非单个禁用 | ||||
|       single: true, | ||||
|       // 非多个禁用 | ||||
|       multiple: true, | ||||
|       // 总条数 | ||||
|       total: 0, | ||||
|       // ${functionName}表格数据 | ||||
|       ${businessName}List: [], | ||||
|       // 弹出层标题 | ||||
|       title: "", | ||||
|       // 是否显示弹出层 | ||||
|       open: false, | ||||
| #foreach ($column in $columns) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #if(${column.dictType} != '') | ||||
|       // $comment字典 | ||||
|       ${column.javaField}Options: [], | ||||
| #end | ||||
| #end | ||||
|       // 查询参数 | ||||
|       queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
| #foreach ($column in $columns) | ||||
| #if($column.query) | ||||
|         $column.javaField: undefined#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       }, | ||||
|       // 表单参数 | ||||
|       form: {}, | ||||
|       // 表单校验 | ||||
|       rules: { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.required) | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
| #set($comment=$column.columnComment) | ||||
|         $column.javaField: [ | ||||
|           { required: true, message: "$comment不能为空", trigger: "blur" } | ||||
|         ]#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       } | ||||
|     }; | ||||
|   }, | ||||
|   created() { | ||||
|     this.getList(); | ||||
| #foreach ($column in $columns) | ||||
| #if(${column.dictType} != '') | ||||
|     this.getDicts("${column.dictType}").then(response => { | ||||
|       this.${column.javaField}Options = response.data; | ||||
|     }); | ||||
| #end | ||||
| #end | ||||
|   }, | ||||
|   methods: { | ||||
|     /** 查询${functionName}列表 */ | ||||
|     getList() { | ||||
|       this.loading = true; | ||||
|       list${BusinessName}(this.queryParams).then(response => { | ||||
|         this.${businessName}List = response.rows; | ||||
|         this.total = response.total; | ||||
|         this.loading = false; | ||||
|       }); | ||||
|     }, | ||||
| #foreach ($column in $columns) | ||||
| #if(${column.dictType} != '') | ||||
| #set($parentheseIndex=$column.columnComment.indexOf("(")) | ||||
| #if($parentheseIndex != -1) | ||||
| #set($comment=$column.columnComment.substring(0, $parentheseIndex)) | ||||
| #else | ||||
| #set($comment=$column.columnComment) | ||||
| #end | ||||
|     // $comment字典翻译 | ||||
|     ${column.javaField}Format(row, column) { | ||||
|       return this.selectDictLabel(this.${column.javaField}Options, row.${column.javaField}); | ||||
|     }, | ||||
| #end | ||||
| #end | ||||
|     // 取消按钮 | ||||
|     cancel() { | ||||
|       this.open = false; | ||||
|       this.reset(); | ||||
|     }, | ||||
|     // 表单重置 | ||||
|     reset() { | ||||
|       this.form = { | ||||
| #foreach ($column in $columns) | ||||
| #if($column.htmlType == "radio") | ||||
|         $column.javaField: "0"#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #else | ||||
|         $column.javaField: undefined#if($velocityCount != $columns.size()),#end | ||||
|  | ||||
| #end | ||||
| #end | ||||
|       }; | ||||
|       this.resetForm("form"); | ||||
|     }, | ||||
|     /** 搜索按钮操作 */ | ||||
|     handleQuery() { | ||||
|       this.queryParams.pageNum = 1; | ||||
|       this.getList(); | ||||
|     }, | ||||
|     /** 重置按钮操作 */ | ||||
|     resetQuery() { | ||||
|       this.resetForm("queryForm"); | ||||
|       this.handleQuery(); | ||||
|     }, | ||||
|     // 多选框选中数据 | ||||
|     handleSelectionChange(selection) { | ||||
|       this.ids = selection.map(item => item.${pkColumn.javaField}) | ||||
|       this.single = selection.length!=1 | ||||
|       this.multiple = !selection.length | ||||
|     }, | ||||
|     /** 新增按钮操作 */ | ||||
|     handleAdd() { | ||||
|       this.reset(); | ||||
|       this.open = true; | ||||
|       this.title = "添加${functionName}"; | ||||
|     }, | ||||
|     /** 修改按钮操作 */ | ||||
|     handleUpdate(row) { | ||||
|       this.reset(); | ||||
|       const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids | ||||
|       get${BusinessName}(${pkColumn.javaField}).then(response => { | ||||
|         this.form = response.data; | ||||
|         this.open = true; | ||||
|         this.title = "修改${functionName}"; | ||||
|       }); | ||||
|     }, | ||||
|     /** 提交按钮 */ | ||||
|     submitForm: function() { | ||||
|       this.#[[$]]#refs["form"].validate(valid => { | ||||
|         if (valid) { | ||||
|           if (this.form.${pkColumn.javaField} != undefined) { | ||||
|             update${BusinessName}(this.form).then(response => { | ||||
|               if (response.code === 200) { | ||||
|                 this.msgSuccess("修改成功"); | ||||
|                 this.open = false; | ||||
|                 this.getList(); | ||||
|               } | ||||
|             }); | ||||
|           } else { | ||||
|             add${BusinessName}(this.form).then(response => { | ||||
|               if (response.code === 200) { | ||||
|                 this.msgSuccess("新增成功"); | ||||
|                 this.open = false; | ||||
|                 this.getList(); | ||||
|               } | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|     /** 删除按钮操作 */ | ||||
|     handleDelete(row) { | ||||
|       const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids; | ||||
|       this.$confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?', "警告", { | ||||
|           confirmButtonText: "确定", | ||||
|           cancelButtonText: "取消", | ||||
|           type: "warning" | ||||
|         }).then(function() { | ||||
|           return del${BusinessName}(${pkColumn.javaField}s); | ||||
|         }).then(() => { | ||||
|           this.getList(); | ||||
|           this.msgSuccess("删除成功"); | ||||
|         }).catch(function() {}); | ||||
|     }, | ||||
|     /** 导出按钮操作 */ | ||||
|     handleExport() { | ||||
|       const queryParams = this.queryParams; | ||||
|       this.$confirm('是否确认导出所有${functionName}数据项?', "警告", { | ||||
|           confirmButtonText: "确定", | ||||
|           cancelButtonText: "取消", | ||||
|           type: "warning" | ||||
|         }).then(function() { | ||||
|           return export${BusinessName}(queryParams); | ||||
|         }).then(response => { | ||||
|           this.download(response.msg); | ||||
|         }).catch(function() {}); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
| </script> | ||||
							
								
								
									
										95
									
								
								ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="${packageName}.mapper.${ClassName}Mapper"> | ||||
|      | ||||
|     <resultMap type="${ClassName}" id="${ClassName}Result"> | ||||
| #foreach ($column in $columns) | ||||
|         <result property="${column.javaField}"    column="${column.columnName}"    /> | ||||
| #end | ||||
|     </resultMap> | ||||
|  | ||||
|     <sql id="select${ClassName}Vo"> | ||||
|         select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName} | ||||
|     </sql> | ||||
|  | ||||
|     <select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result"> | ||||
|         <include refid="select${ClassName}Vo"/> | ||||
|         <where>   | ||||
| #foreach($column in $columns) | ||||
| #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)}) | ||||
| #if($column.query) | ||||
| #if($column.queryType == "EQ") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if> | ||||
| #elseif($queryType == "NE") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if> | ||||
| #elseif($queryType == "GT") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName > #{$javaField}</if> | ||||
| #elseif($queryType == "GTE") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName >= #{$javaField}</if> | ||||
| #elseif($queryType == "LT") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName < #{$javaField}</if> | ||||
| #elseif($queryType == "LTE") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName <= #{$javaField}</if> | ||||
| #elseif($queryType == "LIKE") | ||||
|             <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if> | ||||
| #elseif($queryType == "BETWEEN") | ||||
|             <if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if> | ||||
| #end | ||||
| #end | ||||
| #end | ||||
|         </where> | ||||
|     </select> | ||||
|      | ||||
|     <select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}Result"> | ||||
|         <include refid="select${ClassName}Vo"/> | ||||
|         where ${pkColumn.columnName} = #{${pkColumn.javaField}} | ||||
|     </select> | ||||
|          | ||||
|     <insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end> | ||||
|         insert into ${tableName} | ||||
|         <trim prefix="(" suffix=")" suffixOverrides=","> | ||||
| #foreach($column in $columns) | ||||
| #if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) | ||||
|             <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if> | ||||
| #end | ||||
| #end | ||||
|          </trim> | ||||
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | ||||
| #foreach($column in $columns) | ||||
| #if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) | ||||
|             <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if> | ||||
| #end | ||||
| #end | ||||
|          </trim> | ||||
|     </insert> | ||||
|  | ||||
|     <update id="update${ClassName}" parameterType="${ClassName}"> | ||||
|         update ${tableName} | ||||
|         <trim prefix="SET" suffixOverrides=","> | ||||
| #foreach($column in $columns) | ||||
| #if($column.columnName != $pkColumn.columnName) | ||||
|             <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if> | ||||
| #end | ||||
| #end | ||||
|         </trim> | ||||
|         where ${pkColumn.columnName} = #{${pkColumn.javaField}} | ||||
|     </update> | ||||
|  | ||||
|     <delete id="delete${ClassName}ById" parameterType="${pkColumn.javaType}"> | ||||
|         delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} | ||||
|     </delete> | ||||
|  | ||||
|     <delete id="delete${ClassName}ByIds" parameterType="String"> | ||||
|         delete from ${tableName} where ${pkColumn.columnName} in  | ||||
|         <foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")"> | ||||
|             #{${pkColumn.javaField}} | ||||
|         </foreach> | ||||
|     </delete> | ||||
|      | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user