diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/config.json b/maku-boot-module/maku-module-generator/src/main/resources/template/config.json index accf551..53cdd5c 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/config.json +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/config.json @@ -1,11 +1,11 @@ { "project": { "packageName": "net.maku", - "version": "1.0.0", - "backendPath": "D:\\generator\\maku-boot\\maku-server", - "frontendPath": "D:\\generator\\maku-admin", + "version": "", + "backendPath": "/Users/maku/makunet/maku-boot/maku-boot-new", + "frontendPath": "/Users/maku/makunet/maku-admin", "tablePrefix": "tb_", - "moduleName": "business", + "moduleName": "test", "author": "阿沐", "email": "babamu@126.com" }, diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Convert.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Convert.java.ftl index 69b4448..d1e67dc 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Convert.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Convert.java.ftl @@ -2,7 +2,7 @@ package ${package}.${moduleName}.convert; import ${package}.${moduleName}.entity.${ClassName}Entity; import ${package}.${moduleName}.vo.${ClassName}VO; -<#if tableOperation?seq_contains('import') || tableOperation?seq_contains('export')> +<#if !hasSub?? && (tableOperation?seq_contains('import') || tableOperation?seq_contains('export'))> import ${package}.${moduleName}.vo.${ClassName}ExcelVO; import org.mapstruct.Mapper; @@ -28,7 +28,7 @@ public interface ${ClassName}Convert { List<${ClassName}Entity> convertList2(List<${ClassName}VO> list); - <#if tableOperation?seq_contains('import') || tableOperation?seq_contains('export')> + <#if !hasSub?? && (tableOperation?seq_contains('import') || tableOperation?seq_contains('export'))> List<${ClassName}ExcelVO> convertExcelList(List<${ClassName}Entity> list); List<${ClassName}Entity> convertExcelList2(List<${ClassName}ExcelVO> list); diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Entity.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Entity.java.ftl index 382f274..ccb9276 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Entity.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Entity.java.ftl @@ -30,6 +30,12 @@ public class ${ClassName}Entity<#if baseClass??> extends ${baseClass.code} <#if field.primaryPk> @TableId + <#if field.fieldName == 'deleted'> + @TableLogic + + <#if field.fieldName == 'version'> + @Version + <#if field.autoFill == "INSERT"> @TableField(value = "${field.fieldName}", fill = FieldFill.INSERT) <#elseif field.autoFill == "INSERT_UPDATE"> diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Excel.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Excel.java.ftl index 2eee3b8..401dccb 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Excel.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Excel.java.ftl @@ -6,6 +6,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.fhs.core.trans.vo.TransPojo; import com.fhs.core.trans.anno.Trans; import com.fhs.core.trans.constant.TransType; +import ${package}.framework.common.excel.LocalDateTimeConverter; <#list importList as i> import ${i!}; @@ -29,11 +30,10 @@ public class ${ClassName}ExcelVO implements TransPojo { <#list gridList as field> - <#if field.fieldComment!?length gt 0> - @ExcelProperty("${field.fieldComment}") - <#if field.attrType == 'LocalDateTime'> - @ExcelProperty(value = "${field.fieldComment}", converter = LocalDateTimeConverter.class) + @ExcelProperty(value = "${field.fieldComment!}", converter = LocalDateTimeConverter.class) + <#elseif field.fieldComment!?length gt 0> + @ExcelProperty("${field.fieldComment}") <#if field.formDict??> private String ${field.attrName}Label; diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Query.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Query.java.ftl index 350c690..651b7ec 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/Query.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/Query.java.ftl @@ -3,6 +3,7 @@ package ${package}.${moduleName}.query; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.*; import ${package}.framework.common.query.Query; import org.springframework.format.annotation.DateTimeFormat; @@ -24,12 +25,14 @@ public class ${ClassName}Query extends Query { <#if field.fieldComment!?length gt 0> @Schema(description = "${field.fieldComment}") - <#if field.queryFormType == 'date'> - @DateTimeFormat(pattern="yyyy-MM-dd") - <#elseif field.queryFormType == 'datetime'> - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + <#if field.queryFormType == 'date' || field.queryFormType == 'datetime'> + private List ${field.attrName}; + <#else> + private ${field.attrType} ${field.attrName}; - private ${field.attrType}<#if field.queryFormType == 'date' || field.queryFormType == 'datetime'>[] ${field.attrName}; +<#if hasLeftTree> + private List ${leftRelationField}; + } \ No newline at end of file diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/ServiceImpl.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/ServiceImpl.java.ftl index 4930faa..4ffb4ce 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/ServiceImpl.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/ServiceImpl.java.ftl @@ -75,32 +75,35 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Dao, ${ private LambdaQueryWrapper<${ClassName}Entity> getWrapper(${ClassName}Query query){ LambdaQueryWrapper<${ClassName}Entity> wrapper = Wrappers.lambdaQuery(); - <#if hasTree> + <#list queryList as field> + <#if hasTree && field.attrName == treePid> + <#assign hasTreePid = true> + if (ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}())) { + wrapper.eq(${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); + } else { + wrapper.isNull(${ClassName}Entity::get${treePid?cap_first}); + } + <#else> + <#if field.queryFormType == 'date' || field.queryFormType == 'datetime'> + if (ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}())) { + wrapper.between(${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}().get(0), query.get${field.attrName?cap_first}().get(1)); + } + <#elseif field.queryType == '='> + wrapper.eq(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); + <#elseif field.queryType == 'like'> + wrapper.like(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); + + + + + <#if hasTree && !hasTreePid??> wrapper.isNull(${ClassName}Entity::get${treePid?cap_first}); - <#list queryList as field> - <#if field.queryFormType == 'date' || field.queryFormType == 'datetime'> - wrapper.between(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, ArrayUtils.isNotEmpty(query.get${field.attrName?cap_first}()) ? query.get${field.attrName?cap_first}()[0] : null, ArrayUtils.isNotEmpty(query.get${field.attrName?cap_first}()) ? query.get${field.attrName?cap_first}()[1] : null); - <#elseif field.queryType == '='> - wrapper.eq(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == '!='> - wrapper.ne(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == '>'> - wrapper.gt(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == '>='> - wrapper.ge(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == '<'> - wrapper.lt(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == '<='> - wrapper.le(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == 'like'> - wrapper.like(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == 'left like'> - wrapper.likeLeft(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - <#elseif field.queryType == 'right like'> - wrapper.likeRight(ObjectUtil.isNotEmpty(query.get${field.attrName?cap_first}()), ${ClassName}Entity::get${field.attrName?cap_first}, query.get${field.attrName?cap_first}()); - - + <#if hasLeftTree> + + // 左侧树过滤 + wrapper.in(query.get${leftRelationField?cap_first}() != null, ${ClassName}Entity::get${leftRelationField?cap_first}, query.get${leftRelationField?cap_first}()); + return wrapper; } @@ -200,7 +203,11 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Dao, ${ @Override @Transactional(rollbackFor = Exception.class) public void delete(List idList) { + <#if hasTree> + idList.forEach(this::deleteAllChildren); + <#else> removeByIds(idList); + <#if subs?size gt 0> // 删除子表数据 @@ -213,6 +220,25 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Dao, ${ } + <#if hasTree> + /** + * 递归删除所有子节点 + * + * @param id 节点ID + */ + private void deleteAllChildren(Long id) { + // 查询当前节点的所有子节点 + List<${ClassName}Entity> childrenList = baseMapper.selectList(new LambdaQueryWrapper<${ClassName}Entity>().eq(${ClassName}Entity::get${treePid?cap_first}, id)); + // 递归删除每个子节点 + for (${ClassName}Entity children : childrenList) { + deleteAllChildren(children.getId()); + } + + // 删除当前节点 + baseMapper.deleteById(id); + } + + <#if tableOperation?seq_contains('import')> @Override public void importByExcel(MultipartFile file) { diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/java/VO.java.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/java/VO.java.ftl index 37f79ce..f727844 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/java/VO.java.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/java/VO.java.ftl @@ -18,9 +18,7 @@ import ${i!}; */ @Data @Schema(description = "${tableComment}") -public class ${ClassName}VO implements Serializable { - private static final long serialVersionUID = 1L; - +public class ${ClassName}VO { <#list fieldList as field> <#if field.fieldComment!?length gt 0> @Schema(description = "${field.fieldComment}") diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/add-or-update.vue.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/add-or-update.vue.ftl index 206d120..dd5783c 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/add-or-update.vue.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/add-or-update.vue.ftl @@ -39,7 +39,7 @@ const emit = defineEmits(['refreshDataList']) const visible = defineModel('visible') const dataFormRef = ref() <#if subs?size gt 0> -const activeName = ref("${subs[0].className}") +const activeName = ref('${subs[0].className}') <#list subs as sub> const ${sub.className}Ref = ref() diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/form-item.vue.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/form-item.vue.ftl index 0582630..e14934b 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/form-item.vue.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/form-item.vue.ftl @@ -1,11 +1,21 @@ <#macro maFormItem model field> - <#if hasTree && field.fieldName == treePid> + <#if hasTree && field.attrName == treePid> + :props="{ label: '${treeLabel}', value: '${treeId}', pid: '${treePid}' }" + placeholder="${field.fieldComment!}" /> + <#elseif hasLeftTree?? && field.attrName == leftRelationField> + + :props="{ label: '${leftTreeLabel}', value: '${leftTreeId}' }" + url="${leftRequestUrl}/list" + <#else> + url="${leftRequestUrl}" + + /> <#elseif field.formType == 'input'> <#elseif field.formType == 'number'> @@ -24,32 +34,40 @@ <#elseif field.formType == 'radio'> <#if field.formDict??> - + <#else> - - 启用 - 禁用 - + + 启用 + 禁用 + <#elseif field.formType == 'checkbox'> + <#if field.formDict??> + + <#else> - 启用 - 禁用 + 启用 + 禁用 + <#elseif field.formType == 'address'> <#elseif field.formType == 'date'> - + <#elseif field.formType == 'datetime'> - + <#elseif field.formType == 'treeselect'> - + <#elseif field.formType == 'user'> <#elseif field.formType == 'org'> <#elseif field.formType == 'post'> + <#elseif field.formType == 'file'> + + <#elseif field.formType == 'image'> + <#else> diff --git a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/index.vue.ftl b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/index.vue.ftl index 365be5c..9083d51 100644 --- a/maku-boot-module/maku-module-generator/src/main/resources/template/vue/index.vue.ftl +++ b/maku-boot-module/maku-module-generator/src/main/resources/template/vue/index.vue.ftl @@ -1,14 +1,31 @@