Skip to content

Commit c121e55

Browse files
authored
Merge pull request #254 from erupts/develop
1.12.13
2 parents ae45638 + 38c5537 commit c121e55

File tree

58 files changed

+386
-232
lines changed

Some content is hidden

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

58 files changed

+386
-232
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.12</version>
12+
<version>1.12.13</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.12</version>
14+
<version>1.12.13</version>
1515
<relativePath>../pom.xml</relativePath>
1616
</parent>
1717
</project>

erupt-annotation/src/main/java/xyz/erupt/annotation/fun/OperationHandler.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@
88
* @author YuePeng
99
* date 2018-10-09.
1010
*/
11-
public interface OperationHandler<@Comment("行数据类型") Target, @Comment("表单输入对象类型") EruptObject> {
11+
public interface OperationHandler<@Comment("行数据类型") Row, @Comment("表单输入对象类型") EruptForm> {
1212

1313
/**
14-
* @param data 行数据
15-
* @param eruptObject 表单输入数据
16-
* @param param 注解回传参数
14+
* @param data 行数据
15+
* @param eruptForm 表单输入数据
16+
* @param param 注解回传参数
1717
* @return 事件触发成功后需要前端执行的 js 表达式
1818
*/
1919
@Comment("按钮事件触发类")
2020
@Comment("返回值:事件触发成功后需要前端执行的 js 表达式,不需要此参数返回空即可")
21-
String exec(List<Target> data, EruptObject eruptObject, String[] param);
21+
String exec(List<Row> data, EruptForm eruptForm, String[] param);
22+
23+
@Comment("初始化 erupt 表单的值")
24+
default EruptForm eruptFormValue(List<Row> data, EruptForm eruptForm, String[] param) {
25+
return eruptForm;
26+
}
2227

2328
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
//可选分页数
2121
int[] pageSizes() default {10, 20, 30, 50, 100, 300, 500};
2222

23+
//数据更新时间,单位:毫秒
24+
int refreshTime() default -1;
2325

2426
enum FormSize {
2527
//默认

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

+3
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@
1919
@Transient
2020
@Comment("Column in linkErupt → this.column = linkErupt.joinColumn")
2121
String joinColumn();
22+
23+
@Comment("Other conditions for the link")
24+
String linkCondition() default "";
2225
}

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.12</version>
12+
<version>1.12.13</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.12</version>
12+
<version>1.12.13</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.12</version>
12+
<version>1.12.13</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.12</version>
12+
<version>1.12.13</version>
1313
<relativePath>../../pom.xml</relativePath>
1414
</parent>
1515

erupt-cloud/erupt-cloud-server/src/main/java/xyz/erupt/cloud/server/controller/EruptServerApi.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import xyz.erupt.annotation.fun.PowerObject;
55
import xyz.erupt.cloud.common.consts.CloudCommonConst;
66
import xyz.erupt.cloud.common.consts.CloudRestApiConst;
7+
import xyz.erupt.cloud.server.model.CloudNode;
78
import xyz.erupt.cloud.server.service.EruptNodeMicroservice;
89
import xyz.erupt.core.annotation.EruptRouter;
910
import xyz.erupt.core.constant.EruptConst;
@@ -62,10 +63,8 @@ public PowerObject eruptPower(@RequestParam String eruptName, @RequestParam Stri
6263

6364
@GetMapping(CloudRestApiConst.NODE_CONFIG + "/{nodeName}")
6465
public String getNodeConfig(@PathVariable String nodeName, @RequestHeader(CloudCommonConst.HEADER_ACCESS_TOKEN) String accessToken) {
65-
return (String) eruptDao.getEntityManager()
66-
.createQuery("select config from CloudNode where nodeName = :nodeName and accessToken = :accessToken")
67-
.setParameter("nodeName", nodeName)
68-
.setParameter("accessToken", accessToken).getSingleResult();
66+
return eruptDao.lambdaQuery(CloudNode.class).eq(CloudNode::getNodeName, nodeName)
67+
.eq(CloudNode::getAccessToken, accessToken).oneSelect(CloudNode::getConfig);
6968
}
7069

7170
@GetMapping(CloudRestApiConst.NODE_GROUP_CONFIG + "/{nodeName}")
@@ -77,7 +76,6 @@ public String getNodeGroupConfig(@PathVariable String nodeName, @RequestHeader(C
7776
}
7877

7978

80-
8179
//用户信息
8280
@GetMapping(CloudRestApiConst.ERUPT_USER_INFO + "/{nodeName}")
8381
@EruptRouter(verifyType = EruptRouter.VerifyType.LOGIN)

erupt-cloud/erupt-cloud-server/src/main/java/xyz/erupt/cloud/server/model/CloudNode.java

+4-93
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import xyz.erupt.annotation.EruptI18n;
1111
import xyz.erupt.annotation.constant.AnnotationConst;
1212
import xyz.erupt.annotation.expr.ExprBool;
13-
import xyz.erupt.annotation.fun.DataProxy;
14-
import xyz.erupt.annotation.fun.TagsFetchHandler;
1513
import xyz.erupt.annotation.sub_erupt.Layout;
1614
import xyz.erupt.annotation.sub_erupt.RowOperation;
1715
import xyz.erupt.annotation.sub_erupt.Tpl;
@@ -24,23 +22,10 @@
2422
import xyz.erupt.annotation.sub_field.sub_edit.Search;
2523
import xyz.erupt.annotation.sub_field.sub_edit.TagsType;
2624
import xyz.erupt.cloud.server.base.CloudServerConst;
27-
import xyz.erupt.cloud.server.node.MetaNode;
28-
import xyz.erupt.cloud.server.node.NodeManager;
29-
import xyz.erupt.core.config.GsonFactory;
30-
import xyz.erupt.core.util.Erupts;
31-
import xyz.erupt.jpa.dao.EruptDao;
3225
import xyz.erupt.jpa.model.MetaModelUpdateVo;
33-
import xyz.erupt.linq.lambda.LambdaSee;
34-
import xyz.erupt.tpl.engine.EngineConst;
3526
import xyz.erupt.upms.handler.ViaMenuValueCtrl;
3627

37-
import javax.annotation.Resource;
3828
import javax.persistence.*;
39-
import java.util.Collection;
40-
import java.util.List;
41-
import java.util.Map;
42-
import java.util.Optional;
43-
import java.util.function.Function;
4429

4530
/**
4631
* @author YuePeng
@@ -52,7 +37,7 @@
5237
@Entity
5338
@Table(name = "e_cloud_node")
5439
@Erupt(
55-
name = "节点配置", dataProxy = CloudNode.class,
40+
name = "节点配置", dataProxy = CloudNodeProcess.class,
5641
rowOperation = @RowOperation(
5742
title = "查看令牌", icon = "fa fa-shield", mode = RowOperation.Mode.SINGLE,
5843
show = @ExprBool(exprHandler = ViaMenuValueCtrl.class, params = CloudServerConst.CLOUD_ACCESS_TOKEN_PERMISSION),
@@ -61,11 +46,7 @@
6146
)
6247
@Component
6348
@EruptI18n
64-
public class CloudNode extends MetaModelUpdateVo implements DataProxy<CloudNode>, TagsFetchHandler, Tpl.TplHandler {
65-
66-
public static final String NODE_NAME = LambdaSee.field(CloudNode::getNodeName);
67-
68-
public static final String ACCESS_TOKEN = LambdaSee.field(CloudNode::getAccessToken);
49+
public class CloudNode extends MetaModelUpdateVo {
6950

7051
@Column(unique = true)
7152
@EruptField(
@@ -110,7 +91,7 @@ public class CloudNode extends MetaModelUpdateVo implements DataProxy<CloudNode>
11091
@Transient
11192
@EruptField(
11293
views = @View(title = "实例数", className = "text-center", width = "70px"
113-
, tpl = @Tpl(path = "/tpl/node-instance.ftl", width = "400px", tplHandler = CloudNode.class)
94+
, tpl = @Tpl(path = "/tpl/node-instance.ftl", width = "400px", tplHandler = CloudNodeProcess.class)
11495
)
11596
)
11697
private Integer instanceNum;
@@ -124,7 +105,7 @@ public class CloudNode extends MetaModelUpdateVo implements DataProxy<CloudNode>
124105
@EruptField(
125106
views = @View(title = "负责人", sortable = true),
126107
edit = @Edit(title = "负责人", type = EditType.TAGS,
127-
tagsType = @TagsType(fetchHandler = CloudNode.class), notNull = true)
108+
tagsType = @TagsType(fetchHandler = CloudNodeProcess.class), notNull = true)
128109
)
129110
private String duty;
130111

@@ -148,75 +129,5 @@ public class CloudNode extends MetaModelUpdateVo implements DataProxy<CloudNode>
148129
)
149130
private String remark;
150131

151-
@Transient
152-
@Resource
153-
private NodeManager nodeManager;
154-
155-
@Transient
156-
@Resource
157-
private EruptDao eruptDao;
158-
159-
@Override
160-
public void afterUpdate(CloudNode cloudNode) {
161-
DataProxy.super.afterUpdate(cloudNode);
162-
}
163-
164-
@Override
165-
public void beforeAdd(CloudNode cloudNode) {
166-
if (null == cloudNode.getAccessToken()) cloudNode.setAccessToken(Erupts.generateCode(16).toUpperCase());
167-
}
168-
169-
@Override
170-
public void beforeUpdate(CloudNode cloudNode) {
171-
this.beforeAdd(cloudNode);
172-
}
173-
174-
@Override
175-
public void afterFetch(Collection<Map<String, Object>> list) {
176-
for (Map<String, Object> map : list) {
177-
Optional.ofNullable(map.get(ACCESS_TOKEN)).ifPresent(it -> {
178-
String token = it.toString();
179-
map.put(ACCESS_TOKEN, token.substring(0, 3) + "******" + token.substring(token.length() - 3));
180-
});
181-
map.put(LambdaSee.field(CloudNode::getEruptNum), '-');
182-
map.put(LambdaSee.field(CloudNode::getInstanceNum), '-');
183-
map.put(LambdaSee.field(CloudNode::getVersion), '-');
184-
map.put(LambdaSee.field(CloudNode::getEruptModuleNum), '-');
185-
try {
186-
MetaNode metaNode = nodeManager.getNode(map.get(NODE_NAME).toString());
187-
Optional.ofNullable(nodeManager.getNode(map.get(NODE_NAME).toString())).ifPresent(metaNode1 -> {
188-
Function<Collection<String>, Object> function = (it) -> null == it ? 0 : String.format("<a href='javascript:alert(`%s`);'>%d</a>", String.join("\\u000a", it), it.size());
189-
map.put(LambdaSee.field(CloudNode::getEruptNum), function.apply(metaNode.getErupts()));
190-
map.put(LambdaSee.field(CloudNode::getInstanceNum), metaNode.getLocations().size());
191-
map.put(LambdaSee.field(CloudNode::getEruptModuleNum), function.apply(metaNode.getEruptModules()));
192-
map.put(LambdaSee.field(CloudNode::getVersion), metaNode.getVersion());
193-
});
194-
} catch (Exception e) {
195-
map.put(LambdaSee.field(CloudNode::getVersion), String.format("<span style='color:#f00'>%s</span>", e.getMessage()));
196-
log.warn("node warn → " + map.get(NODE_NAME), e);
197-
}
198-
}
199-
}
200-
201-
@Override
202-
public void afterDelete(CloudNode cloudNode) {
203-
nodeManager.removeNode(cloudNode.getNodeName());
204-
}
205-
206-
@Override
207-
public List<String> fetchTags(String[] params) {
208-
return eruptDao.getJdbcTemplate().queryForList("select name from e_upms_user", String.class);
209-
}
210-
211-
@Override
212-
public void bindTplData(Map<String, Object> binding, String[] params) {
213-
CloudNode cloudNode = (CloudNode) binding.get(EngineConst.INJECT_ROW);
214-
MetaNode metaNode = nodeManager.getNode(cloudNode.getNodeName());
215-
if (null == metaNode) {
216-
binding.put("instances", "[]");
217-
} else {
218-
binding.put("instances", GsonFactory.getGson().toJson(metaNode.getLocations()));
219-
}
220-
}
221132

222133
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package xyz.erupt.cloud.server.model;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.stereotype.Component;
5+
import xyz.erupt.annotation.fun.DataProxy;
6+
import xyz.erupt.annotation.fun.TagsFetchHandler;
7+
import xyz.erupt.annotation.sub_erupt.Tpl;
8+
import xyz.erupt.cloud.server.node.MetaNode;
9+
import xyz.erupt.cloud.server.node.NodeManager;
10+
import xyz.erupt.core.config.GsonFactory;
11+
import xyz.erupt.core.util.Erupts;
12+
import xyz.erupt.jpa.dao.EruptDao;
13+
import xyz.erupt.linq.lambda.LambdaSee;
14+
import xyz.erupt.tpl.engine.EngineConst;
15+
16+
import javax.annotation.Resource;
17+
import java.util.Collection;
18+
import java.util.List;
19+
import java.util.Map;
20+
import java.util.Optional;
21+
import java.util.function.Function;
22+
23+
/**
24+
* @author YuePeng
25+
* date 2024/5/7 22:02
26+
*/
27+
@Component
28+
@Slf4j
29+
public class CloudNodeProcess implements DataProxy<CloudNode>, TagsFetchHandler, Tpl.TplHandler {
30+
31+
@Resource
32+
private NodeManager nodeManager;
33+
34+
@Resource
35+
private EruptDao eruptDao;
36+
37+
@Override
38+
public void afterUpdate(CloudNode cloudNode) {
39+
DataProxy.super.afterUpdate(cloudNode);
40+
}
41+
42+
@Override
43+
public void beforeAdd(CloudNode cloudNode) {
44+
if (null == cloudNode.getAccessToken()) cloudNode.setAccessToken(Erupts.generateCode(16).toUpperCase());
45+
}
46+
47+
@Override
48+
public void beforeUpdate(CloudNode cloudNode) {
49+
this.beforeAdd(cloudNode);
50+
}
51+
52+
@Override
53+
public void afterFetch(Collection<Map<String, Object>> list) {
54+
String nodeNameField = LambdaSee.field(CloudNode::getNodeName);
55+
for (Map<String, Object> map : list) {
56+
Optional.ofNullable(map.get(LambdaSee.field(CloudNode::getAccessToken))).ifPresent(it -> {
57+
String token = it.toString();
58+
map.put(LambdaSee.field(CloudNode::getAccessToken), token.substring(0, 3) + "******" + token.substring(token.length() - 3));
59+
});
60+
map.put(LambdaSee.field(CloudNode::getEruptNum), '-');
61+
map.put(LambdaSee.field(CloudNode::getInstanceNum), '-');
62+
map.put(LambdaSee.field(CloudNode::getVersion), '-');
63+
map.put(LambdaSee.field(CloudNode::getEruptModuleNum), '-');
64+
try {
65+
MetaNode metaNode = nodeManager.getNode(map.get(nodeNameField).toString());
66+
Optional.ofNullable(nodeManager.getNode(map.get(nodeNameField).toString())).ifPresent(metaNode1 -> {
67+
Function<Collection<String>, Object> function = (it) -> null == it ? 0 : String.format("<a href='javascript:alert(`%s`);'>%d</a>", String.join("\\u000a", it), it.size());
68+
map.put(LambdaSee.field(CloudNode::getEruptNum), function.apply(metaNode.getErupts()));
69+
map.put(LambdaSee.field(CloudNode::getInstanceNum), metaNode.getLocations().size());
70+
map.put(LambdaSee.field(CloudNode::getEruptModuleNum), function.apply(metaNode.getEruptModules()));
71+
map.put(LambdaSee.field(CloudNode::getVersion), metaNode.getVersion());
72+
});
73+
} catch (Exception e) {
74+
map.put(LambdaSee.field(CloudNode::getVersion), String.format("<span style='color:#f00'>%s</span>", e.getMessage()));
75+
log.warn("node warn → " + map.get(nodeNameField), e);
76+
}
77+
}
78+
}
79+
80+
@Override
81+
public void afterDelete(CloudNode cloudNode) {
82+
nodeManager.removeNode(cloudNode.getNodeName());
83+
}
84+
85+
@Override
86+
public List<String> fetchTags(String[] params) {
87+
return eruptDao.getJdbcTemplate().queryForList("select name from e_upms_user", String.class);
88+
}
89+
90+
@Override
91+
public void bindTplData(Map<String, Object> binding, String[] params) {
92+
CloudNode cloudNode = (CloudNode) binding.get(EngineConst.INJECT_ROW);
93+
MetaNode metaNode = nodeManager.getNode(cloudNode.getNodeName());
94+
if (null == metaNode) {
95+
binding.put("instances", "[]");
96+
} else {
97+
binding.put("instances", GsonFactory.getGson().toJson(metaNode.getLocations()));
98+
}
99+
}
100+
101+
}

erupt-cloud/erupt-cloud-server/src/main/java/xyz/erupt/cloud/server/node/NodeManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void removeNodeInstance(String nodeName, String instanceAddress) {
7171

7272

7373
public List<MetaNode> findAllNodes() {
74-
List<String> keys = eruptDao.queryEntityList(CloudNode.class).stream().map(it ->
74+
List<String> keys = eruptDao.lambdaQuery(CloudNode.class).list().stream().map(it ->
7575
eruptCloudServerProp.getCloudNameSpace() + NODE_SPACE + it.getNodeName()
7676
).collect(Collectors.toList());
7777
if (!keys.isEmpty()) {

0 commit comments

Comments
 (0)