refactor: 重构服务依赖注入和上下文管理

移除硬编码的服务注入,改为使用缓存机制动态获取Bean
优化上下文类结构,统一服务获取方式
添加PageContent类支持分页数据封装
实现异步数据加载功能
This commit is contained in:
2025-09-12 12:20:15 +08:00
parent fc263288e4
commit 422994efcd
16 changed files with 191 additions and 201 deletions

View File

@@ -9,11 +9,10 @@ import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import com.ecep.contract.PageArgument;
import com.ecep.contract.PageContent;
import com.ecep.contract.WebSocketService;
import com.ecep.contract.model.IdentityEntity;
import com.ecep.contract.msg.SimpleMessage;
@@ -103,7 +102,6 @@ public class QueryService<T extends IdentityEntity, TV extends IdentityViewModel
return null;
}
if (response == null) {
return null;
}
T newEntity = createNewEntity();
@@ -130,38 +128,59 @@ public class QueryService<T extends IdentityEntity, TV extends IdentityViewModel
return findAll(null, Pageable.unpaged()).getContent();
}
@Override
public Page<T> findAll(Map<String, Object> params, Pageable pageable) {
public CompletableFuture<Page<T>> asyncFindAll(Map<String, Object> params, Pageable pageable) {
SimpleMessage msg = new SimpleMessage();
msg.setService(getBeanName());
msg.setMethod("findAll");
msg.setArguments(params, PageArgument.of(pageable));
try {
JsonNode response = webSocketService.send(msg).get(readTimeout, TimeUnit.MILLISECONDS);
if (response != null) {
return webSocketService.send(msg).orTimeout(readTimeout, TimeUnit.MILLISECONDS).handle((response, ex) -> {
if (ex != null) {
return null;
}
if (response == null) {
return null;
}
PageContent<T> pageContent = new PageContent<>();
try {
List<T> content = new ArrayList<>();
JsonNode contentNode = response.get("content");
if (contentNode != null && contentNode.isArray()) {
for (JsonNode node : contentNode) {
T newEntity = createNewEntity();
objectMapper.updateValue(newEntity, node);
content.add(newEntity);
if (response.has("content")) {
JsonNode contentNode = response.get("content");
if (contentNode != null && contentNode.isArray()) {
for (JsonNode node : contentNode) {
T newEntity = createNewEntity();
objectMapper.updateValue(newEntity, node);
content.add(newEntity);
}
}
}
JsonNode pageNode = response.get("page");
int total = pageNode.get("totalElements").asInt();
int totalPages = pageNode.get("totalPages").asInt();
int size = pageNode.get("size").asInt();
int number = pageNode.get("number").asInt();
PageRequest newPageable = PageRequest.of(number, size);
return new PageImpl<>(content, newPageable, total);
pageContent.setContent(content);
if (response.has("page")) {
JsonNode pageNode = response.get("page");
PageArgument pageArgument = objectMapper.treeToValue(pageNode, PageArgument.class);
pageContent.setPage(pageArgument);
}
if (response.has("totalElements")) {
int totalElements = response.get("totalElements").asInt();
pageContent.setTotalElements(totalElements);
}
if (response.has("totalPages")) {
int totalPages = response.get("totalPages").asInt();
pageContent.setTotalPages(totalPages);
}
} catch (Exception e) {
throw new RuntimeException(response.toString(), e);
}
return pageContent.toPage();
});
}
@Override
public Page<T> findAll(Map<String, Object> params, Pageable pageable) {
try {
return asyncFindAll(params, pageable).get();
} catch (Exception e) {
throw new RuntimeException(e);
e.printStackTrace();
}
return null;
}