mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 07:46:40 +08:00
完善代码生成
This commit is contained in:
@@ -14,6 +14,8 @@ import cn.lihongjie.coal.base.mapper.CommonEntityMapper;
|
||||
import cn.lihongjie.coal.base.mapper.CommonMapper;
|
||||
import cn.lihongjie.coal.base.service.BaseService;
|
||||
import cn.lihongjie.coal.common.ArchiveUtils;
|
||||
import cn.lihongjie.coal.common.TreeUtils;
|
||||
import cn.lihongjie.coal.dbFunctions.DbFunctionService;
|
||||
import cn.lihongjie.coal.exception.BizException;
|
||||
|
||||
import com.google.common.base.CaseFormat;
|
||||
@@ -29,6 +31,7 @@ import lombok.Data;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
@@ -59,6 +62,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Scanner;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import javax.lang.model.element.Modifier;
|
||||
|
||||
@@ -363,7 +368,7 @@ public class Codegen {
|
||||
.build())
|
||||
|
||||
.addMethod(
|
||||
MethodSpec.methodBuilder("toTreeExcludeChildren")
|
||||
MethodSpec.methodBuilder("toTreeDtoExcludeChildren")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
|
||||
.addAnnotation(
|
||||
AnnotationSpec.builder(Mappings.class)
|
||||
@@ -498,6 +503,13 @@ public class Codegen {
|
||||
Modifier.PRIVATE)
|
||||
.addAnnotation(Autowired.class)
|
||||
.build())
|
||||
.addField(
|
||||
FieldSpec.builder(
|
||||
ClassName.get(DbFunctionService.class),
|
||||
"dbFunctionService",
|
||||
Modifier.PRIVATE)
|
||||
.addAnnotation(Autowired.class)
|
||||
.build())
|
||||
.addMethod(
|
||||
MethodSpec.methodBuilder("create")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
@@ -601,22 +613,94 @@ public class Codegen {
|
||||
.addMethod(
|
||||
MethodSpec.methodBuilder("getRoots")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(ClassName.get(CommonQuery.class), "request")
|
||||
.returns(
|
||||
ParameterizedTypeName.get(
|
||||
ClassName.get(List.class),
|
||||
ClassName.get(
|
||||
dtoPackage, treeDto.name)))
|
||||
.addStatement(
|
||||
"""
|
||||
.addCode(CodeBlock.builder()
|
||||
.add("""
|
||||
|
||||
if ($T.isEmpty(request.getItems())){
|
||||
$T roots = this.repository.findAll( (root, query, criteriaBuilder) -> criteriaBuilder.isNull(root.get("parent")));
|
||||
return roots.stream().map(de -> this.mapper.toTreeDto(de)).collect($T.toList());
|
||||
}else {
|
||||
$T page =
|
||||
repository.findAll(
|
||||
request.specification(conversionService),
|
||||
$T.of(
|
||||
request.getPageNo(),
|
||||
request.getPageSize(),
|
||||
$T.by(request.getOrders())));
|
||||
|
||||
$T selfAndParentIds =
|
||||
this.dbFunctionService.selfAndParentIds(dbFunctionService.entityToTableName($T.class),
|
||||
page.stream().map(x -> x.getId()).collect($T.toList()), true);
|
||||
|
||||
$T selfAndParent = this.findAllByIds(selfAndParentIds).stream().map(x -> (this.mapper.toTreeDtoExcludeChildren(x))).collect($T.toList());
|
||||
|
||||
|
||||
return $T.stream(
|
||||
$T.buildTreeFromList(
|
||||
selfAndParent,
|
||||
$T::getId,
|
||||
x -> x.getParent(),
|
||||
(x, y) -> {
|
||||
if (x.getChildren() == null) {
|
||||
x.setChildren(new $T<>());
|
||||
}
|
||||
x.getChildren().add(y);
|
||||
return null;
|
||||
})
|
||||
.spliterator(),
|
||||
false)
|
||||
.collect($T.toList());
|
||||
}
|
||||
|
||||
var roots = this.repository.findAll((root, query, criteriaBuilder) -> criteriaBuilder.isNull(root.get("parent")));
|
||||
return roots.stream().map(de -> this.mapper.toTreeDto(de)).collect($T.toList())
|
||||
|
||||
|
||||
|
||||
""",
|
||||
ClassName.get(
|
||||
java.util.stream.Collectors.class))
|
||||
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),
|
||||
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),
|
||||
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")
|
||||
@@ -637,7 +721,7 @@ public class Codegen {
|
||||
""",
|
||||
ClassName.get(ArrayList.class),
|
||||
ClassName.get(
|
||||
java.util.stream.Collectors.class))
|
||||
Collectors.class))
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
@@ -823,6 +907,11 @@ public class Codegen {
|
||||
.addMethod(
|
||||
MethodSpec.methodBuilder("roots")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(
|
||||
ParameterSpec.builder(
|
||||
ClassName.get(CommonQuery.class), "request")
|
||||
.addAnnotation(RequestBody.class)
|
||||
.build())
|
||||
.returns(
|
||||
ParameterizedTypeName.get(
|
||||
ClassName.get(List.class),
|
||||
@@ -833,7 +922,7 @@ public class Codegen {
|
||||
.build())
|
||||
.addStatement(
|
||||
"""
|
||||
return this.service.getRoots()
|
||||
return this.service.getRoots(request)
|
||||
""")
|
||||
.build())
|
||||
.addMethod(
|
||||
|
||||
@@ -1,11 +1,20 @@
|
||||
package cn.lihongjie.coal.dbFunctions;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
|
||||
import io.hypersistence.utils.hibernate.type.array.StringArrayType;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import jakarta.persistence.Query;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.hibernate.internal.SessionImpl;
|
||||
import org.hibernate.persister.entity.AbstractEntityPersister;
|
||||
import org.hibernate.persister.entity.EntityPersister;
|
||||
import org.hibernate.query.TypedParameterValue;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -67,4 +76,39 @@ public class DbFunctionService {
|
||||
}
|
||||
return Arrays.stream(((String[]) resultList.get(0))).toList();
|
||||
}
|
||||
|
||||
private Cache<String, String> tableNameCache;
|
||||
|
||||
@PostConstruct
|
||||
public void init(){
|
||||
tableNameCache = CacheBuilder.newBuilder().maximumSize(1000).build();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public String entityToTableName(Class<?> entityClass){
|
||||
|
||||
return tableNameCache.get(entityClass.getCanonicalName(), () -> {
|
||||
|
||||
Object entityExample;
|
||||
try {
|
||||
entityExample = entityClass.newInstance();
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
SessionImpl session = entityManager.unwrap(SessionImpl.class);
|
||||
|
||||
EntityPersister persister = session.getEntityPersister(null, entityExample);
|
||||
|
||||
if (persister instanceof AbstractEntityPersister persisterImpl) {
|
||||
|
||||
|
||||
return persisterImpl.getRootTableName();
|
||||
|
||||
} else {
|
||||
throw new RuntimeException("Unexpected persister type; a subtype of AbstractEntityPersister expected.");
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class DepartmentService extends BaseService<DepartmentEntity, DepartmentReposito
|
||||
Sort.by(request.getOrders())));
|
||||
|
||||
List<String> selfAndParentIds =
|
||||
this.dbFunctionService.selfAndParentIds("t_department",
|
||||
this.dbFunctionService.selfAndParentIds(dbFunctionService.entityToTableName(DepartmentEntity.class),
|
||||
page.stream().map(x -> x.getId()).collect(Collectors.toList()), true);
|
||||
|
||||
List<DepartmentTreeDto> selfAndParent = this.findAllByIds(selfAndParentIds).stream().map(x -> (this.mapper.toTreeDtoExcludeChildren(x))).collect(Collectors.toList());
|
||||
|
||||
Reference in New Issue
Block a user