Skip to content

Commit 9dc38ee

Browse files
authored
Merge pull request #279 from erupts/develop
1.12.16
2 parents c5a83ca + c34ee21 commit 9dc38ee

File tree

261 files changed

+639
-40000
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

261 files changed

+639
-40000
lines changed

erupt-admin/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>xyz.erupt</groupId>
1111
<artifactId>erupt</artifactId>
12-
<version>1.12.15</version>
12+
<version>1.12.16</version>
1313
<relativePath>../pom.xml</relativePath>
1414
</parent>
1515

erupt-annotation/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>xyz.erupt</groupId>
1313
<artifactId>erupt</artifactId>
14-
<version>1.12.15</version>
14+
<version>1.12.16</version>
1515
<relativePath>../pom.xml</relativePath>
1616
</parent>
1717
</project>

erupt-annotation/src/main/java/xyz/erupt/annotation/sub_erupt/RowOperation.java

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ enum Mode {
6262
SINGLE,
6363
@Comment("依赖多行数据")
6464
MULTI,
65+
@Comment("仅依赖多行数据,屏蔽单行操作按钮")
66+
MULTI_ONLY,
6567
@Comment("不依赖行数据")
6668
BUTTON
6769
}

erupt-cloud/erupt-cloud-common/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>xyz.erupt</groupId>
1111
<artifactId>erupt</artifactId>
12-
<version>1.12.15</version>
12+
<version>1.12.16</version>
1313
<relativePath>../../pom.xml</relativePath>
1414
</parent>
1515

erupt-cloud/erupt-cloud-node-jpa/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>xyz.erupt</groupId>
1111
<artifactId>erupt</artifactId>
12-
<version>1.12.15</version>
12+
<version>1.12.16</version>
1313
<relativePath>../../pom.xml</relativePath>
1414
</parent>
1515

erupt-cloud/erupt-cloud-node/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>xyz.erupt</groupId>
1111
<artifactId>erupt</artifactId>
12-
<version>1.12.15</version>
12+
<version>1.12.16</version>
1313
<relativePath>../../pom.xml</relativePath>
1414
</parent>
1515

erupt-cloud/erupt-cloud-server/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<parent>
1010
<groupId>xyz.erupt</groupId>
1111
<artifactId>erupt</artifactId>
12-
<version>1.12.15</version>
12+
<version>1.12.16</version>
1313
<relativePath>../../pom.xml</relativePath>
1414
</parent>
1515

erupt-core/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>xyz.erupt</groupId>
1212
<artifactId>erupt</artifactId>
13-
<version>1.12.15</version>
13+
<version>1.12.16</version>
1414
<relativePath>../pom.xml</relativePath>
1515
</parent>
1616

erupt-core/src/main/java/xyz/erupt/core/config/GsonFactory.java

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class GsonFactory {
5050
return new JsonPrimitive(src);
5151
}
5252
})
53+
.setObjectToNumberStrategy(ToNumberPolicy.LAZILY_PARSED_NUMBER)
5354
.serializeNulls().setExclusionStrategies(new EruptGsonExclusionStrategies());
5455

5556
@Getter

erupt-core/src/main/java/xyz/erupt/core/constant/EruptConst.java

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public class EruptConst {
88

99
public static final String ERUPT = "erupt";
1010

11+
public static final String ERUPT_AS = "et";
12+
1113
public static final String BASE_PACKAGE = "xyz.erupt";
1214

1315
public static final String ERUPT_DIR = ".erupt";
@@ -17,4 +19,7 @@ public class EruptConst {
1719
public static final String DOT = ".";
1820

1921
public static final String ERUPT_LOG = "erupt-log";
22+
23+
public static final String AN = "abcdef0123456789";
24+
2025
}

erupt-core/src/main/java/xyz/erupt/core/constant/MenuStatus.java

+9
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ public enum MenuStatus {
2424
this.label = label;
2525
}
2626

27+
public static MenuStatus valueOf(int value) {
28+
for (MenuStatus menuStatus : MenuStatus.values()) {
29+
if (menuStatus.getValue() == value) {
30+
return menuStatus;
31+
}
32+
}
33+
return null;
34+
}
35+
2736
public static class ChoiceFetch implements ChoiceFetchHandler {
2837

2938
@Override
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,52 @@
11
package xyz.erupt.core.invoke;
22

3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import xyz.erupt.core.view.EruptModel;
6+
37
/**
48
* @author YuePeng
59
* date 2024/6/29 15:38
610
*/
711
public class DataProxyContext {
812

9-
private static final ThreadLocal<String[]> PRE_DATA_PROXY_THREADLOCAL = new ThreadLocal<>();
13+
private static final ThreadLocal<Data> PRE_DATA_PROXY_THREADLOCAL = new ThreadLocal<>();
1014

1115
public static String[] params() {
16+
return get().getParams();
17+
}
18+
19+
public static Class<?> currentClass() {
20+
return get().getEruptModel().getClazz();
21+
}
22+
23+
public static Data get() {
1224
return PRE_DATA_PROXY_THREADLOCAL.get();
1325
}
1426

15-
static void set(String[] params) {
16-
PRE_DATA_PROXY_THREADLOCAL.set(params);
27+
static void set(Data data) {
28+
PRE_DATA_PROXY_THREADLOCAL.set(data);
1729
}
1830

1931
static void remove() {
2032
PRE_DATA_PROXY_THREADLOCAL.remove();
2133
}
2234

35+
@Getter
36+
@Setter
37+
public static class Data {
38+
39+
private EruptModel eruptModel;
40+
41+
private String[] params;
42+
43+
public Data(EruptModel eruptModel, String[] params) {
44+
this.eruptModel = eruptModel;
45+
this.params = params;
46+
}
47+
48+
public Data() {
49+
}
50+
}
51+
2352
}

erupt-core/src/main/java/xyz/erupt/core/invoke/DataProxyInvoke.java

+26-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
import xyz.erupt.core.util.ReflectUtil;
77
import xyz.erupt.core.view.EruptModel;
88

9+
import java.lang.annotation.Annotation;
10+
import java.util.HashSet;
911
import java.util.Optional;
12+
import java.util.Set;
1013
import java.util.function.Consumer;
1114
import java.util.stream.Stream;
1215

@@ -16,31 +19,48 @@
1619
*/
1720
public class DataProxyInvoke {
1821

22+
//@PreDataProxy的注解容器
23+
private static final Set<Class<? extends Annotation>> dataProxyAnnotationContainer = new HashSet<>();
24+
25+
//注册支持@PreDataProxy注解的注解容器
26+
public static void registerAnnotationContainer(Class<? extends Annotation> annotationClass) {
27+
PreDataProxy preDataProxy = annotationClass.getAnnotation(PreDataProxy.class);
28+
if (preDataProxy == null) throw new RuntimeException("register error not found @PreDataProxy");
29+
dataProxyAnnotationContainer.add(annotationClass);
30+
}
31+
1932
public static void invoke(EruptModel eruptModel, Consumer<DataProxy<Object>> consumer) {
33+
//注解中的 @PreDataProxy
34+
dataProxyAnnotationContainer.forEach(pc -> Optional.ofNullable(eruptModel.getClazz().getAnnotation(pc)).ifPresent(it -> {
35+
PreDataProxy preDataProxy = it.annotationType().getAnnotation(PreDataProxy.class);
36+
DataProxyContext.set(new DataProxyContext.Data(eruptModel, preDataProxy.params()));
37+
consumer.accept(getInstanceBean(preDataProxy.value()));
38+
DataProxyContext.remove();
39+
}));
2040
//父类及接口 @PreDataProxy
21-
ReflectUtil.findClassExtendStack(eruptModel.getClazz()).forEach(clazz -> DataProxyInvoke.actionInvokePreDataProxy(clazz, consumer));
41+
ReflectUtil.findClassExtendStack(eruptModel.getClazz()).forEach(clazz -> DataProxyInvoke.actionInvokePreDataProxy(eruptModel, clazz, consumer));
2242
//本类及接口 @PreDataProxy
23-
DataProxyInvoke.actionInvokePreDataProxy(eruptModel.getClazz(), consumer);
43+
DataProxyInvoke.actionInvokePreDataProxy(eruptModel, eruptModel.getClazz(), consumer);
2444
//@Erupt → DataProxy
2545
Stream.of(eruptModel.getErupt().dataProxy()).forEach(proxy -> {
26-
DataProxyContext.set(eruptModel.getErupt().dataProxyParams());
46+
DataProxyContext.set(new DataProxyContext.Data(eruptModel, eruptModel.getErupt().dataProxyParams()));
2747
consumer.accept(getInstanceBean(proxy));
2848
DataProxyContext.remove();
2949
});
3050
}
3151

32-
private static void actionInvokePreDataProxy(Class<?> clazz, Consumer<DataProxy<Object>> consumer) {
52+
private static void actionInvokePreDataProxy(EruptModel eruptModel, Class<?> clazz, Consumer<DataProxy<Object>> consumer) {
3353
//接口
3454
Stream.of(clazz.getInterfaces()).forEach(it -> Optional.ofNullable(it.getAnnotation(PreDataProxy.class))
3555
.ifPresent(dataProxy -> {
36-
DataProxyContext.set(dataProxy.params());
56+
DataProxyContext.set(new DataProxyContext.Data(eruptModel, dataProxy.params()));
3757
consumer.accept(getInstanceBean(dataProxy.value()));
3858
DataProxyContext.remove();
3959
}));
4060
//类
4161
Optional.ofNullable(clazz.getAnnotation(PreDataProxy.class))
4262
.ifPresent(dataProxy -> {
43-
DataProxyContext.set(dataProxy.params());
63+
DataProxyContext.set(new DataProxyContext.Data(eruptModel, dataProxy.params()));
4464
consumer.accept(getInstanceBean(dataProxy.value()));
4565
DataProxyContext.remove();
4666
});

erupt-core/src/main/java/xyz/erupt/core/module/MetaMenu.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package xyz.erupt.core.module;
22

33
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
45
import lombok.Setter;
56
import xyz.erupt.annotation.Erupt;
67
import xyz.erupt.core.constant.MenuStatus;
@@ -12,6 +13,7 @@
1213
*/
1314
@Getter
1415
@Setter
16+
@NoArgsConstructor
1517
public class MetaMenu {
1618

1719
private Long id; //无需传递此参数
@@ -32,9 +34,6 @@ public class MetaMenu {
3234

3335
private MetaMenu parentMenu;
3436

35-
public MetaMenu() {
36-
}
37-
3837
public static MetaMenu createRootMenu(String code, String name, String icon, Integer sort) {
3938
MetaMenu metaMenu = new MetaMenu();
4039
metaMenu.code = code;

erupt-core/src/main/java/xyz/erupt/core/module/MetaUserinfo.java

+2
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ public class MetaUserinfo {
2727

2828
private List<String> roles; //角色列表
2929

30+
private String tenantId;
31+
3032
}

erupt-core/src/main/java/xyz/erupt/core/proxy/EruptFieldProxy.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ protected Object invocation(MethodInvocation invocation) {
3636
View[] views = this.rawAnnotation.views();
3737
List<View> proxyViews = new ArrayList<>();
3838
for (View view : views) {
39-
if (ExprInvoke.getExpr(view.ifRender())) {
39+
if (ProxyContext.get().isStarting() || ExprInvoke.getExpr(view.ifRender())) {
4040
proxyViews.add(AnnotationProxyPool.getOrPut(view, annotation -> new ViewProxy().newProxy(annotation, this)));
4141
}
4242
}
4343
return proxyViews.toArray(new View[0]);
4444
} else if (super.matchMethod(invocation, EruptField::edit)) {
4545
Edit edit = this.rawAnnotation.edit();
46-
if (ExprInvoke.getExpr(edit.ifRender())) {
46+
if (ProxyContext.get().isStarting() || ExprInvoke.getExpr(edit.ifRender())) {
4747
return AnnotationProxyPool.getOrPut(edit, annotation -> new EditProxy().newProxy(annotation, this));
4848
} else {
4949
return tplEruptField.edit();

erupt-core/src/main/java/xyz/erupt/core/proxy/ProxyContext.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,17 @@ public class ProxyContext {
2626

2727
private boolean i18n = false;
2828

29+
private boolean starting = false;
30+
2931
public static void set(Class<?> clazz) {
3032
proxyContextThreadLocal.get().setClazz(clazz);
3133
proxyContextThreadLocal.get().setI18n(null != clazz.getAnnotation(EruptI18n.class));
3234
}
3335

34-
public static void set(Field field) {
36+
public static void set(Field field, boolean starting) {
3537
proxyContextThreadLocal.get().setField(field);
36-
ProxyContext.set(field.getDeclaringClass());
38+
proxyContextThreadLocal.get().setStarting(starting);
39+
set(field.getDeclaringClass());
3740
}
3841

3942
public static ProxyContext get() {

erupt-core/src/main/java/xyz/erupt/core/service/EruptCoreService.java

+13-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.SneakyThrows;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.fusesource.jansi.Ansi;
56
import org.springframework.boot.ApplicationArguments;
67
import org.springframework.boot.ApplicationRunner;
78
import org.springframework.core.annotation.Order;
@@ -26,6 +27,8 @@
2627
import java.util.*;
2728
import java.util.concurrent.atomic.AtomicInteger;
2829

30+
import static org.fusesource.jansi.Ansi.ansi;
31+
2932
/**
3033
* @author YuePeng
3134
* date 9/28/18.
@@ -54,7 +57,7 @@ public static EruptModel getErupt(String eruptName) {
5457
if (null == ERUPTS.get(eruptName)) {
5558
return null;
5659
} else {
57-
return EruptCoreService.initEruptModel(ERUPTS.get(eruptName).getClazz());
60+
return EruptCoreService.initEruptModel(ERUPTS.get(eruptName).getClazz(), false);
5861
}
5962
} else {
6063
return ERUPTS.get(eruptName);
@@ -66,7 +69,7 @@ public static void registerErupt(Class<?> eruptClazz) {
6669
if (ERUPTS.containsKey(eruptClazz.getSimpleName())) {
6770
throw new RuntimeException(eruptClazz.getSimpleName() + " conflict !");
6871
}
69-
EruptModel eruptModel = initEruptModel(eruptClazz);
72+
EruptModel eruptModel = initEruptModel(eruptClazz, true);
7073
ERUPTS.put(eruptClazz.getSimpleName(), eruptModel);
7174
ERUPT_LIST.add(eruptModel);
7275
}
@@ -91,15 +94,15 @@ public static EruptModel getEruptView(String eruptName) {
9194
return em;
9295
}
9396

94-
private static EruptModel initEruptModel(Class<?> clazz) {
97+
private static EruptModel initEruptModel(Class<?> clazz, boolean starting) {
9598
// erupt class data to memory
9699
EruptModel eruptModel = new EruptModel(clazz);
97100
// erupt field data to memory
98101
eruptModel.setEruptFieldModels(new ArrayList<>());
99102
eruptModel.setEruptFieldMap(new LinkedCaseInsensitiveMap<>());
100103
ReflectUtil.findClassAllFields(clazz, field -> Optional.ofNullable(field.getAnnotation(EruptField.class))
101104
.ifPresent(ignore -> {
102-
EruptFieldModel eruptFieldModel = new EruptFieldModel(field);
105+
EruptFieldModel eruptFieldModel = new EruptFieldModel(field, starting);
103106
eruptModel.getEruptFieldModels().add(eruptFieldModel);
104107
if (!eruptModel.getEruptFieldMap().containsKey(field.getName())) {
105108
eruptModel.getEruptFieldMap().put(field.getName(), eruptFieldModel);
@@ -119,20 +122,19 @@ public void run(ApplicationArguments args) {
119122
EruptSpringUtil.scannerPackage(EruptApplication.getScanPackage(), new TypeFilter[]{
120123
new AnnotationTypeFilter(Erupt.class)
121124
}, clazz -> {
122-
EruptModel eruptModel = initEruptModel(clazz);
125+
EruptModel eruptModel = initEruptModel(clazz, true);
123126
ERUPTS.put(clazz.getSimpleName(), eruptModel);
124127
ERUPT_LIST.add(eruptModel);
125128
});
126-
log.info("<" + repeat("===", 20) + ">");
129+
log.info("<{}>", repeat("===", 20));
127130
AtomicInteger moduleMaxCharLength = new AtomicInteger();
128131
EruptModuleInvoke.invoke(it -> {
129132
int length = it.info().getName().length();
130133
if (length > moduleMaxCharLength.get()) moduleMaxCharLength.set(length);
131134
});
132-
// if (eruptProp.isHotBuild()) {
133-
// hotBuild = eruptProp.isHotBuild();
134-
// log.info(ansi().fg(Ansi.Color.RED).a("Erupt Hot Build").reset().toString());
135-
// }
135+
if (EruptSpringUtil.getBean(EruptProp.class).isHotBuild()) {
136+
log.warn(ansi().fg(Ansi.Color.RED).a("Open erupt hot build").reset().toString());
137+
}
136138
EruptModuleInvoke.invoke(it -> {
137139
it.run();
138140
MODULES.add(it.info().getName());
@@ -143,7 +145,7 @@ public void run(ApplicationArguments args) {
143145
log.info("Erupt modules : {}", MODULES.size());
144146
log.info("Erupt classes : {}", ERUPTS.size());
145147
log.info("Erupt Framework initialization completed in {}ms", totalRecorder.recorder());
146-
log.info("<" + repeat("===", 20) + ">");
148+
log.info("<{}>", repeat("===", 20));
147149
}
148150

149151
private String fillCharacter(String character, int targetWidth) {

0 commit comments

Comments
 (0)