Skip to content

Commit e8c25de

Browse files
committed
support dynamic parameter!!!
1 parent 6dbbd93 commit e8c25de

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

spring-boot-data-aggregator-core/src/main/java/io/github/lvyahui8/spring/aggregate/model/DataConsumeDefinition.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
import lombok.Data;
44

5+
import java.util.Map;
6+
57
/**
68
79
* @since 2019/6/2 22:13
810
*/
911
@Data
1012
public class DataConsumeDefinition {
11-
private String id;
12-
private Class<?> clazz;
13-
private Boolean ignoreException;
13+
private String id;
14+
private Class<?> clazz;
15+
private Boolean ignoreException;
16+
private Map<String,String> dynamicParameterKeyMap;
17+
private String originalParameterName;
1418
}

spring-boot-data-aggregator-core/src/main/java/io/github/lvyahui8/spring/aggregate/service/impl/DataBeanAggregateQueryServiceImpl.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ public <T> T get(DataProvideDefinition provider, Map<String, Object> invokeParam
6161
AggregationContext aggregationContext = initQueryContext(provider, queryCache);
6262
interceptorChain.applyQuerySubmitted(aggregationContext);
6363
try {
64-
return innerGet(provider,invokeParams,resultType,aggregationContext);
64+
return innerGet(provider,invokeParams,resultType,aggregationContext,null);
6565
} finally {
6666
interceptorChain.applyQueryFinished(aggregationContext);
6767
}
6868
}
6969

7070
private <T> T innerGet(DataProvideDefinition provider, Map<String, Object> invokeParams, Class<T> resultType,
71-
AggregationContext context)
71+
AggregationContext context, DataConsumeDefinition causedConsumer)
7272
throws InterruptedException, InvocationTargetException, IllegalAccessException{
7373
Map<String,Object> dependObjectMap = null;
7474
try {
@@ -82,12 +82,20 @@ private <T> T innerGet(DataProvideDefinition provider, Map<String, Object> invo
8282
}
8383
/* 拼凑dependObjects和invokeParams */
8484
Object [] args = new Object[provider.getMethod().getParameterCount()];
85+
8586
for (int i = 0 ; i < provider.getMethodArgs().size(); i ++) {
8687
MethodArg methodArg = provider.getMethodArgs().get(i);
8788
if (methodArg.getDependType().equals(DependType.OTHER_MODEL)) {
88-
args[i] = dependObjectMap.get(methodArg.getAnnotationKey());
89+
args[i] = dependObjectMap.get(methodArg.getAnnotationKey() + "_" + methodArg.getParameter().getName());
8990
} else {
90-
args[i] = invokeParams.get(methodArg.getAnnotationKey());
91+
String paramKey ;
92+
if(causedConsumer != null && causedConsumer.getDynamicParameterKeyMap() != null
93+
&& causedConsumer.getDynamicParameterKeyMap().containsKey(methodArg.getAnnotationKey())) {
94+
paramKey = causedConsumer.getDynamicParameterKeyMap().get(methodArg.getAnnotationKey());
95+
} else {
96+
paramKey = methodArg.getAnnotationKey();
97+
}
98+
args[i] = invokeParams.get(paramKey);
9199
}
92100
if (args[i] != null && ! methodArg.getParameter().getType().isAssignableFrom(args[i].getClass())) {
93101
throw new IllegalArgumentException("param type not match, param:"
@@ -133,13 +141,13 @@ private Map<String, Object> getDependObjectMap(Map<String, Object> invokeParams,
133141
consumeDefinitionMap.put(depend.getId(),depend);
134142
Future<?> future = executorService.submit(() -> {
135143
try {
136-
Object o = innerGet(repository.get(depend.getId()),invokeParams, depend.getClazz(),context);
144+
Object o = innerGet(repository.get(depend.getId()),invokeParams, depend.getClazz(),context,depend);
137145
return depend.getClazz().cast(o);
138146
} finally {
139147
stopDownLatch.countDown();
140148
}
141149
});
142-
futureMap.put(depend.getId(),future);
150+
futureMap.put(depend.getId() + "_" + depend.getOriginalParameterName(),future);
143151
}
144152
stopDownLatch.await(timeout, TimeUnit.MILLISECONDS);
145153
if(! futureMap.isEmpty()){

spring-boot-data-aggregator-core/src/main/java/io/github/lvyahui8/spring/aggregate/util/DefinitionUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.github.lvyahui8.spring.aggregate.model.*;
44
import io.github.lvyahui8.spring.annotation.DataConsumer;
5+
import io.github.lvyahui8.spring.annotation.DynamicParameter;
56
import io.github.lvyahui8.spring.annotation.InvokeParameter;
67
import io.github.lvyahui8.spring.enums.ExceptionProcessingMethod;
78
import org.springframework.core.annotation.AnnotationUtils;
@@ -11,7 +12,9 @@
1112
import java.lang.reflect.Method;
1213
import java.lang.reflect.Parameter;
1314
import java.util.ArrayList;
15+
import java.util.HashMap;
1416
import java.util.List;
17+
import java.util.Map;
1518

1619
/**
1720
@@ -57,6 +60,14 @@ private static void dealMethodParameter(DataProvideDefinition provideDefinition,
5760
DataConsumeDefinition dataConsumeDefinition = new DataConsumeDefinition();
5861
dataConsumeDefinition.setClazz(parameter.getType());
5962
dataConsumeDefinition.setId(dataId);
63+
if(dataConsumer.dynamicParameters().length > 0) {
64+
Map<String, String> parameterKeyMap = new HashMap<>(dataConsumer.dynamicParameters().length);
65+
for (DynamicParameter dynamicParameter : dataConsumer.dynamicParameters()) {
66+
parameterKeyMap.put(dynamicParameter.targetKey(),dynamicParameter.replacementKey());
67+
}
68+
dataConsumeDefinition.setDynamicParameterKeyMap(parameterKeyMap);
69+
}
70+
dataConsumeDefinition.setOriginalParameterName(parameter.getName());
6071
if(! dataConsumer.exceptionProcessingMethod().equals(ExceptionProcessingMethod.BY_DEFAULT)) {
6172
dataConsumeDefinition.setIgnoreException(
6273
dataConsumer.exceptionProcessingMethod().equals(ExceptionProcessingMethod.IGNORE)

spring-boot-data-aggregator-example/src/test/java/io/github/lvyahui8/spring/example/DataBeanAggregateQueryFacadeTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ public Object apply(
158158
@Test
159159
public void testDynamicParameter() throws Exception {
160160
ImmutableMap<String, Object> params = ImmutableMap.<String, Object>builder()
161-
.put("userA_Id", 1)
162-
.put("userB_Id", 2)
163-
.put("userC_Id", 3).build();
161+
.put("userA_Id", 1L)
162+
.put("userB_Id", 2L)
163+
.put("userC_Id", 3L).build();
164164
Object specialUserCollection = dataBeanAggregateQueryFacade.get(params,
165165
new Function3<User,User,User,Object>() {
166166
@Override

0 commit comments

Comments
 (0)