代码生成添加树脚本

This commit is contained in:
2024-03-18 10:55:52 +08:00
parent 413381e06b
commit 97b4eadbcf

View File

@@ -353,12 +353,10 @@ public class Codegen {
.addMember(
"value",
"{@$T(target = \"children\", qualifiedByName = \"toTreeDto\")}",
Mapping.class)
.build())
.addAnnotation(
AnnotationSpec.builder(
Named.class)
AnnotationSpec.builder(Named.class)
.addMember("value", "$S", "toTreeDto")
.build())
.returns(ClassName.get(dtoPackage, treeDto.name))
@@ -366,7 +364,6 @@ public class Codegen {
ClassName.get(entityPackage, entity.name),
"entity")
.build())
.addMethod(
MethodSpec.methodBuilder("toTreeDtoExcludeChildren")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
@@ -375,10 +372,8 @@ public class Codegen {
.addMember(
"value",
"{@$T(target = \"children\",ignore=true)}",
Mapping.class)
.build())
.returns(ClassName.get(dtoPackage, treeDto.name))
.addParameter(
ClassName.get(entityPackage, entity.name),
@@ -613,14 +608,17 @@ public class Codegen {
.addMethod(
MethodSpec.methodBuilder("getRoots")
.addModifiers(Modifier.PUBLIC)
.addParameter(ClassName.get(CommonQuery.class), "request")
.addParameter(
ClassName.get(CommonQuery.class), "request")
.returns(
ParameterizedTypeName.get(
ClassName.get(List.class),
ClassName.get(
dtoPackage, treeDto.name)))
.addCode(CodeBlock.builder()
.add("""
.addCode(
CodeBlock.builder()
.add(
"""
if ($T.isEmpty(request.getItems())){
$T roots = this.repository.findAll( (root, query, criteriaBuilder) -> criteriaBuilder.isNull(root.get("parent")));
@@ -662,45 +660,49 @@ public class Codegen {
""",
ClassName.get(
CollectionUtils.class),
ParameterizedTypeName.get(
ClassName.get(List.class),
ClassName.get(
entityPackage, entity.name)),
ClassName.get(
Collectors.class),
ParameterizedTypeName.get(
ClassName.get(Page.class),
CollectionUtils.class),
ParameterizedTypeName.get(
ClassName.get(
List.class),
ClassName.get(
entityPackage,
entity.name)),
ClassName.get(Collectors.class),
ParameterizedTypeName.get(
ClassName.get(
Page.class),
ClassName.get(
entityPackage,
entity.name)),
ClassName.get(
entityPackage, entity.name)),
ClassName.get(PageRequest.class),
ClassName.get(Sort.class),
ParameterizedTypeName.get(
ClassName.get(List.class),
ClassName.get(String.class)),
ClassName.get(
entityPackage, entity.name),
ClassName.get(
Collectors.class),
ParameterizedTypeName.get(
ClassName.get(List.class),
PageRequest.class),
ClassName.get(Sort.class),
ParameterizedTypeName.get(
ClassName.get(
List.class),
ClassName.get(
String.class)),
ClassName.get(
dtoPackage, treeDto.name)),
ClassName.get(
Collectors.class),
ClassName.get(StreamSupport.class),
ClassName.get(TreeUtils.class),
ClassName.get(dtoPackage, treeDto.name),
ClassName.get(ArrayList.class),
ClassName.get(Collectors.class))
.build()
)
entityPackage,
entity.name),
ClassName.get(Collectors.class),
ParameterizedTypeName.get(
ClassName.get(
List.class),
ClassName.get(
dtoPackage,
treeDto.name)),
ClassName.get(Collectors.class),
ClassName.get(
StreamSupport.class),
ClassName.get(TreeUtils.class),
ClassName.get(
dtoPackage,
treeDto.name),
ClassName.get(ArrayList.class),
ClassName.get(Collectors.class))
.build())
.build())
.addMethod(
MethodSpec.methodBuilder("getTreeByIds")
@@ -720,8 +722,7 @@ public class Codegen {
return roots.stream().map(de -> this.mapper.toTreeDto(de)).collect($T.toList())
""",
ClassName.get(ArrayList.class),
ClassName.get(
Collectors.class))
ClassName.get(Collectors.class))
.build())
.build();
}
@@ -909,7 +910,8 @@ public class Codegen {
.addModifiers(Modifier.PUBLIC)
.addParameter(
ParameterSpec.builder(
ClassName.get(CommonQuery.class), "request")
ClassName.get(CommonQuery.class),
"request")
.addAnnotation(RequestBody.class)
.build())
.returns(
@@ -951,11 +953,47 @@ public class Codegen {
saveFile(controllerPackage, controllerBuilder.build());
genScript(lModuleName, controllerPackage, controllerBuilder.build());
if (tree) {
genTreeScript(lModuleName, controllerPackage, controllerBuilder.build());
} else {
genEnumScript(lModuleName, controllerPackage, controllerBuilder.build());
}
}
@SneakyThrows
private static void genScript(
private static void genTreeScript(
String lModuleName, String controllerPackage, TypeSpec controller) {
var script =
"""
package scripts.dict
import cn.lihongjie.coal.base.dto.CommonQuery
import %s
import org.springframework.context.ApplicationContext
ApplicationContext ioc = ioc;
def controller = ioc.getBean(%s.class)
return controller.roots(new CommonQuery())
"""
.formatted(controllerPackage + "." + controller.name, controller.name);
Files.writeString(
Path.of(
"src/main/resources/scripts/dict/tree/%sTree.groovy"
.formatted(lModuleName)),
script);
}
@SneakyThrows
private static void genEnumScript(
String lModuleName, String controllerPackage, TypeSpec controller) {
var script =