20260726225220

This commit is contained in:
oneao committed 2026-07-26 22:52:21 +08:00
1 parent e3c7c6f8da
commit a8478d60ed
170 files changed
+6786 -1678

No files matched your search

+4 -35
View File
@@ -1,36 +1,5 @@
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
# 本地 IP 归属地数据库(二进制,约 11MB,从官方仓库下载,不入库)
src/main/resources/ip2region.xdb
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Organization database configs ###
/config/dbconfigs/*.properties
# 多机构数据库连接配置(含敏感信息,已约定不入库)
config/dbconfigs/
+10
View File
@@ -0,0 +1,10 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Ignored default folder with query files
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="fms-api" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="fms-api" options="-parameters" />
</option>
</component>
</project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
</component>
</project>
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/central" />
</remote-repository>
</component>
</project>
+5
View File
@@ -0,0 +1,5 @@
# Local compatibility for a legacy SQL Server that only supports TLS 1.0.
# Remove this override after TLS 1.2 is enabled on the database server.
jdk.tls.disabledAlgorithms=SSLv3, TLSv1.1, DTLSv1.0, RC4, DES, \
MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
ECDH
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="temurin-21" project-jdk-type="JavaSDK" />
</project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>
@@ -44,7 +44,7 @@ GO
IF @AdminId IS NULL
THROW 51001, N'重置会话缺少管理员 ID。', 1;
CREATE TABLE dbo.b_module (
CREATE TABLE dbo.s_module (
b_id bigint NOT NULL,
b_code varchar(50) NOT NULL,
b_parent_id bigint NULL,
@@ -56,28 +56,28 @@ GO
b_savetable varchar(128) NULL,
b_keyfield varchar(50) NULL,
b_orderfield varchar(500) NULL,
b_canmenu int NOT NULL CONSTRAINT DF_b_module_canmenu DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_canuse DEFAULT (1),
b_xh int NOT NULL CONSTRAINT DF_b_module_xh DEFAULT (0),
CONSTRAINT PK_b_module PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_code UNIQUE (b_code),
CONSTRAINT CK_b_module_code CHECK (
b_canmenu int NOT NULL CONSTRAINT DF_s_module_canmenu DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_s_module_canuse DEFAULT (1),
b_xh int NOT NULL CONSTRAINT DF_s_module_xh DEFAULT (0),
CONSTRAINT PK_s_module PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT UQ_s_module_code UNIQUE (b_code),
CONSTRAINT CK_s_module_code CHECK (
LEN(b_code) BETWEEN 2 AND 50
AND b_code COLLATE Latin1_General_100_BIN2 LIKE '[a-z]%'
AND b_code COLLATE Latin1_General_100_BIN2 NOT LIKE '%[^a-z0-9_]%'
),
CONSTRAINT CK_b_module_type CHECK (b_module_type IN ('directory', 'page', 'data')),
CONSTRAINT CK_b_module_canmenu CHECK (b_canmenu IN (0, 1)),
CONSTRAINT CK_b_module_canuse CHECK (b_canuse IN (0, 1)),
CONSTRAINT CK_b_module_directory CHECK (b_module_type <> 'directory' OR (b_route IS NULL AND b_viewtable IS NULL AND b_savetable IS NULL)),
CONSTRAINT CK_b_module_page CHECK (b_module_type <> 'page' OR b_route IS NOT NULL),
CONSTRAINT CK_b_module_data CHECK (b_module_type <> 'data' OR (b_canmenu = 0 AND b_route IS NULL))
CONSTRAINT CK_s_module_type CHECK (b_module_type IN ('directory', 'page', 'data')),
CONSTRAINT CK_s_module_canmenu CHECK (b_canmenu IN (0, 1)),
CONSTRAINT CK_s_module_canuse CHECK (b_canuse IN (0, 1)),
CONSTRAINT CK_s_module_directory CHECK (b_module_type <> 'directory' OR (b_route IS NULL AND b_viewtable IS NULL AND b_savetable IS NULL)),
CONSTRAINT CK_s_module_page CHECK (b_module_type <> 'page' OR b_route IS NOT NULL),
CONSTRAINT CK_s_module_data CHECK (b_module_type <> 'data' OR (b_canmenu = 0 AND b_route IS NULL))
);
CREATE UNIQUE INDEX UX_b_module_route ON dbo.b_module (b_route) WHERE b_route IS NOT NULL;
CREATE INDEX IX_b_module_parent ON dbo.b_module (b_parent_id, b_xh, b_id);
CREATE UNIQUE INDEX UX_s_module_route ON dbo.s_module (b_route) WHERE b_route IS NOT NULL;
CREATE INDEX IX_s_module_parent ON dbo.s_module (b_parent_id, b_xh, b_id);
CREATE TABLE dbo.b_module_field (
CREATE TABLE dbo.s_module_field (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_field varchar(50) NOT NULL,
@@ -86,103 +86,100 @@ GO
b_type varchar(30) NOT NULL,
b_default_value nvarchar(500) NULL,
b_options nvarchar(max) NULL,
b_canuse int NOT NULL CONSTRAINT DF_b_module_field_canuse DEFAULT (1),
CONSTRAINT PK_b_module_field PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_field UNIQUE (b_module_id, b_field),
CONSTRAINT CK_b_module_field_type CHECK (b_type IN ('input', 'textarea', 'number', 'money', 'date', 'datetime', 'switch', 'select')),
CONSTRAINT CK_b_module_field_canuse CHECK (b_canuse IN (0, 1)),
CONSTRAINT CK_b_module_field_options CHECK (b_options IS NULL OR ISJSON(b_options) = 1)
b_canuse int NOT NULL CONSTRAINT DF_s_module_field_canuse DEFAULT (1),
CONSTRAINT PK_s_module_field PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_field_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT UQ_s_module_field UNIQUE (b_module_id, b_field),
CONSTRAINT CK_s_module_field_type CHECK (b_type IN ('input', 'textarea', 'number', 'money', 'date', 'datetime', 'switch', 'select')),
CONSTRAINT CK_s_module_field_canuse CHECK (b_canuse IN (0, 1)),
CONSTRAINT CK_s_module_field_options CHECK (b_options IS NULL OR ISJSON(b_options) = 1)
);
CREATE INDEX IX_b_module_field_module ON dbo.b_module_field (b_module_id, b_canuse, b_id);
CREATE INDEX IX_s_module_field_module ON dbo.s_module_field (b_module_id, b_canuse, b_id);
CREATE TABLE dbo.b_module_field_group (
CREATE TABLE dbo.s_module_field_group (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_parent_id bigint NULL,
b_title nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
b_xh int NOT NULL CONSTRAINT DF_b_module_field_group_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_field_group_canuse DEFAULT (1),
CONSTRAINT PK_b_module_field_group PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_group_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT FK_b_module_field_group_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.b_module_field_group (b_id),
CONSTRAINT CK_b_module_field_group_canuse CHECK (b_canuse IN (0, 1))
b_xh int NOT NULL CONSTRAINT DF_s_module_field_group_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_s_module_field_group_canuse DEFAULT (1),
CONSTRAINT PK_s_module_field_group PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_field_group_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT FK_s_module_field_group_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.s_module_field_group (b_id),
CONSTRAINT CK_s_module_field_group_canuse CHECK (b_canuse IN (0, 1))
);
CREATE INDEX IX_b_module_field_group_module ON dbo.b_module_field_group (b_module_id, b_canuse, b_xh, b_id);
CREATE INDEX IX_s_module_field_group_module ON dbo.s_module_field_group (b_module_id, b_canuse, b_xh, b_id);
CREATE TABLE dbo.b_module_field_list (
CREATE TABLE dbo.s_module_field_list (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_field_id bigint NULL,
b_group_id bigint NULL,
b_title nvarchar(100) NULL,
b_i18n varchar(150) NULL,
b_visible int NOT NULL CONSTRAINT DF_b_module_field_list_visible DEFAULT (1),
b_xh int NOT NULL CONSTRAINT DF_b_module_field_list_xh DEFAULT (0),
b_visible int NOT NULL CONSTRAINT DF_s_module_field_list_visible DEFAULT (1),
b_xh int NOT NULL CONSTRAINT DF_s_module_field_list_xh DEFAULT (0),
b_width int NULL,
b_sortable int NOT NULL CONSTRAINT DF_b_module_field_list_sortable DEFAULT (0),
CONSTRAINT PK_b_module_field_list PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_list_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT FK_b_module_field_list_field FOREIGN KEY (b_field_id) REFERENCES dbo.b_module_field (b_id),
CONSTRAINT FK_b_module_field_list_group FOREIGN KEY (b_group_id) REFERENCES dbo.b_module_field_group (b_id),
CONSTRAINT CK_b_module_field_list_visible CHECK (b_visible IN (0, 1)),
CONSTRAINT CK_b_module_field_list_sortable CHECK (b_sortable IN (0, 1)),
CONSTRAINT CK_b_module_field_list_width CHECK (b_width IS NULL OR b_width > 0)
CONSTRAINT PK_s_module_field_list PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_field_list_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT FK_s_module_field_list_field FOREIGN KEY (b_field_id) REFERENCES dbo.s_module_field (b_id),
CONSTRAINT FK_s_module_field_list_group FOREIGN KEY (b_group_id) REFERENCES dbo.s_module_field_group (b_id),
CONSTRAINT CK_s_module_field_list_visible CHECK (b_visible IN (0, 1)),
CONSTRAINT CK_s_module_field_list_width CHECK (b_width IS NULL OR b_width > 0)
);
CREATE UNIQUE INDEX UX_b_module_field_list_field ON dbo.b_module_field_list (b_module_id, b_field_id) WHERE b_field_id IS NOT NULL;
CREATE INDEX IX_b_module_field_list_tree ON dbo.b_module_field_list (b_module_id, b_group_id, b_xh, b_id);
CREATE UNIQUE INDEX UX_s_module_field_list_field ON dbo.s_module_field_list (b_module_id, b_field_id) WHERE b_field_id IS NOT NULL;
CREATE INDEX IX_s_module_field_list_tree ON dbo.s_module_field_list (b_module_id, b_group_id, b_xh, b_id);
CREATE TABLE dbo.b_module_field_edit (
CREATE TABLE dbo.s_module_field_edit (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_field_id bigint NOT NULL,
b_required int NOT NULL CONSTRAINT DF_b_module_field_edit_required DEFAULT (0),
b_readonly int NOT NULL CONSTRAINT DF_b_module_field_edit_readonly DEFAULT (0),
b_disabled int NOT NULL CONSTRAINT DF_b_module_field_edit_disabled DEFAULT (0),
b_required int NOT NULL CONSTRAINT DF_s_module_field_edit_required DEFAULT (0),
b_readonly int NOT NULL CONSTRAINT DF_s_module_field_edit_readonly DEFAULT (0),
b_disabled int NOT NULL CONSTRAINT DF_s_module_field_edit_disabled DEFAULT (0),
b_group_id bigint NULL,
b_xh int NOT NULL CONSTRAINT DF_b_module_field_edit_xh DEFAULT (0),
CONSTRAINT PK_b_module_field_edit PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_edit_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT FK_b_module_field_edit_field FOREIGN KEY (b_field_id) REFERENCES dbo.b_module_field (b_id),
CONSTRAINT FK_b_module_field_edit_group FOREIGN KEY (b_group_id) REFERENCES dbo.b_module_field_group (b_id),
CONSTRAINT UQ_b_module_field_edit UNIQUE (b_module_id, b_field_id),
CONSTRAINT CK_b_module_field_edit_required CHECK (b_required IN (0, 1)),
CONSTRAINT CK_b_module_field_edit_readonly CHECK (b_readonly IN (0, 1)),
CONSTRAINT CK_b_module_field_edit_disabled CHECK (b_disabled IN (0, 1))
b_xh int NOT NULL CONSTRAINT DF_s_module_field_edit_xh DEFAULT (0),
CONSTRAINT PK_s_module_field_edit PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_field_edit_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT FK_s_module_field_edit_field FOREIGN KEY (b_field_id) REFERENCES dbo.s_module_field (b_id),
CONSTRAINT FK_s_module_field_edit_group FOREIGN KEY (b_group_id) REFERENCES dbo.s_module_field_group (b_id),
CONSTRAINT UQ_s_module_field_edit UNIQUE (b_module_id, b_field_id),
CONSTRAINT CK_s_module_field_edit_required CHECK (b_required IN (0, 1)),
CONSTRAINT CK_s_module_field_edit_readonly CHECK (b_readonly IN (0, 1)),
CONSTRAINT CK_s_module_field_edit_disabled CHECK (b_disabled IN (0, 1))
);
CREATE INDEX IX_b_module_field_edit_module ON dbo.b_module_field_edit (b_module_id, b_xh, b_id);
CREATE INDEX IX_s_module_field_edit_module ON dbo.s_module_field_edit (b_module_id, b_xh, b_id);
CREATE TABLE dbo.b_module_field_query (
CREATE TABLE dbo.s_module_field_query (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_field_id bigint NOT NULL,
b_component varchar(30) NOT NULL,
b_operator varchar(20) NOT NULL,
b_default_value nvarchar(500) NULL,
b_xh int NOT NULL CONSTRAINT DF_b_module_field_query_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_field_query_canuse DEFAULT (1),
CONSTRAINT PK_b_module_field_query PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_query_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT FK_b_module_field_query_field FOREIGN KEY (b_field_id) REFERENCES dbo.b_module_field (b_id),
CONSTRAINT UQ_b_module_field_query UNIQUE (b_module_id, b_field_id),
CONSTRAINT CK_b_module_field_query_operator CHECK (b_operator IN ('=', 'like', 'between', 'in')),
CONSTRAINT CK_b_module_field_query_canuse CHECK (b_canuse IN (0, 1))
b_xh int NOT NULL CONSTRAINT DF_s_module_field_query_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_s_module_field_query_canuse DEFAULT (1),
CONSTRAINT PK_s_module_field_query PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_field_query_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT FK_s_module_field_query_field FOREIGN KEY (b_field_id) REFERENCES dbo.s_module_field (b_id),
CONSTRAINT UQ_s_module_field_query UNIQUE (b_module_id, b_field_id),
CONSTRAINT CK_s_module_field_query_operator CHECK (b_operator IN ('=', 'like', 'between', 'in')),
CONSTRAINT CK_s_module_field_query_canuse CHECK (b_canuse IN (0, 1))
);
CREATE INDEX IX_b_module_field_query_module ON dbo.b_module_field_query (b_module_id, b_canuse, b_xh, b_id);
CREATE INDEX IX_s_module_field_query_module ON dbo.s_module_field_query (b_module_id, b_canuse, b_xh, b_id);
CREATE TABLE dbo.b_module_power (
CREATE TABLE dbo.s_module_power (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_code varchar(50) NOT NULL,
b_name nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
b_xh int NOT NULL CONSTRAINT DF_b_module_power_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_power_canuse DEFAULT (1),
CONSTRAINT PK_b_module_power PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_power_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_power UNIQUE (b_module_id, b_code),
CONSTRAINT CK_b_module_power_canuse CHECK (b_canuse IN (0, 1))
b_xh int NOT NULL CONSTRAINT DF_s_module_power_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_s_module_power_canuse DEFAULT (1),
CONSTRAINT PK_s_module_power PRIMARY KEY (b_id),
CONSTRAINT FK_s_module_power_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT UQ_s_module_power UNIQUE (b_module_id, b_code),
CONSTRAINT CK_s_module_power_canuse CHECK (b_canuse IN (0, 1))
);
CREATE TABLE dbo.b_user_module (
@@ -193,7 +190,7 @@ GO
b_inputdatetime datetime NOT NULL CONSTRAINT DF_b_user_module_inputdatetime DEFAULT (GETDATE()),
CONSTRAINT PK_b_user_module PRIMARY KEY (b_id),
CONSTRAINT FK_b_user_module_user FOREIGN KEY (b_user_id) REFERENCES dbo.b_user (b_id),
CONSTRAINT FK_b_user_module_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT FK_b_user_module_module FOREIGN KEY (b_module_id) REFERENCES dbo.s_module (b_id),
CONSTRAINT FK_b_user_module_inputuser FOREIGN KEY (b_inputuser_id) REFERENCES dbo.b_user (b_id),
CONSTRAINT UQ_b_user_module UNIQUE (b_user_id, b_module_id)
);
@@ -206,7 +203,7 @@ GO
b_inputdatetime datetime NOT NULL CONSTRAINT DF_b_user_power_inputdatetime DEFAULT (GETDATE()),
CONSTRAINT PK_b_user_power PRIMARY KEY (b_id),
CONSTRAINT FK_b_user_power_user FOREIGN KEY (b_user_id) REFERENCES dbo.b_user (b_id),
CONSTRAINT FK_b_user_power_power FOREIGN KEY (b_power_id) REFERENCES dbo.b_module_power (b_id),
CONSTRAINT FK_b_user_power_power FOREIGN KEY (b_power_id) REFERENCES dbo.s_module_power (b_id),
CONSTRAINT FK_b_user_power_inputuser FOREIGN KEY (b_inputuser_id) REFERENCES dbo.b_user (b_id),
CONSTRAINT UQ_b_user_power UNIQUE (b_user_id, b_power_id)
);
@@ -223,11 +220,11 @@ GO
DECLARE @SystemId bigint = 910000000000000001;
DECLARE @MetadataId bigint = 910000000000000002;
INSERT INTO dbo.b_module (b_id, b_code, b_parent_id, b_name, b_i18n, b_module_type, b_route, b_canmenu, b_canuse, b_xh) VALUES
INSERT INTO dbo.s_module (b_id, b_code, b_parent_id, b_name, b_i18n, b_module_type, b_route, b_canmenu, b_canuse, b_xh) VALUES
(@SystemId, 'm_system', NULL, N'系统管理', 'module.m_system', 'directory', NULL, 1, 1, 100),
(@MetadataId, 'm_metadata', @SystemId, N'元数据配置', 'module.m_metadata', 'page', '/system/metadata', 1, 1, 10);
INSERT INTO dbo.b_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse) VALUES
INSERT INTO dbo.s_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse) VALUES
(910000000000000101, @MetadataId, 'create', N'新增', 'power.m_metadata.create', 10, 1),
(910000000000000102, @MetadataId, 'update', N'保存', 'power.m_metadata.update', 20, 1),
(910000000000000103, @MetadataId, 'delete', N'删除', 'power.m_metadata.delete', 30, 1),
@@ -237,7 +234,7 @@ GO
(910000000000000201, @AdminId, @MetadataId, @AdminId);
INSERT INTO dbo.b_user_power (b_id, b_user_id, b_power_id, b_inputuser_id)
SELECT 910000000000000300 + ROW_NUMBER() OVER (ORDER BY b_id), @AdminId, b_id, @AdminId
FROM dbo.b_module_power;
FROM dbo.s_module_power;
EXEC sys.sp_set_session_context @key = N'allow_g3soft', @value = NULL;
EXEC sys.sp_set_session_context @key = N'reset_admin_id', @value = NULL;
@@ -20,7 +20,7 @@ BEGIN TRANSACTION;
-- 系统管理目录(000 脚本播种)
DECLARE @SystemId bigint = (
SELECT TOP (1) b_id FROM dbo.b_module WHERE b_code = N'm_system'
SELECT TOP (1) b_id FROM dbo.s_module WHERE b_code = N'm_system'
);
-- 1. 多语言类型表
@@ -47,11 +47,11 @@ BEGIN TRANSACTION;
END
-- 2. 注册模块与管理员权限(仅在模块不存在时播种)
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_code = N'm_i18n_type')
IF NOT EXISTS (SELECT 1 FROM dbo.s_module WHERE b_code = N'm_i18n_type')
BEGIN
DECLARE @I18nTypeId bigint = 910000000000000003;
INSERT INTO dbo.b_module (
INSERT INTO dbo.s_module (
b_id, b_code, b_parent_id, b_name, b_i18n, b_module_type,
b_route, b_canmenu, b_canuse, b_xh
) VALUES (
@@ -59,7 +59,7 @@ BEGIN TRANSACTION;
'page', N'/system/i18n-type', 1, 1, 20
);
INSERT INTO dbo.b_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse) VALUES
INSERT INTO dbo.s_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse) VALUES
(910000000000000105, @I18nTypeId, 'create', N'新增', 'power.m_i18n_type.create', 10, 1),
(910000000000000106, @I18nTypeId, 'update', N'保存', 'power.m_i18n_type.update', 20, 1),
(910000000000000107, @I18nTypeId, 'delete', N'删除', 'power.m_i18n_type.delete', 30, 1);
@@ -71,7 +71,7 @@ BEGIN TRANSACTION;
INSERT INTO dbo.b_user_power (b_id, b_user_id, b_power_id, b_inputuser_id)
SELECT 910000000000000303 + ROW_NUMBER() OVER (ORDER BY b_id), @AdminId, b_id, @AdminId
FROM dbo.b_module_power
FROM dbo.s_module_power
WHERE b_module_id = @I18nTypeId;
END
END
@@ -5,20 +5,20 @@
- m_system 仅在其不存在时创建;
- m_i18n_type 仅在其父级未指向系统管理目录时才更新。
依赖:b_module 表已存在(由 001_add_i18n_type.sql 或业务库结构保证)。
依赖:s_module 表已存在(由 001_add_i18n_type.sql 或业务库结构保证)。
*/
SET NOCOUNT ON;
BEGIN TRANSACTION;
-- 系统管理目录(若不存在则创建)
DECLARE @SystemId bigint = (SELECT TOP (1) b_id FROM dbo.b_module WHERE b_code = N'm_system');
DECLARE @SystemId bigint = (SELECT TOP (1) b_id FROM dbo.s_module WHERE b_code = N'm_system');
IF @SystemId IS NULL
BEGIN
SET @SystemId = 911000000000000001;
INSERT INTO dbo.b_module (
INSERT INTO dbo.s_module (
b_id, b_code, b_parent_id, b_name, b_i18n, b_module_type,
b_canmenu, b_canuse, b_xh
) VALUES (
@@ -28,7 +28,7 @@ BEGIN TRANSACTION;
END
-- 多语言类型挂到系统管理目录
UPDATE dbo.b_module
UPDATE dbo.s_module
SET b_parent_id = @SystemId
WHERE b_code = N'm_i18n_type'
AND (b_parent_id IS NULL OR b_parent_id <> @SystemId);
@@ -0,0 +1,40 @@
/*
登录日志表 s_log_login:记录每次登录尝试(成功/失败)的客户端环境与结果,用于登录审计。
后端在登录时统一采集 IP、IP 归属地、浏览器/版本、操作系统/版本、设备类型、原始 User-Agent,
并通过通用 saveobjt 接口写入本表;前端通过分页接口只读展示。
表名使用 s_ 前缀以区别于业务模块表(b_)。
可重复执行:通过 sys.tables 存在性判断避免重复建表。
*/
SET NOCOUNT ON;
BEGIN TRANSACTION;
IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE name = N's_log_login')
BEGIN
CREATE TABLE dbo.s_log_login (
b_id bigint NOT NULL,
b_org_id nvarchar(50) NULL,
b_user_id bigint NULL,
b_account nvarchar(50) NULL,
b_login_time datetime NOT NULL CONSTRAINT DF_s_log_login_time DEFAULT (GETDATE()),
b_ip nvarchar(50) NULL,
b_ip_location nvarchar(200) NULL,
b_browser nvarchar(100) NULL,
b_browser_version nvarchar(50) NULL,
b_os nvarchar(100) NULL,
b_os_version nvarchar(50) NULL,
b_device_type nvarchar(20) NULL,
b_user_agent nvarchar(max) NULL,
b_login_result int NOT NULL CONSTRAINT DF_s_log_login_result DEFAULT (0),
b_fail_reason nvarchar(200) NULL,
b_session_id nvarchar(50) NULL,
CONSTRAINT PK_s_log_login PRIMARY KEY (b_id)
);
CREATE INDEX IX_s_log_login_time ON dbo.s_log_login (b_login_time DESC, b_id);
CREATE INDEX IX_s_log_login_account ON dbo.s_log_login (b_account, b_login_time DESC);
CREATE INDEX IX_s_log_login_result ON dbo.s_log_login (b_login_result, b_login_time DESC);
END
COMMIT TRANSACTION;
@@ -0,0 +1,163 @@
/*
将新元数据结构的 b_module* 表无损重命名为 s_module*,与旧系统模块表前缀保持一致。
字段名 b_module_id、b_module_type 以及用户授权表 b_user_module、b_user_power 保持不变。
如果数据库仍存在旧版 dbo.s_module(没有 b_code 字段),脚本会终止,避免覆盖同名旧结构。
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.s_module', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.s_module', N'b_code') IS NULL
THROW 51020, N'检测到旧版 dbo.s_module,无法自动迁移新模块元数据表。', 1;
DECLARE @Tables TABLE (
b_old_name sysname NOT NULL,
b_new_name sysname NOT NULL,
b_xh int NOT NULL
);
INSERT INTO @Tables (b_old_name, b_new_name, b_xh) VALUES
(N'b_module', N's_module', 10),
(N'b_module_field', N's_module_field', 20),
(N'b_module_field_group', N's_module_field_group', 30),
(N'b_module_field_list', N's_module_field_list', 40),
(N'b_module_field_edit', N's_module_field_edit', 50),
(N'b_module_field_query', N's_module_field_query', 60),
(N'b_module_power', N's_module_power', 70);
IF EXISTS (
SELECT 1
FROM @Tables
WHERE OBJECT_ID(N'dbo.' + b_old_name, N'U') IS NOT NULL
AND OBJECT_ID(N'dbo.' + b_new_name, N'U') IS NOT NULL
)
THROW 51021, N'模块新旧表名同时存在,已取消自动重命名。', 1;
DECLARE @OldName sysname;
DECLARE @NewName sysname;
DECLARE @QualifiedName nvarchar(517);
DECLARE table_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT b_old_name, b_new_name
FROM @Tables
ORDER BY b_xh;
OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @OldName, @NewName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF OBJECT_ID(N'dbo.' + @OldName, N'U') IS NOT NULL
BEGIN
SET @QualifiedName = N'dbo.' + QUOTENAME(@OldName);
EXEC sys.sp_rename @objname = @QualifiedName, @newname = @NewName, @objtype = N'OBJECT';
END;
FETCH NEXT FROM table_cursor INTO @OldName, @NewName;
END;
CLOSE table_cursor;
DEALLOCATE table_cursor;
IF OBJECT_ID(N'dbo.s_module', N'U') IS NOT NULL
BEGIN
UPDATE module
SET b_viewtable = CASE
WHEN module.b_viewtable = tables.b_old_name THEN tables.b_new_name
ELSE N'dbo.' + tables.b_new_name
END
FROM dbo.s_module AS module
INNER JOIN @Tables AS tables
ON module.b_viewtable IN (tables.b_old_name, N'dbo.' + tables.b_old_name);
UPDATE module
SET b_savetable = CASE
WHEN module.b_savetable = tables.b_old_name THEN tables.b_new_name
ELSE N'dbo.' + tables.b_new_name
END
FROM dbo.s_module AS module
INNER JOIN @Tables AS tables
ON module.b_savetable IN (tables.b_old_name, N'dbo.' + tables.b_old_name);
END;
DECLARE @ObjectName sysname;
DECLARE @RenamedObjectName sysname;
DECLARE object_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT o.name, REPLACE(o.name, N'b_module', N's_module')
FROM sys.objects AS o
WHERE o.parent_object_id IN (
OBJECT_ID(N'dbo.s_module'),
OBJECT_ID(N'dbo.s_module_field'),
OBJECT_ID(N'dbo.s_module_field_group'),
OBJECT_ID(N'dbo.s_module_field_list'),
OBJECT_ID(N'dbo.s_module_field_edit'),
OBJECT_ID(N'dbo.s_module_field_query'),
OBJECT_ID(N'dbo.s_module_power')
)
AND o.name LIKE N'%b[_]module%'
AND NOT EXISTS (
SELECT 1
FROM sys.objects AS renamed
WHERE renamed.name = REPLACE(o.name, N'b_module', N's_module')
);
OPEN object_cursor;
FETCH NEXT FROM object_cursor INTO @ObjectName, @RenamedObjectName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @QualifiedName = N'dbo.' + QUOTENAME(@ObjectName);
EXEC sys.sp_rename
@objname = @QualifiedName,
@newname = @RenamedObjectName,
@objtype = N'OBJECT';
FETCH NEXT FROM object_cursor INTO @ObjectName, @RenamedObjectName;
END;
CLOSE object_cursor;
DEALLOCATE object_cursor;
DECLARE @TableName sysname;
DECLARE index_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT t.name, i.name, REPLACE(i.name, N'b_module', N's_module')
FROM sys.indexes AS i
INNER JOIN sys.tables AS t ON t.object_id = i.object_id
WHERE t.name IN (
N's_module',
N's_module_field',
N's_module_field_group',
N's_module_field_list',
N's_module_field_edit',
N's_module_field_query',
N's_module_power'
)
AND i.name LIKE N'%b[_]module%'
AND NOT EXISTS (
SELECT 1
FROM sys.indexes AS renamed
WHERE renamed.object_id = i.object_id
AND renamed.name = REPLACE(i.name, N'b_module', N's_module')
);
OPEN index_cursor;
FETCH NEXT FROM index_cursor INTO @TableName, @ObjectName, @RenamedObjectName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @QualifiedName =
N'dbo.' + QUOTENAME(@TableName) + N'.' + QUOTENAME(@ObjectName);
EXEC sys.sp_rename
@objname = @QualifiedName,
@newname = @RenamedObjectName,
@objtype = N'INDEX';
FETCH NEXT FROM index_cursor INTO @TableName, @ObjectName, @RenamedObjectName;
END;
CLOSE index_cursor;
DEALLOCATE index_cursor;
COMMIT TRANSACTION;
+12
View File
@@ -61,6 +61,18 @@
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>3.3.7</version>
</dependency>
<dependency>
<groupId>com.github.ua-parser</groupId>
<artifactId>uap-java</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
@@ -6,6 +6,7 @@ import cn.g3soft.fmsapi.utils.ApiResponse;
import cn.g3soft.fmsapi.utils.ParamUtils;
import cn.g3soft.fmsapi.utils.StringUtils;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +25,8 @@ public class AuthController {
@PostMapping("/login")
public ApiResponse<Map<String, Object>> login(
@RequestBody(required = false) Map<String, Object> request
@RequestBody(required = false) Map<String, Object> request,
HttpServletRequest httpRequest
) throws SQLException {
String orgId = ParamUtils.getString(request, "orgid");
String userId = ParamUtils.getString(request, "userid");
@@ -40,7 +42,8 @@ public class AuthController {
Optional<Map<String, Object>> loginResponse = authService.login(
orgId,
userId,
password
password,
httpRequest
);
if (loginResponse.isEmpty()) {
return ApiResponse.fail(
@@ -3,6 +3,7 @@ package cn.g3soft.fmsapi.service;
import cn.g3soft.fmsapi.utils.DbUtils;
import cn.g3soft.fmsapi.utils.JwtUtils;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
@@ -27,10 +28,14 @@ public class AuthService {
@Resource
private ActiveSessionRegistry activeSessionRegistry;
@Resource
private LoginLogService loginLogService;
public Optional<Map<String, Object>> login(
String orgId,
String userId,
String password
String password,
HttpServletRequest request
) throws SQLException {
String normalizedOrgId = orgId.trim().toUpperCase(Locale.ROOT);
String normalizedUserId = userId.trim();
@@ -40,25 +45,36 @@ public class AuthService {
);
if (users.isEmpty()) {
loginLogService.recordLogin(
normalizedOrgId, normalizedUserId, null,
false, "账号不存在", null, request);
return Optional.empty();
}
Map<String, Object> account = users.getFirst();
Map<String, Object> account = users.get(0);
String storedPassword = getString(account, "b_password");
if (!passwordMatches(storedPassword, password)) {
loginLogService.recordLogin(
normalizedOrgId, normalizedUserId, null,
false, "密码错误", null, request);
return Optional.empty();
}
String accountId = getString(account, "b_account");
long userPrimaryKey = getLong(account, "b_id");
String name = getString(account, "b_name");
String sessionId = UUID.randomUUID().toString();
String token = jwtUtils.generateToken(accountId, normalizedOrgId, sessionId);
activeSessionRegistry.activate(normalizedOrgId, accountId, sessionId);
loginLogService.recordLogin(
normalizedOrgId, accountId, userPrimaryKey,
true, null, sessionId, request);
Map<String, Object> user = new LinkedHashMap<>();
user.put("id", userPrimaryKey);
user.put("account", accountId);
user.put("name", getString(account, "b_name"));
user.put("name", name);
Map<String, Object> result = new LinkedHashMap<>();
result.put("token", token);
@@ -0,0 +1,83 @@
package cn.g3soft.fmsapi.service;
import cn.g3soft.fmsapi.database.OrgContext;
import cn.g3soft.fmsapi.utils.ClientInfo;
import cn.g3soft.fmsapi.utils.ClientInfoExtractor;
import cn.g3soft.fmsapi.utils.snowflake.idgen.IdGenerator;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 登录日志服务:在登录成功或失败时采集客户端信息,并通过通用 saveobjt 机制写入 s_log_login 表。
* 写日志失败不影响登录主流程;机构上下文通过 OrgContext 临时设置并在 finally 中清理。
*/
@Service
public class LoginLogService {
private static final Logger log = LoggerFactory.getLogger(LoginLogService.class);
private final DataSaveService dataSaveService;
private final ClientInfoExtractor clientInfoExtractor;
public LoginLogService(DataSaveService dataSaveService, ClientInfoExtractor clientInfoExtractor) {
this.dataSaveService = dataSaveService;
this.clientInfoExtractor = clientInfoExtractor;
}
public void recordLogin(
String orgId,
String account,
Long userId,
boolean success,
String failReason,
String sessionId,
HttpServletRequest request
) {
if (orgId == null || orgId.isBlank()) {
return;
}
try {
ClientInfo info = clientInfoExtractor.extract(request);
Map<String, Object> row = new LinkedHashMap<>();
row.put("b_id", IdGenerator.nextId());
row.put("b_org_id", orgId);
row.put("b_user_id", userId);
row.put("b_account", account);
row.put("b_login_time", Timestamp.valueOf(LocalDateTime.now()));
row.put("b_ip", info.ip());
row.put("b_ip_location", info.ipLocation());
row.put("b_browser", info.browser());
row.put("b_browser_version", info.browserVersion());
row.put("b_os", info.os());
row.put("b_os_version", info.osVersion());
row.put("b_device_type", info.deviceType());
row.put("b_user_agent", info.userAgent());
row.put("b_login_result", success ? 1 : 0);
row.put("b_fail_reason", failReason);
row.put("b_session_id", sessionId);
Map<String, Object> tableOp = new LinkedHashMap<>();
tableOp.put("table", "s_log_login");
tableOp.put("key_field", "b_id");
tableOp.put("inserts", List.of(row));
OrgContext.setOrgId(orgId);
try {
dataSaveService.save(List.of(tableOp));
} finally {
OrgContext.clear();
}
} catch (Exception e) {
log.error("写入登录日志失败 orgId={} account={}", orgId, account, e);
}
}
}
@@ -0,0 +1,15 @@
package cn.g3soft.fmsapi.utils;
/**
* 登录时采集到的客户端环境信息载体。
*/
public record ClientInfo(
String ip,
String ipLocation,
String browser,
String browserVersion,
String os,
String osVersion,
String deviceType,
String userAgent) {
}
@@ -0,0 +1,110 @@
package cn.g3soft.fmsapi.utils;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ua_parser.Client;
import ua_parser.Parser;
/**
* 组合 IpUtils、IpRegionSearcher 与 uap-java,从 HttpServletRequest 提取客户端环境信息。
*/
@Component
public class ClientInfoExtractor {
private static final Logger log = LoggerFactory.getLogger(ClientInfoExtractor.class);
private final IpRegionSearcher ipRegionSearcher;
// uap-java 的 Parser 加载一次正则表达式后即可安全复用(无状态、线程安全)
private final Parser uaParser = new Parser();
public ClientInfoExtractor(IpRegionSearcher ipRegionSearcher) {
this.ipRegionSearcher = ipRegionSearcher;
}
public ClientInfo extract(HttpServletRequest request) {
if (request == null) {
return new ClientInfo("unknown", "未知", "未知", "", "未知", "", "Unknown", null);
}
String ip = IpUtils.getClientIp(request);
String userAgent = request.getHeader("User-Agent");
String ipLocation = ipRegionSearcher.search(ip);
String browser = "未知";
String browserVersion = "";
String os = "未知";
String osVersion = "";
String deviceType = "Unknown";
if (userAgent != null && !userAgent.isBlank()) {
try {
Client client = uaParser.parse(userAgent);
if (client.userAgent != null) {
browser = orDefault(client.userAgent.family, "未知");
browserVersion = buildVersion(
client.userAgent.major, client.userAgent.minor, client.userAgent.patch);
}
if (client.os != null) {
os = orDefault(client.os.family, "未知");
osVersion = buildVersion(client.os.major, client.os.minor, client.os.patch);
}
if (client.device != null) {
deviceType = deriveDeviceType(client.device.family, userAgent);
}
} catch (Exception e) {
log.warn("User-Agent 解析失败: {}", userAgent, e);
}
}
return new ClientInfo(ip, ipLocation, browser, browserVersion, os, osVersion, deviceType, userAgent);
}
private static String buildVersion(String major, String minor, String patch) {
StringBuilder sb = new StringBuilder();
if (isNotBlank(major)) {
sb.append(major);
}
if (isNotBlank(minor)) {
sb.append('.').append(minor);
}
if (isNotBlank(patch)) {
sb.append('.').append(patch);
}
return sb.toString();
}
private static String deriveDeviceType(String deviceFamily, String userAgent) {
if (deviceFamily == null) {
return "Unknown";
}
String family = deviceFamily.toLowerCase();
if (family.contains("ipad") || family.contains("tablet") || family.contains("kindle")) {
return "Tablet";
}
if (family.contains("spider") || family.contains("bot") || family.contains("crawler")) {
return "Bot";
}
if (family.contains("iphone") || family.contains("android")
|| family.contains("windows phone") || family.contains("phone")) {
return "Mobile";
}
// device.family 通常为 "Other",再依据 UA 关键字推断
String ua = userAgent.toLowerCase();
if (ua.contains("mobile")) {
return "Mobile";
}
if (family.equals("other")) {
return "Desktop";
}
return "Desktop";
}
private static String orDefault(String value, String def) {
return (value == null || value.isBlank()) ? def : value;
}
private static boolean isNotBlank(String s) {
return s != null && !s.isBlank();
}
}
@@ -0,0 +1,114 @@
package cn.g3soft.fmsapi.utils;
import jakarta.annotation.PostConstruct;
import org.lionsoul.ip2region.xdb.LongByteArray;
import org.lionsoul.ip2region.xdb.Searcher;
import org.lionsoul.ip2region.xdb.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
/**
* 基于本地 ip2region xdb 数据库的 IP 归属地查询。
* 启动时将 xdb 文件读入内存,避免每次查询的磁盘 IO。
*/
@Component
public class IpRegionSearcher {
private static final Logger log = LoggerFactory.getLogger(IpRegionSearcher.class);
private Searcher searcher;
@PostConstruct
public void init() {
try (InputStream in = new ClassPathResource("ip2region.xdb").getInputStream()) {
byte[] bytes = in.readAllBytes();
LongByteArray buffer = new LongByteArray();
buffer.append(bytes);
searcher = Searcher.newWithBuffer(Version.IPv4, buffer);
log.info("ip2region Searcher 初始化完成,数据大小 {} 字节", bytes.length);
} catch (IOException e) {
log.error("未找到 classpath 下的 ip2region.xdb,IP 归属地将返回「未知」", e);
searcher = null;
} catch (Exception e) {
log.error("ip2region Searcher 初始化失败,IP 归属地将返回「未知」", e);
searcher = null;
}
}
/**
* 根据 IP 查询归属地,返回格式如 国家|省|市|运营商。
* 内网/保留地址直接返回「内网」;任何异常或数据缺失时返回「未知」,不影响主流程。
*/
public String search(String ip) {
if (ip == null || ip.isBlank()) {
return "未知";
}
if (searcher == null) {
return "未知";
}
if (isInternalIp(ip)) {
return "内网";
}
try {
String region = searcher.search(ip);
return (region == null || region.isBlank()) ? "未知" : region;
} catch (Exception e) {
log.warn("ip2region 查询失败 ip={}", ip, e);
return "未知";
}
}
/**
* 判断是否为内网/保留地址(IPv4 RFC1918、回环、链路本地、未指定地址,以及 IPv6 回环/唯一本地地址)。
*/
private static boolean isInternalIp(String ip) {
if (ip.contains(".")) {
String v4 = ip;
int colon = ip.lastIndexOf(':');
if (colon >= 0 && ip.substring(colon + 1).contains(".")) {
v4 = ip.substring(colon + 1);
}
String[] parts = v4.split("\\.");
if (parts.length != 4) {
return false;
}
int[] o = new int[4];
try {
for (int i = 0; i < 4; i++) {
int n = Integer.parseUnsignedInt(parts[i]);
if (n > 255) {
return false;
}
o[i] = n;
}
} catch (NumberFormatException e) {
return false;
}
if (o[0] == 0) {
return true; // 0.0.0.0/8 未指定
}
if (o[0] == 10) {
return true; // 10.0.0.0/8
}
if (o[0] == 127) {
return true; // 127.0.0.0/8 回环
}
if (o[0] == 169 && o[1] == 254) {
return true; // 169.254.0.0/16 链路本地
}
if (o[0] == 172 && o[1] >= 16 && o[1] <= 31) {
return true; // 172.16.0.0/12
}
return o[0] == 192 && o[1] == 168; // 192.168.0.0/16
}
if (ip.equalsIgnoreCase("::1")) {
return true; // IPv6 回环
}
return ip.startsWith("fe80") || ip.startsWith("fc") || ip.startsWith("fd");
}
}
@@ -0,0 +1,51 @@
package cn.g3soft.fmsapi.utils;
import jakarta.servlet.http.HttpServletRequest;
/**
* 从 HttpServletRequest 中解析客户端真实 IP。
* 获取顺序兼容 Nginx 等反向代理:X-Real-IP → X-Forwarded-For(首个) → 远程地址。
*/
public final class IpUtils {
private static final String UNKNOWN = "unknown";
private IpUtils() {
}
public static String getClientIp(HttpServletRequest request) {
if (request == null) {
return UNKNOWN;
}
String ip = request.getHeader("X-Real-IP");
if (isEffective(ip)) {
return ip.trim();
}
ip = request.getHeader("X-Forwarded-For");
if (isEffective(ip)) {
// X-Forwarded-For 可能包含多个以逗号分隔的 IP,取第一个
return ip.split(",")[0].trim();
}
ip = request.getHeader("Proxy-Client-IP");
if (isEffective(ip)) {
return ip.trim();
}
ip = request.getHeader("WL-Proxy-Client-IP");
if (isEffective(ip)) {
return ip.trim();
}
ip = request.getRemoteAddr();
if (ip == null || ip.isBlank()) {
return UNKNOWN;
}
// 归一化 IPv6 本地回环地址
if ("0:0:0:0:0:0:0:1".equals(ip)) {
ip = "127.0.0.1";
}
return ip.trim();
}
private static boolean isEffective(String ip) {
return ip != null && !ip.isBlank() && !UNKNOWN.equalsIgnoreCase(ip.trim());
}
}
@@ -20,6 +20,7 @@ class AuthServiceTests {
private DbUtils dbUtils;
private JwtUtils jwtUtils;
private ActiveSessionRegistry activeSessionRegistry;
private LoginLogService loginLogService;
private AuthService authService;
@BeforeEach
@@ -27,6 +28,7 @@ class AuthServiceTests {
dbUtils = mock(DbUtils.class);
jwtUtils = mock(JwtUtils.class);
activeSessionRegistry = new ActiveSessionRegistry();
loginLogService = mock(LoginLogService.class);
authService = new AuthService();
ReflectionTestUtils.setField(authService, "dbUtils", dbUtils);
@@ -36,6 +38,7 @@ class AuthServiceTests {
"activeSessionRegistry",
activeSessionRegistry
);
ReflectionTestUtils.setField(authService, "loginLogService", loginLogService);
}
@Test
@@ -56,7 +59,7 @@ class AuthServiceTests {
))
.thenReturn("token");
Optional<Map<String, Object>> result = authService.login("fms", "g3soft", "");
Optional<Map<String, Object>> result = authService.login("fms", "g3soft", "", null);
assertThat(result).isPresent();
assertThat(result.orElseThrow()).containsEntry("token", "token");
@@ -0,0 +1,26 @@
server:
port: 8088
servlet:
context-path: /api
spring:
application:
name: fms-api
fms:
auth:
jwt-secret: "${FMS_JWT_SECRET:fms-api-development-jwt-secret-change-me}"
jwt-expiration: 24h
database:
config-dir: ./config/dbconfigs
pool:
initial-size: 0
min-idle: 0
max-active: 10
max-wait: 5000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
time-between-eviction-runs: 60s
min-evictable-idle-time: 5m
Binary file not shown.
@@ -0,0 +1,44 @@
cn\g3soft\fmsapi\utils\ParamUtils.class
cn\g3soft\fmsapi\utils\JwtUtils.class
cn\g3soft\fmsapi\database\OrgDataSourceFactory.class
cn\g3soft\fmsapi\database\OrgContext.class
cn\g3soft\fmsapi\database\OrgDatabaseProperties$Pool.class
cn\g3soft\fmsapi\FmsApiApplication.class
cn\g3soft\fmsapi\utils\DbUtils$TableMetadata.class
cn\g3soft\fmsapi\utils\snowflake\idgen\IdGenerator.class
cn\g3soft\fmsapi\utils\JwtUtils$TokenClaims.class
cn\g3soft\fmsapi\utils\IpRegionSearcher.class
cn\g3soft\fmsapi\exception\GlobalExceptionHandler.class
cn\g3soft\fmsapi\service\ActiveSessionRegistry.class
cn\g3soft\fmsapi\service\DataSaveService.class
cn\g3soft\fmsapi\service\DataService.class
cn\g3soft\fmsapi\utils\snowflake\contract\IdGeneratorOptions.class
cn\g3soft\fmsapi\config\JwtAuthFilter.class
cn\g3soft\fmsapi\utils\DbUtils$ColumnMetadata.class
cn\g3soft\fmsapi\utils\snowflake\core\SnowWorkerM1.class
cn\g3soft\fmsapi\database\OrgDataSourceManager.class
cn\g3soft\fmsapi\controller\AuthController.class
cn\g3soft\fmsapi\utils\ClientInfo.class
cn\g3soft\fmsapi\utils\snowflake\contract\IIdGenerator.class
cn\g3soft\fmsapi\utils\snowflake\contract\ISnowWorker.class
cn\g3soft\fmsapi\utils\snowflake\contract\OverCostActionArg.class
cn\g3soft\fmsapi\utils\snowflake\idgen\DefaultIdGenerator.class
cn\g3soft\fmsapi\utils\IpUtils.class
cn\g3soft\fmsapi\utils\StringUtils.class
cn\g3soft\fmsapi\utils\DbUtils.class
cn\g3soft\fmsapi\controller\DataController.class
cn\g3soft\fmsapi\database\OrgDatabaseConfigLoader.class
cn\g3soft\fmsapi\exception\SaveObjectException.class
cn\g3soft\fmsapi\service\AuthService.class
cn\g3soft\fmsapi\config\AuthProperties.class
cn\g3soft\fmsapi\database\OrgDatabaseConfig.class
cn\g3soft\fmsapi\database\OrgRoutingDataSource.class
cn\g3soft\fmsapi\exception\BusinessException.class
cn\g3soft\fmsapi\utils\ApiResponse.class
cn\g3soft\fmsapi\utils\snowflake\core\SnowWorkerM2.class
cn\g3soft\fmsapi\service\ActiveSessionRegistry$AccountKey.class
cn\g3soft\fmsapi\utils\DbUtils$PageResult.class
cn\g3soft\fmsapi\config\JacksonConfig.class
cn\g3soft\fmsapi\utils\snowflake\contract\IdGeneratorException.class
cn\g3soft\fmsapi\exception\AuthenticationException.class
cn\g3soft\fmsapi\database\OrgDatabaseProperties.class
@@ -0,0 +1,40 @@
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\config\AuthProperties.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\config\JacksonConfig.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\config\JwtAuthFilter.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\controller\AuthController.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\controller\DataController.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgContext.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgDatabaseConfig.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgDatabaseConfigLoader.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgDatabaseProperties.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgDataSourceFactory.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgDataSourceManager.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\database\OrgRoutingDataSource.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\exception\AuthenticationException.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\exception\BusinessException.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\exception\GlobalExceptionHandler.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\exception\SaveObjectException.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\FmsApiApplication.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\service\ActiveSessionRegistry.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\service\AuthService.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\service\DataSaveService.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\service\DataService.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\service\LoginLogService.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\ApiResponse.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\ClientInfo.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\ClientInfoExtractor.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\DbUtils.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\IpRegionSearcher.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\IpUtils.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\JwtUtils.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\ParamUtils.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\contract\IdGeneratorException.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\contract\IdGeneratorOptions.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\contract\IIdGenerator.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\contract\ISnowWorker.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\contract\OverCostActionArg.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\core\SnowWorkerM1.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\core\SnowWorkerM2.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\idgen\DefaultIdGenerator.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\snowflake\idgen\IdGenerator.java
D:\workspace\code\fms\fms-api\src\main\java\cn\g3soft\fmsapi\utils\StringUtils.java
@@ -0,0 +1,9 @@
cn\g3soft\fmsapi\database\OrgDatabaseConfigLoaderTests.class
cn\g3soft\fmsapi\database\OrgDataSourceFactoryTests.class
cn\g3soft\fmsapi\service\AuthServiceTests.class
cn\g3soft\fmsapi\utils\JwtUtilsTests.class
cn\g3soft\fmsapi\exception\GlobalExceptionHandlerTests.class
cn\g3soft\fmsapi\FmsApiApplicationTests.class
cn\g3soft\fmsapi\service\DataSaveServiceTests$JdbcFixture.class
cn\g3soft\fmsapi\service\ActiveSessionRegistryTests.class
cn\g3soft\fmsapi\service\DataSaveServiceTests.class
@@ -0,0 +1,8 @@
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\database\OrgDatabaseConfigLoaderTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\database\OrgDataSourceFactoryTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\exception\GlobalExceptionHandlerTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\FmsApiApplicationTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\service\ActiveSessionRegistryTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\service\AuthServiceTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\service\DataSaveServiceTests.java
D:\workspace\code\fms\fms-api\src\test\java\cn\g3soft\fmsapi\utils\JwtUtilsTests.java
@@ -0,0 +1,5 @@
# Created at 2026-07-22T21:37:44.167
Boot Manifest-JAR contains absolute paths in classpath 'D:\workspace\code\fms\fms-api\target\test-classes'
Hint: <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
'other' has different root
@@ -0,0 +1,5 @@
# Created at 2026-07-26T13:34:26.389
Boot Manifest-JAR contains absolute paths in classpath 'D:\workspace\code\fms\fms-api\target\test-classes'
Hint: <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
'other' has different root
@@ -0,0 +1,5 @@
# Created at 2026-07-26T13:52:25.410
Boot Manifest-JAR contains absolute paths in classpath 'D:\workspace\code\fms\fms-api\target\test-classes'
Hint: <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
'other' has different root
@@ -0,0 +1,5 @@
# Created at 2026-07-26T13:55:36.766
Boot Manifest-JAR contains absolute paths in classpath 'D:\workspace\code\fms\fms-api\target\test-classes'
Hint: <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
'other' has different root
@@ -0,0 +1,5 @@
# Created at 2026-07-26T21:40:45.645
Boot Manifest-JAR contains absolute paths in classpath 'D:\workspace\code\fms\fms-api\target\test-classes'
Hint: <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
'other' has different root
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.FmsApiApplicationTests" time="1.861" tests="1" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="5600"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="contextLoads" classname="cn.g3soft.fmsapi.FmsApiApplicationTests" time="0.364">
<system-out><![CDATA[21:40:46.503 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [cn.g3soft.fmsapi.FmsApiApplicationTests]: FmsApiApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
21:40:46.557 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration cn.g3soft.fmsapi.FmsApiApplication for test class cn.g3soft.fmsapi.FmsApiApplicationTests
21:40:46.609 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [cn.g3soft.fmsapi.FmsApiApplicationTests]: FmsApiApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
21:40:46.610 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration cn.g3soft.fmsapi.FmsApiApplication for test class cn.g3soft.fmsapi.FmsApiApplicationTests
21:40:46.643 [main] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.1.0)
2026-07-26T21:40:46.821+08:00 INFO 5600 --- [fms-api] [ main] c.g3soft.fmsapi.FmsApiApplicationTests : Starting FmsApiApplicationTests using Java 21.0.11 with PID 5600 (started by admin in D:\workspace\code\fms\fms-api)
2026-07-26T21:40:46.822+08:00 INFO 5600 --- [fms-api] [ main] c.g3soft.fmsapi.FmsApiApplicationTests : No active profile set, falling back to 1 default profile: "default"
2026-07-26T21:40:47.537+08:00 INFO 5600 --- [fms-api] [ main] c.g3soft.fmsapi.utils.IpRegionSearcher : ip2region Searcher 初始化完成,数据大小 11114380 字节
2026-07-26T21:40:47.951+08:00 INFO 5600 --- [fms-api] [ main] c.g3soft.fmsapi.FmsApiApplicationTests : Started FmsApiApplicationTests in 1.314 seconds (process running for 2.253)
]]></system-out>
<system-err><![CDATA[Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
WARNING: A Java agent has been loaded dynamically (C:\Users\admin\.m2\repository\net\bytebuddy\byte-buddy-agent\1.18.10\byte-buddy-agent-1.18.10.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
]]></system-err>
</testcase>
</testsuite>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.database.OrgDataSourceFactoryTests" time="0.185" tests="1" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="sun.os.patch.level" value=""/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
</properties>
<testcase name="databaseConnectionFailureDoesNotRetry" classname="cn.g3soft.fmsapi.database.OrgDataSourceFactoryTests" time="0.185">
<system-out><![CDATA[21:40:46.409 [main] INFO com.alibaba.druid.pool.DruidDataSource -- {dataSource-1,TEST} inited
21:40:46.439 [main] INFO com.alibaba.druid.pool.DruidDataSource -- {dataSource-1} closing ...
21:40:46.440 [main] INFO com.alibaba.druid.pool.DruidDataSource -- {dataSource-1} closed
]]></system-out>
</testcase>
</testsuite>
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.database.OrgDatabaseConfigLoaderTests" time="0.148" tests="1" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="sun.os.patch.level" value=""/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
</properties>
<testcase name="missingConfigFileIsReportedAsInvalidOrgId" classname="cn.g3soft.fmsapi.database.OrgDatabaseConfigLoaderTests" time="0.139"/>
</testsuite>
@@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests" time="0.018" tests="2" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="sun.os.patch.level" value=""/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
</properties>
<testcase name="databaseExceptionReturnsSystemError" classname="cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests" time="0.012">
<system-out><![CDATA[21:40:46.451 [main] ERROR cn.g3soft.fmsapi.exception.GlobalExceptionHandler -- 系统异常,method=POST,uri=/api/auth/login
java.sql.SQLException: connection failed
at cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests.databaseExceptionReturnsSystemError(GlobalExceptionHandlerTests.java:19)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:58)
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$2(InterceptingLauncher.java:57)
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:56)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:125)
at org.apache.maven.surefire.junitplatform.LauncherAdapter.executeWithCancellationToken(LauncherAdapter.java:68)
at org.apache.maven.surefire.junitplatform.LauncherAdapter.execute(LauncherAdapter.java:54)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:203)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:168)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:136)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
]]></system-out>
</testcase>
<testcase name="saveExceptionReturnsOperationLocation" classname="cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests" time="0.004">
<system-out><![CDATA[21:40:46.455 [main] ERROR cn.g3soft.fmsapi.exception.GlobalExceptionHandler -- 保存失败,table=bs_business,action=update,index=2
cn.g3soft.fmsapi.exception.SaveObjectException: 保存失败
at cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests.saveExceptionReturnsOperationLocation(GlobalExceptionHandlerTests.java:32)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:701)
at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:502)
at org.junit.jupiter.engine.support.MethodReflectionUtils.invoke(MethodReflectionUtils.java:45)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:61)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:124)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:163)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:148)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:123)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:99)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:66)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:47)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:39)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:98)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invokeVoid(InterceptingExecutableInvoker.java:71)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$0(TestMethodTestDescriptor.java:219)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:215)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:157)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:176)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:42)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$2(NodeTestTask.java:180)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$1(NodeTestTask.java:166)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$0(NodeTestTask.java:164)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:74)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:163)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:116)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:36)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:52)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:58)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:246)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:218)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:179)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:66)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:157)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:65)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:125)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:58)
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$2(InterceptingLauncher.java:57)
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:56)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:125)
at org.apache.maven.surefire.junitplatform.LauncherAdapter.executeWithCancellationToken(LauncherAdapter.java:68)
at org.apache.maven.surefire.junitplatform.LauncherAdapter.execute(LauncherAdapter.java:54)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:203)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:168)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:136)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: java.sql.SQLException: update failed
... 82 common frames omitted
]]></system-out>
</testcase>
</testsuite>
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.service.ActiveSessionRegistryTests" time="0.002" tests="2" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="5600"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="newerLoginReplacesPreviousSessionForSameAccount" classname="cn.g3soft.fmsapi.service.ActiveSessionRegistryTests" time="0.001"/>
<testcase name="sameUserIdInDifferentOrganizationsHasIndependentSessions" classname="cn.g3soft.fmsapi.service.ActiveSessionRegistryTests" time="0.0"/>
</testsuite>
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.service.AuthServiceTests" time="0.218" tests="1" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="5600"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="hiddenSuperAdministratorCanLoginWithEmptyPassword" classname="cn.g3soft.fmsapi.service.AuthServiceTests" time="0.216"/>
</testsuite>
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.service.DataSaveServiceTests" time="0.453" tests="2" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="5600"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="savesDirectArrayInOneTransactionAndKeepsEmptyString" classname="cn.g3soft.fmsapi.service.DataSaveServiceTests" time="0.435"/>
<testcase name="sqlFailureRollsBackAndReportsOperationLocation" classname="cn.g3soft.fmsapi.service.DataSaveServiceTests" time="0.016"/>
</testsuite>
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.utils.JwtUtilsTests" time="0.098" tests="1" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\2.6\snakLine truncated
<property name="java.vm.vendor" value="Eclipse Adoptium"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="https://adoptium.net/"/>
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 11"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk21\bin"/>
<property name="sun.java.command" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782 2026-07-26T21-40-45_527-jvmRun1 surefire-20260726214045610_1tmp surefire_0-20260726214045610_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\admin\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\admin\.m2\repository\org\apache\logging\log4j\log4j-api\2.25.4\log4j-api-2.25.4.jar;C:\Users\admin\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\admin\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\admin\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\admin\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\admin\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\admin\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\admin\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\admin\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\admin\.m2\repository\org\slf4j\slf4j-api\2.0.18\slf4j-api-2.0.18.jar;C:\Users\admin\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\admin\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\admin\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\admin\.m2\repository\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;C:\Users\admin\.m2\repository\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyamlLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\admin"/>
<property name="user.language" value="zh"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-04-21"/>
<property name="java.home" value="D:\devtool\jdk\jdk21"/>
<property name="file.separator" value="\"/>
<property name="basedir" value="D:\workspace\code\fms\fms-api"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\admin\AppData\Local\Temp\surefire10791345176578591782\surefirebooter-20260726214045610_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21.0.11+10-LTS"/>
<property name="user.name" value="admin"/>
<property name="stdout.encoding" value="GBK"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Temurin-21.0.11+10"/>
<property name="localRepository" value="C:\Users\admin\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://github.com/adoptium/adoptium-support/issues"/>
<property name="java.io.tmpdir" value="C:\Users\admin\AppData\Local\Temp\"/>
<property name="java.version" value="21.0.11"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="5600"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\devtool\conda;D:\devtool\conda\Library\mingw-w64\bin;D:\devtool\conda\Library\usr\bin;D:\devtool\conda\Library\bin;D:\devtool\conda\Scripts;D:\devtool\conda\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\soft\Bandizip;D:\devtool\Git\cmd;D:\devtool\nvm;D:\devtool\nodejs;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools;D:\devtool\jdk\jdk17\bin;D:\devtool\maven\bin;D:\devtool\conda\condabin;D:\devtool\mc;C:\Users\admin\AppData\Local\pnpm\bin;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Eclipse Adoptium"/>
<property name="java.vm.version" value="21.0.11+10-LTS"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="tokenContainsAccountAndSessionClaims" classname="cn.g3soft.fmsapi.utils.JwtUtilsTests" time="0.097"/>
</testsuite>
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.FmsApiApplicationTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.861 s -- in cn.g3soft.fmsapi.FmsApiApplicationTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.database.OrgDataSourceFactoryTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.185 s -- in cn.g3soft.fmsapi.database.OrgDataSourceFactoryTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.database.OrgDatabaseConfigLoaderTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.148 s -- in cn.g3soft.fmsapi.database.OrgDatabaseConfigLoaderTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests
-------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 s -- in cn.g3soft.fmsapi.exception.GlobalExceptionHandlerTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.service.ActiveSessionRegistryTests
-------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in cn.g3soft.fmsapi.service.ActiveSessionRegistryTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.service.AuthServiceTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.218 s -- in cn.g3soft.fmsapi.service.AuthServiceTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.service.DataSaveServiceTests
-------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.453 s -- in cn.g3soft.fmsapi.service.DataSaveServiceTests
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.utils.JwtUtilsTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 s -- in cn.g3soft.fmsapi.utils.JwtUtilsTests
Loaded 100 of 170 files, more files were not shown because too many files have changed in this diff. Show more