union-ark-web 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROJECT_OVERVIEW.md +405 -0
- package/README.md +177 -0
- package/ark-control/pom.xml +142 -0
- package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SecurityResult.java +14 -0
- package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SymmetricalSecurityService.java +11 -0
- package/ark-control/src/local-mock/java/com/epcc/dubbo/result/Result.java +29 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptField.java +16 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldLong.java +17 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldWithTag.java +16 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/BaseDataErrorCode.java +26 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/CheckException.java +33 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/ErrorCode.java +9 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/redis/RedisCacheService.java +131 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/Constant.java +24 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/ResultUtil.java +9 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalMockSensitiveProxy.java +40 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalRedisCacheService.java +45 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveHostConfiguration.java +27 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveProxyConfiguration.java +16 -0
- package/ark-control/src/main/java/com/union/control/ArkControlApplication.java +17 -0
- package/ark-control/src/main/java/com/union/control/dubbo/ProviderAccessLogFilter.java +45 -0
- package/ark-control/src/main/java/com/union/control/mapper/AgentExecutionMapper.java +35 -0
- package/ark-control/src/main/java/com/union/control/mapper/ConversationMapper.java +44 -0
- package/ark-control/src/main/java/com/union/control/mapper/MemoryStoreMapper.java +41 -0
- package/ark-control/src/main/java/com/union/control/mapper/ScheduledTaskMapper.java +96 -0
- package/ark-control/src/main/java/com/union/control/mapper/SensitiveAddressBookDemo.java +31 -0
- package/ark-control/src/main/java/com/union/control/mapper/SensitiveDataDemoMapper.java +24 -0
- package/ark-control/src/main/java/com/union/control/mapper/interceptor/AESInterceptor.java +265 -0
- package/ark-control/src/main/java/com/union/control/mapper/interceptor/AddressBookHandler.java +105 -0
- package/ark-control/src/main/java/com/union/control/schedule/ScheduledExecutionToken.java +55 -0
- package/ark-control/src/main/java/com/union/control/schedule/ScheduledTaskScheduler.java +206 -0
- package/ark-control/src/main/java/com/union/control/service/impl/AgentExecutionServiceImpl.java +212 -0
- package/ark-control/src/main/java/com/union/control/service/impl/AgentProxyServiceImpl.java +143 -0
- package/ark-control/src/main/java/com/union/control/service/impl/ConversationServiceImpl.java +245 -0
- package/ark-control/src/main/java/com/union/control/service/impl/MemoryStoreServiceImpl.java +252 -0
- package/ark-control/src/main/java/com/union/control/service/impl/RunningAnalysisMockServiceImpl.java +301 -0
- package/ark-control/src/main/java/com/union/control/service/impl/ScheduledTaskServiceImpl.java +576 -0
- package/ark-control/src/main/java/com/union/control/service/impl/SensitiveDataDemoServiceImpl.java +144 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/RedisRevealTokenStore.java +90 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealProcessor.java +319 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealServiceImpl.java +72 -0
- package/ark-control/src/main/java/com/union/control/utils/AgentSupport.java +103 -0
- package/ark-control/src/main/java/com/union/control/utils/security/SymmetricalSecurityUtils.java +160 -0
- package/ark-control/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter +1 -0
- package/ark-control/src/main/resources/application.properties +4 -0
- package/ark-control/src/main/resources/application.yml +32 -0
- package/ark-control/src/main/resources/dubbo-provider.xml +20 -0
- package/ark-control/src/main/resources/mapper/AgentExecutionMapper.xml +75 -0
- package/ark-control/src/main/resources/mapper/ConversationMapper.xml +110 -0
- package/ark-control/src/main/resources/mapper/MemoryStoreMapper.xml +74 -0
- package/ark-control/src/main/resources/mapper/ScheduledTaskMapper.xml +286 -0
- package/ark-control/src/main/resources/mapper/SensitiveDataDemoMapper.xml +55 -0
- package/ark-control/src/main/resources/schema.sql +146 -0
- package/ark-control/src/test/java/com/union/control/AgentExecutionServiceTest.java +170 -0
- package/ark-control/src/test/java/com/union/control/ArkControlStructureContractTest.java +107 -0
- package/ark-control/src/test/java/com/union/control/ConversationServiceTest.java +89 -0
- package/ark-control/src/test/java/com/union/control/MemoryStoreServiceTest.java +26 -0
- package/ark-control/src/test/java/com/union/control/PydanticAiControlContractTest.java +52 -0
- package/ark-control/src/test/java/com/union/control/TestJson.java +45 -0
- package/ark-control/src/test/java/com/union/control/dubbo/ProviderAccessLogFilterTest.java +53 -0
- package/ark-control/src/test/java/com/union/control/local/sensitive/LocalSensitiveProxyConfigurationTest.java +23 -0
- package/ark-control/src/test/java/com/union/control/mapper/interceptor/AESInterceptorCompatibilityTest.java +505 -0
- package/ark-control/src/test/java/com/union/control/schedule/ScheduledExecutionTokenTest.java +27 -0
- package/ark-control/src/test/java/com/union/control/schedule/ScheduledTaskSchedulerTest.java +51 -0
- package/ark-control/src/test/java/com/union/control/service/AgentProxyServiceTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/service/ScheduledTaskServiceTest.java +483 -0
- package/ark-control/src/test/java/com/union/control/service/impl/SensitiveDataDemoServiceImplTest.java +104 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/RedisRevealTokenStoreTest.java +65 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealBoundaryTest.java +99 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorCodecTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/utils/security/SymmetricalSecurityUtilsCompatibilityTest.java +87 -0
- package/ark-control-facade/pom.xml +16 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentExecutionService.java +8 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentProxyService.java +7 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentResponse.java +22 -0
- package/ark-control-facade/src/main/java/com/union/control/service/ConversationService.java +12 -0
- package/ark-control-facade/src/main/java/com/union/control/service/MemoryStoreService.java +12 -0
- package/ark-control-facade/src/main/java/com/union/control/service/RunningAnalysisMockService.java +10 -0
- package/ark-control-facade/src/main/java/com/union/control/service/ScheduledTaskService.java +40 -0
- package/ark-control-facade/src/main/java/com/union/control/service/SensitiveDataDemoService.java +13 -0
- package/ark-control-facade/src/main/java/com/union/control/service/sensitive/SensitiveRevealService.java +18 -0
- package/ark-web/README.md +80 -0
- package/ark-web/pom.xml +105 -0
- package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/ArkAuthServiceMock.java +105 -0
- package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/LocalKaptchaConfiguration.java +26 -0
- package/ark-web/src/main/java/com/epcc/arkweb/Application.java +13 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/InterceptorConfig.java +20 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/Realm.java +64 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/ShiroConfig.java +129 -0
- package/ark-web/src/main/java/com/epcc/arkweb/filter/LoginFormFilter.java +43 -0
- package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthContextHolder.java +39 -0
- package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthenticatedRequest.java +91 -0
- package/ark-web/src/main/java/com/epcc/arkweb/model/ShiroUser.java +21 -0
- package/ark-web/src/main/java/com/epcc/arkweb/utils/ResultMsg.java +19 -0
- package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskCommandVO.java +30 -0
- package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskQueryVO.java +20 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/CommonController.java +25 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptor.java +229 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentController.java +165 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentPermission.java +13 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/LlmController.java +209 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/ScheduledTaskController.java +160 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveCaptchaService.java +146 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealController.java +163 -0
- package/ark-web/src/main/resources/application.properties +1 -0
- package/ark-web/src/main/resources/application.yml +23 -0
- package/ark-web/src/main/resources/dubbo-consumer.xml +19 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/CasShiroConfig.java +229 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/InterceptorConfig.java +35 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/ShiroConfig.java +161 -0
- package/ark-web/src/test/java/com/epcc/arkweb/ArkWebStructureContractTest.java +290 -0
- package/ark-web/src/test/java/com/epcc/arkweb/ShiroTestSupport.java +32 -0
- package/ark-web/src/test/java/com/epcc/arkweb/config/LocalShiroIntegrationTest.java +121 -0
- package/ark-web/src/test/java/com/epcc/arkweb/helper/AuthenticatedRequestTest.java +131 -0
- package/ark-web/src/test/java/com/epcc/arkweb/local/LocalArkAuthServiceMockTest.java +17 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptorTest.java +134 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentControllerAuthorizationTest.java +97 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/LlmControllerTest.java +113 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealControllerTest.java +273 -0
- package/package.json +18 -0
- package/pom.xml +16 -0
package/ark-control/src/main/java/com/union/control/service/impl/RunningAnalysisMockServiceImpl.java
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
package com.union.control.service.impl;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import com.union.control.utils.AgentSupport;
|
|
5
|
+
import com.union.control.service.RunningAnalysisMockService;
|
|
6
|
+
|
|
7
|
+
import java.time.LocalDate;
|
|
8
|
+
import java.time.format.DateTimeFormatter;
|
|
9
|
+
import java.time.format.DateTimeParseException;
|
|
10
|
+
import java.time.temporal.ChronoUnit;
|
|
11
|
+
import java.util.ArrayList;
|
|
12
|
+
import java.util.Arrays;
|
|
13
|
+
import java.util.Collections;
|
|
14
|
+
import java.util.LinkedHashMap;
|
|
15
|
+
import java.util.List;
|
|
16
|
+
import java.util.Locale;
|
|
17
|
+
import java.util.Map;
|
|
18
|
+
import java.util.concurrent.ThreadLocalRandom;
|
|
19
|
+
import java.util.function.LongConsumer;
|
|
20
|
+
|
|
21
|
+
import org.springframework.beans.factory.annotation.Autowired;
|
|
22
|
+
import org.springframework.stereotype.Service;
|
|
23
|
+
|
|
24
|
+
/** Local mock data used by union-py-app's typed running-analysis tools. */
|
|
25
|
+
@Service("runningAnalysisMockService")
|
|
26
|
+
public class RunningAnalysisMockServiceImpl implements RunningAnalysisMockService {
|
|
27
|
+
private static final long MIN_BIG_DATA_DELAY_MS = 1000L;
|
|
28
|
+
private static final long MAX_BIG_DATA_DELAY_MS = 1200L;
|
|
29
|
+
private static final DateTimeFormatter DATE = DateTimeFormatter.BASIC_ISO_DATE;
|
|
30
|
+
private static final List<Org> ORGS = Arrays.asList(
|
|
31
|
+
new Org("104100000004", "中国银行", "中行", "BOC", "中国银行股份有限公司"),
|
|
32
|
+
new Org("102100099996", "中国工商银行", "工行", "ICBC"),
|
|
33
|
+
new Org("103100000026", "中国农业银行", "农行", "ABC")
|
|
34
|
+
);
|
|
35
|
+
private final LongConsumer delay;
|
|
36
|
+
private final ObjectMapper json;
|
|
37
|
+
|
|
38
|
+
@Autowired
|
|
39
|
+
public RunningAnalysisMockServiceImpl(ObjectMapper json) {
|
|
40
|
+
this(RunningAnalysisMockServiceImpl::sleep, json);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public RunningAnalysisMockServiceImpl(LongConsumer delay) {
|
|
44
|
+
this(delay, new ObjectMapper());
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
RunningAnalysisMockServiceImpl(LongConsumer delay, ObjectMapper json) {
|
|
48
|
+
this.delay = delay;
|
|
49
|
+
this.json = json;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public Map<String, Object> getOrgInfo(String input) {
|
|
53
|
+
Map<String, Object> payload = request(input);
|
|
54
|
+
String query = requiredString(payload, "orgName").toLowerCase(Locale.ROOT);
|
|
55
|
+
List<Map<String, Object>> rows = new ArrayList<>();
|
|
56
|
+
for (Org org : ORGS) {
|
|
57
|
+
if (org.matches(query)) rows.add(org.row());
|
|
58
|
+
}
|
|
59
|
+
return ok(rows);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public Map<String, Object> queryBigData(String input) {
|
|
63
|
+
Map<String, Object> payload = request(input);
|
|
64
|
+
String interfaceName = requiredString(payload, "interfaceName");
|
|
65
|
+
Map<String, Object> params = requiredMap(payload, "params");
|
|
66
|
+
List<String> days = days(params);
|
|
67
|
+
List<Map<String, Object>> rows;
|
|
68
|
+
if ("runing_cnt.bank".equals(interfaceName)) {
|
|
69
|
+
rows = bankRows(params, days);
|
|
70
|
+
} else if ("runing_cnt.full_link".equals(interfaceName)) {
|
|
71
|
+
rows = fullLinkRows(days);
|
|
72
|
+
} else {
|
|
73
|
+
throw new IllegalArgumentException("interfaceName 非法");
|
|
74
|
+
}
|
|
75
|
+
delay.accept(ThreadLocalRandom.current().nextLong(
|
|
76
|
+
MIN_BIG_DATA_DELAY_MS, MAX_BIG_DATA_DELAY_MS + 1));
|
|
77
|
+
return ok(rows);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public Map<String, Object> announceList(String input) {
|
|
81
|
+
Map<String, Object> payload = request(input);
|
|
82
|
+
String orgCode = requiredString(payload, "org_code");
|
|
83
|
+
String startDate = validDate(requiredString(payload, "planned_start_time"));
|
|
84
|
+
validDate(requiredString(payload, "planned_start_time_end"));
|
|
85
|
+
String orgName = orgName(orgCode);
|
|
86
|
+
List<Map<String, Object>> rows = new ArrayList<>();
|
|
87
|
+
rows.add(row(
|
|
88
|
+
"announcementId", "CHG-MOCK-20260712001",
|
|
89
|
+
"orgCode", orgCode,
|
|
90
|
+
"orgName", orgName,
|
|
91
|
+
"changeTitle", "核心支付链路灰度变更",
|
|
92
|
+
"plannedStartTime", startDate + " 01:00:00",
|
|
93
|
+
"plannedEndTime", startDate + " 03:00:00",
|
|
94
|
+
"status", "已完成",
|
|
95
|
+
"executionEvaluation", "执行正常,变更后交易成功率无明显波动",
|
|
96
|
+
"impactScope", "网银、手机银行支付交易"
|
|
97
|
+
));
|
|
98
|
+
rows.add(row(
|
|
99
|
+
"announcementId", "CHG-MOCK-20260712002",
|
|
100
|
+
"orgCode", orgCode,
|
|
101
|
+
"orgName", orgName,
|
|
102
|
+
"changeTitle", "前置系统网络策略调整",
|
|
103
|
+
"plannedStartTime", startDate + " 02:00:00",
|
|
104
|
+
"plannedEndTime", startDate + " 04:00:00",
|
|
105
|
+
"status", "已完成",
|
|
106
|
+
"executionEvaluation", "执行后平均耗时短时升高,已恢复",
|
|
107
|
+
"impactScope", "成员机构接入前置链路"
|
|
108
|
+
));
|
|
109
|
+
return ok(rows);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
public Map<String, Object> getJiraInfo(String input) {
|
|
113
|
+
Map<String, Object> payload = request(input);
|
|
114
|
+
String orgCode = requiredString(payload, "orgCode");
|
|
115
|
+
String startDate = validDate(requiredString(payload, "startDate"));
|
|
116
|
+
validDate(requiredString(payload, "endDate"));
|
|
117
|
+
String orgName = orgName(orgCode);
|
|
118
|
+
List<Map<String, Object>> rows = new ArrayList<>();
|
|
119
|
+
rows.add(row(
|
|
120
|
+
"issueKey", "OPS-20260712-001",
|
|
121
|
+
"orgCode", orgCode,
|
|
122
|
+
"orgName", orgName,
|
|
123
|
+
"faultTime", startDate + " 10:24:00",
|
|
124
|
+
"recoverTime", startDate + " 10:41:00",
|
|
125
|
+
"faultLevel", "P2",
|
|
126
|
+
"impactScope", "部分支付交易",
|
|
127
|
+
"impactDescription", "支付交易失败率短时升高,影响约 320 笔",
|
|
128
|
+
"faultCause", "成员机构前置连接池耗尽",
|
|
129
|
+
"status", "已恢复"
|
|
130
|
+
));
|
|
131
|
+
rows.add(row(
|
|
132
|
+
"issueKey", "OPS-20260712-009",
|
|
133
|
+
"orgCode", orgCode,
|
|
134
|
+
"orgName", orgName,
|
|
135
|
+
"faultTime", startDate + " 22:18:00",
|
|
136
|
+
"recoverTime", startDate + " 22:30:00",
|
|
137
|
+
"faultLevel", "P3",
|
|
138
|
+
"impactScope", "查询类交易",
|
|
139
|
+
"impactDescription", "查询平均耗时升高,未形成大面积失败",
|
|
140
|
+
"faultCause", "下游数据库慢查询",
|
|
141
|
+
"status", "已关闭"
|
|
142
|
+
));
|
|
143
|
+
return ok(rows);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private static List<Map<String, Object>> bankRows(
|
|
147
|
+
Map<String, Object> params, List<String> days) {
|
|
148
|
+
List<String> orgCodes = orgCodes(params.get("orgCodeList"));
|
|
149
|
+
List<Map<String, Object>> rows = new ArrayList<>();
|
|
150
|
+
for (String orgCode : orgCodes) {
|
|
151
|
+
for (int index = 0; index < days.size(); index++) {
|
|
152
|
+
int failCount = 5 + index % 4;
|
|
153
|
+
int totalCount = 132000 + index * 1300;
|
|
154
|
+
rows.add(row(
|
|
155
|
+
"statDate", days.get(index),
|
|
156
|
+
"orgCode", orgCode,
|
|
157
|
+
"orgName", orgName(orgCode),
|
|
158
|
+
"sysSuccessPercent", String.format(Locale.ROOT, "%.4f%%", 99.997 - index * 0.0003),
|
|
159
|
+
"avgCostMs", 38.5 + index * 0.7,
|
|
160
|
+
"totalTxnCnt", totalCount,
|
|
161
|
+
"failTxnCnt", failCount,
|
|
162
|
+
"failRate", String.format(Locale.ROOT, "%.4f%%", failCount * 100.0 / totalCount)
|
|
163
|
+
));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return rows;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private static List<Map<String, Object>> fullLinkRows(List<String> days) {
|
|
170
|
+
List<Map<String, Object>> rows = new ArrayList<>();
|
|
171
|
+
for (int index = 0; index < days.size(); index++) {
|
|
172
|
+
int failCount = 31 + index % 8;
|
|
173
|
+
int totalCount = 2680000 + index * 25000;
|
|
174
|
+
rows.add(row(
|
|
175
|
+
"statDate", days.get(index),
|
|
176
|
+
"sysSuccessPercent", String.format(Locale.ROOT, "%.4f%%", 99.9982 - index * 0.0001),
|
|
177
|
+
"avgCostMs", 41.2 + index * 0.3,
|
|
178
|
+
"totalTxnCnt", totalCount,
|
|
179
|
+
"failTxnCnt", failCount,
|
|
180
|
+
"failRate", String.format(Locale.ROOT, "%.4f%%", failCount * 100.0 / totalCount)
|
|
181
|
+
));
|
|
182
|
+
}
|
|
183
|
+
return rows;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private static List<String> days(Map<String, Object> params) {
|
|
187
|
+
LocalDate start = parseDate(requiredString(params, "startDate"));
|
|
188
|
+
LocalDate end = parseDate(requiredString(params, "endDate"));
|
|
189
|
+
long count = ChronoUnit.DAYS.between(start, end) + 1;
|
|
190
|
+
if (count < 1 || count > 31) throw new IllegalArgumentException("日期范围必须为 1 到 31 天");
|
|
191
|
+
List<String> result = new ArrayList<>();
|
|
192
|
+
for (int i = 0; i < count; i++) result.add(start.plusDays(i).format(DATE));
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private static List<String> orgCodes(Object raw) {
|
|
197
|
+
if (raw == null) {
|
|
198
|
+
List<String> result = new ArrayList<>();
|
|
199
|
+
for (Org org : ORGS) result.add(org.code);
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
if (!(raw instanceof List) || ((List<?>) raw).isEmpty() || ((List<?>) raw).size() > 20)
|
|
203
|
+
throw new IllegalArgumentException("orgCodeList 非法");
|
|
204
|
+
List<String> result = new ArrayList<>();
|
|
205
|
+
for (Object value : (List<?>) raw) {
|
|
206
|
+
if (!(value instanceof String) || ((String) value).trim().isEmpty() ||
|
|
207
|
+
((String) value).trim().length() > 64)
|
|
208
|
+
throw new IllegalArgumentException("orgCodeList 非法");
|
|
209
|
+
result.add(((String) value).trim());
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private static String orgName(String orgCode) {
|
|
215
|
+
for (Org org : ORGS) {
|
|
216
|
+
if (org.code.equals(orgCode)) return org.name;
|
|
217
|
+
}
|
|
218
|
+
return "函数调用测试银行";
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
private static String validDate(String value) {
|
|
222
|
+
parseDate(value);
|
|
223
|
+
return value;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private static void sleep(long millis) {
|
|
227
|
+
try {
|
|
228
|
+
Thread.sleep(millis);
|
|
229
|
+
} catch (InterruptedException e) {
|
|
230
|
+
Thread.currentThread().interrupt();
|
|
231
|
+
throw new IllegalStateException("queryBigData 延迟被中断", e);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private static LocalDate parseDate(String value) {
|
|
236
|
+
try {
|
|
237
|
+
return LocalDate.parse(value, DATE);
|
|
238
|
+
} catch (DateTimeParseException e) {
|
|
239
|
+
throw new IllegalArgumentException("日期格式必须为 yyyyMMdd");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private static String requiredString(Map<String, Object> values, String key) {
|
|
244
|
+
Object raw = values == null ? null : values.get(key);
|
|
245
|
+
if (!(raw instanceof String) || ((String) raw).trim().isEmpty() ||
|
|
246
|
+
((String) raw).trim().length() > 128)
|
|
247
|
+
throw new IllegalArgumentException(key + " 非法");
|
|
248
|
+
return ((String) raw).trim();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
@SuppressWarnings("unchecked")
|
|
252
|
+
private static Map<String, Object> requiredMap(Map<String, Object> values, String key) {
|
|
253
|
+
Object raw = values == null ? null : values.get(key);
|
|
254
|
+
if (!(raw instanceof Map)) throw new IllegalArgumentException(key + " 非法");
|
|
255
|
+
return (Map<String, Object>) raw;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
private Map<String, Object> request(String input) {
|
|
259
|
+
Map<String, Object> payload = AgentSupport.request(json, input);
|
|
260
|
+
AgentSupport.userId(payload);
|
|
261
|
+
return payload;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private static Map<String, Object> row(Object... values) {
|
|
265
|
+
Map<String, Object> row = new LinkedHashMap<>();
|
|
266
|
+
for (int i = 0; i < values.length; i += 2) row.put((String) values[i], values[i + 1]);
|
|
267
|
+
return row;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private static Map<String, Object> ok(Object data) {
|
|
271
|
+
Map<String, Object> response = new LinkedHashMap<>();
|
|
272
|
+
response.put("success", true);
|
|
273
|
+
response.put("data", data);
|
|
274
|
+
return response;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
private static class Org {
|
|
278
|
+
private final String code;
|
|
279
|
+
private final String name;
|
|
280
|
+
private final List<String> aliases;
|
|
281
|
+
|
|
282
|
+
private Org(String code, String name, String... aliases) {
|
|
283
|
+
this.code = code;
|
|
284
|
+
this.name = name;
|
|
285
|
+
this.aliases = Collections.unmodifiableList(Arrays.asList(aliases));
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private boolean matches(String query) {
|
|
289
|
+
if (name.toLowerCase(Locale.ROOT).contains(query)) return true;
|
|
290
|
+
for (String alias : aliases) {
|
|
291
|
+
if (alias.toLowerCase(Locale.ROOT).contains(query)) return true;
|
|
292
|
+
}
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
private Map<String, Object> row() {
|
|
297
|
+
return RunningAnalysisMockServiceImpl.row(
|
|
298
|
+
"orgCode", code, "orgName", name, "aliases", aliases);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|