diff --git a/code/fms/FMS业务表设计.md b/code/fms/FMS业务表设计.md
index f0290fe7..ff73ee5b 100644
--- a/code/fms/FMS业务表设计.md
+++ b/code/fms/FMS业务表设计.md
@@ -73,7 +73,7 @@ create table dbo.b_othercompany_partner_type (
b_updated_at datetime2 null
);
-create table dbo.b_othercompany_bmfl (
+create table dbo.b_othercompany_category (
b_id varchar(150) not null primary key,
b_parent_id varchar(150) null,
b_depth int not null default 0,
@@ -88,10 +88,10 @@ create table dbo.b_othercompany_bmfl (
b_updated_at datetime2 null
);
-create index ix_b_othercompany_bmfl_parent
- on dbo.b_othercompany_bmfl (b_parent_id, b_canuse, b_depth, b_xh, b_id);
-create index ix_b_othercompany_bmfl_path
- on dbo.b_othercompany_bmfl (b_path, b_canuse, b_id);
+create index ix_b_othercompany_category_parent
+ on dbo.b_othercompany_category (b_parent_id, b_canuse, b_depth, b_xh, b_id);
+create index ix_b_othercompany_category_path
+ on dbo.b_othercompany_category (b_path, b_canuse, b_id);
-- 注:b_grade 由「其他数据」迁移重建为雪花主键(原为级别编码)
create table dbo.b_grade (
diff --git a/code/fms/FMS新系统核心表结构设计.md b/code/fms/FMS新系统核心表结构设计.md
index 2fb687c9..c62b32db 100644
--- a/code/fms/FMS新系统核心表结构设计.md
+++ b/code/fms/FMS新系统核心表结构设计.md
@@ -993,7 +993,7 @@ create table dbo.bf_files (
mx_fileext varchar(50) null, -- 扩展名(小写、不含点)
mx_mapfilename nvarchar(500) null, -- 访问地址:本地为 {url-prefix}/{org}/{yyyy}/{MM}/{dd}/{uuid}.{ext},OSS 为完整 URL
mx_moduleid varchar(50) null, -- 业务模块编码(s_module.b_id)
- mx_cate_id varchar(50) null, -- 文件分类(bf_files_cateid.b_id)
+ mx_cate_id bigint null, -- 文件分类(bf_files_category.b_id,雪花主键)
mx_xh int not null default 0, -- 排序号(保留;当前实现固定 0,列表按 subid 倒序)
mx_sh tinyint not null default 0, -- 审核标识(保留;当前实现固定 0)
mx_shuser_id varchar(50) null, -- 审核人(保留)
@@ -1011,19 +1011,24 @@ create table dbo.bf_files (
create index ix_bf_files_host
on dbo.bf_files (father, mx_moduleid, mx_cate_id, mx_xh, subid);
--- 文件分类表
-create table dbo.bf_files_cateid (
- b_id varchar(50) not null primary key, -- 分类编码
- b_name nvarchar(50) null, -- 分类名称
- b_files_type varchar(50) null, -- 允许的扩展名(逗号分隔,空 = 不限;保留)
+-- 文件分类表(按模块划分;b_module_id 为空表示跨模块通用分类)
+create table dbo.bf_files_category (
+ b_id bigint not null primary key, -- 主键(雪花,新增行由前端 nextIdApi 生成)
+ b_module_id varchar(50) null, -- 归属模块(s_module.b_id);NULL = 通用分类
+ b_name nvarchar(50) not null, -- 分类名称
+ b_i18n varchar(150) null, -- 多语言资源键(s_i18n.b_key)
+ b_files_type varchar(50) null, -- 允许的扩展名(逗号分隔,空 = 不限;预留)
b_xh int not null default 0, -- 显示顺序
b_canuse tinyint not null default 1, -- 是否启用(0/1)
b_bz nvarchar(200) null, -- 备注
- b_inputuser_id varchar(50) null, -- 创建人
- b_inputdatetime datetime2 null, -- 创建时间
- b_updateuser_id varchar(50) null, -- 最后修改人
- b_updatedatetime datetime2 null -- 最后修改时间
+ b_created_by varchar(50) null, -- 创建人(用户账号)
+ b_created_at datetime2 null, -- 创建时间
+ b_updated_by varchar(50) null, -- 最后修改人
+ b_updated_at datetime2 null -- 最后修改时间
);
+
+create index ix_bf_files_category_module
+ on dbo.bf_files_category (b_module_id, b_canuse, b_xh, b_id);
```
要点:
@@ -1032,6 +1037,8 @@ create table dbo.bf_files_cateid (
- **宿主关联**:`father` 存宿主业务主键(业务表 `b_id`,bigint 雪花),不建外键;删除业务数据时由业务层级联清理附件(先删存储、后删行)。
- **存储地址**:`mx_mapfilename` 即访问地址,前端预览 / 下载直接使用。本地模式写入 `{fms.file.local.url-prefix}/{orgId}/{yyyy}/{MM}/{dd}/{uuid}.{ext}`,物理文件落在 `{fms.file.local.storage-dir}` 下的同路径;OSS 模式写入 g3oss 返回的完整 URL。
- **保留字段**:`mx_sh*`(审核)、`mx_cut*`(缩略图)、`mx_orderid`、`mx_bz`、`mx_xh` 沿用旧库结构,当前实现未使用(写 0 / 空值),保留以兼容历史数据迁移。
+- **分类归属模块**:`bf_files_category.b_module_id` 指定分类所属模块,不填(NULL)为跨模块通用分类;分类树按当前模块过滤(`b_module_id IS NULL OR b_module_id = 当前模块`)。分类主键与 `bf_files.mx_cate_id` 类型保持一致(bigint 雪花)。
+- **风格**:分类表按新版字典表风格(应用层雪花主键、`b_created_*` 审计列、`b_canuse tinyint`);`bf_files` 的 `subid` / `father` / `mx_*` 列名已被前后端实现引用,保持现状。表名 `bf_*` 属于"明确的业务域前缀",符合第 1 节表名规范。
- **旧库遗留**:`bf_files_type`(模块文件类型 / 数量配置)在旧库存在,但新旧系统均未使用,不迁移。
存储配置(`application.yaml`):
diff --git a/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java b/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java
index 565eb37e..520c45a2 100644
--- a/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java
+++ b/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java
@@ -88,7 +88,7 @@ public final class VerifyBusinessMigration {
}
private static void verifyCoreTables(Connection connection) throws Exception {
- for (String table : List.of("b_othercompany", "b_contact", "b_othercompany_bmfl")) {
+ for (String table : List.of("b_othercompany", "b_contact", "b_othercompany_category")) {
if (!tableExists(connection, table)) {
throw new IllegalStateException("Missing core business table: dbo." + table);
}
diff --git a/code/fms/fms-api/src/main/java/cn/g3soft/fmsapi/service/FileService.java b/code/fms/fms-api/src/main/java/cn/g3soft/fmsapi/service/FileService.java
index 39c6f805..7c657118 100644
--- a/code/fms/fms-api/src/main/java/cn/g3soft/fmsapi/service/FileService.java
+++ b/code/fms/fms-api/src/main/java/cn/g3soft/fmsapi/service/FileService.java
@@ -140,7 +140,8 @@ public class FileService {
ps.setString(6, mapfilename);
// 字符串业务键:模块编码 / 分类编码 / 用户账号均按字符串存储
ps.setString(7, moduleId);
- ps.setString(8, cateId);
+ // 分类主键为 bigint 雪花(bf_files_category.b_id),按数字写入
+ ps.setObject(8, toLongOrNull(cateId));
ps.setString(9, userId);
ps.executeUpdate();
}
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/FmsApiApplication.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/FmsApiApplication.class
deleted file mode 100644
index 559592fc..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/FmsApiApplication.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/AuthProperties.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/AuthProperties.class
deleted file mode 100644
index 22cfa4af..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/AuthProperties.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Local.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Local.class
deleted file mode 100644
index 5ac35469..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Local.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Oss.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Oss.class
deleted file mode 100644
index aba3549e..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties$Oss.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties.class
deleted file mode 100644
index 7ca39c05..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/FileStorageProperties.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JacksonConfig.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JacksonConfig.class
deleted file mode 100644
index 37408c3f..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JacksonConfig.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JwtAuthFilter.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JwtAuthFilter.class
deleted file mode 100644
index 95fc0f2f..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/config/JwtAuthFilter.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/AuthController.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/AuthController.class
deleted file mode 100644
index 6c7b72f2..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/AuthController.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/DataController.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/DataController.class
deleted file mode 100644
index 25c4e52f..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/DataController.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/FileController.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/FileController.class
deleted file mode 100644
index cd9ccdb5..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/FileController.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgContext.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgContext.class
deleted file mode 100644
index b441b83e..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgContext.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceFactory.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceFactory.class
deleted file mode 100644
index 73a3db58..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceFactory.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager$PoolEntry.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager$PoolEntry.class
deleted file mode 100644
index c5e35b10..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager$PoolEntry.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager.class
deleted file mode 100644
index 3c371400..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDataSourceManager.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfig.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfig.class
deleted file mode 100644
index 62e91cad..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfig.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.class
deleted file mode 100644
index 126443e6..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigWatcher.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigWatcher.class
deleted file mode 100644
index cfe4f00c..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseConfigWatcher.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties$Pool.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties$Pool.class
deleted file mode 100644
index b5cb3e35..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties$Pool.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties.class
deleted file mode 100644
index 6123a420..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgDatabaseProperties.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgRoutingDataSource.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgRoutingDataSource.class
deleted file mode 100644
index 78d12c4f..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/database/OrgRoutingDataSource.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/AuthenticationException.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/AuthenticationException.class
deleted file mode 100644
index e1560d86..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/AuthenticationException.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/BusinessException.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/BusinessException.class
deleted file mode 100644
index 94af84fa..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/BusinessException.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.class
deleted file mode 100644
index 0eea0492..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/SaveObjectException.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/SaveObjectException.class
deleted file mode 100644
index e523a194..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/exception/SaveObjectException.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry$AccountKey.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry$AccountKey.class
deleted file mode 100644
index 6dbac1f8..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry$AccountKey.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry.class
deleted file mode 100644
index 322ba8eb..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/ActiveSessionRegistry.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/AuthService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/AuthService.class
deleted file mode 100644
index 46d3a22b..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/AuthService.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeFormat.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeFormat.class
deleted file mode 100644
index db35bf62..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeFormat.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class
deleted file mode 100644
index 9b1b0238..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class
deleted file mode 100644
index e8093600..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService.class
deleted file mode 100644
index 17968130..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataService.class
deleted file mode 100644
index 28c8b8c9..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataService.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/FileService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/FileService.class
deleted file mode 100644
index 56a57557..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/FileService.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/LoginLogService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/LoginLogService.class
deleted file mode 100644
index 38e12466..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/LoginLogService.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ApiResponse.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ApiResponse.class
deleted file mode 100644
index f0537e84..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ApiResponse.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfo.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfo.class
deleted file mode 100644
index 0ad5d9dd..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfo.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfoExtractor.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfoExtractor.class
deleted file mode 100644
index fc329abc..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ClientInfoExtractor.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$ColumnMetadata.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$ColumnMetadata.class
deleted file mode 100644
index e064289b..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$ColumnMetadata.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$PageResult.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$PageResult.class
deleted file mode 100644
index d178f86c..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$PageResult.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$TableMetadata.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$TableMetadata.class
deleted file mode 100644
index 02f56571..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils$TableMetadata.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils.class
deleted file mode 100644
index e085f3dc..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/DbUtils.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpRegionSearcher.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpRegionSearcher.class
deleted file mode 100644
index 23cd6142..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpRegionSearcher.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpUtils.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpUtils.class
deleted file mode 100644
index f20a9e5e..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/IpUtils.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils$TokenClaims.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils$TokenClaims.class
deleted file mode 100644
index e8ad6365..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils$TokenClaims.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils.class
deleted file mode 100644
index 6b2812aa..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/JwtUtils.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ParamUtils.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ParamUtils.class
deleted file mode 100644
index 12d7c118..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/ParamUtils.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/StringUtils.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/StringUtils.class
deleted file mode 100644
index b485b135..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/StringUtils.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/UuidV7Generator.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/UuidV7Generator.class
deleted file mode 100644
index aeec4597..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/UuidV7Generator.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IIdGenerator.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IIdGenerator.class
deleted file mode 100644
index 2ea9b922..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IIdGenerator.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/ISnowWorker.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/ISnowWorker.class
deleted file mode 100644
index 9a5ea458..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/ISnowWorker.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorException.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorException.class
deleted file mode 100644
index 39db6908..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorException.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorOptions.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorOptions.class
deleted file mode 100644
index f67aad8a..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/IdGeneratorOptions.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/OverCostActionArg.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/OverCostActionArg.class
deleted file mode 100644
index c6f83b73..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/contract/OverCostActionArg.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM1.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM1.class
deleted file mode 100644
index 06a6e877..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM1.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM2.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM2.class
deleted file mode 100644
index 0d4a11dc..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/core/SnowWorkerM2.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/DefaultIdGenerator.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/DefaultIdGenerator.class
deleted file mode 100644
index 3679d9f8..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/DefaultIdGenerator.class and /dev/null differ
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/IdGenerator.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/IdGenerator.class
deleted file mode 100644
index a289499c..00000000
Binary files a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/utils/snowflake/idgen/IdGenerator.class and /dev/null differ
diff --git a/code/fms/fms-api/tools/migration/rename-impact-out.txt b/code/fms/fms-api/tools/migration/rename-impact-out.txt
new file mode 100644
index 00000000..38409375
--- /dev/null
+++ b/code/fms/fms-api/tools/migration/rename-impact-out.txt
@@ -0,0 +1,29 @@
+=== 1. 视图 / 过程 / 函数中引用 b_othercompany_bmfl 的对象 ===
+name | type_desc
+(共 0 行)
+
+=== 2. s_module 模块配置中的表名引用 ===
+b_id | b_module_type | b_view_table | b_save_table
+(共 0 行)
+
+=== 3. v_b_othercompany 定义(确认是否 join 分类表) ===
+definition
+create view dbo.v_b_othercompany as
+select o.b_id, o.b_ywid, o.b_pycode, o.b_type, o.b_name, o.b_shortname,
+ o.b_linkman, o.b_phone, o.b_addr, o.b_firstlinkdate,
+ o.b_htno, o.b_htdate, o.b_htexpiredate, o.b_black, o.b_canuse,
+ o.b_zl, o.b_tel, o.b_fax, o.b_www, o.b_email,
+ o.b_bankacount, o.b_invaccount, o.b_cate_id,
+ o.b_bz1, o.b_bz2, o.b_bz3, o.b_bz4,
+ o.b_province, o.b_city, o.b_area, o.b_country,
+ o.b_edicode, o.b_showcolor, o.b_type_id, o.b_from_id,
+ o.b_type1_id, o.b_type2_id, o.b_type3_id, o.b_type4_id, o.b_type5_id,
+ o.b_owner_id, ...(截断)
+(共 1 行)
+
+=== 4. 表与索引现状 ===
+index_name | type_desc
+PK__b_otherc__4E29C30D79EECCD3 | CLUSTERED
+ix_b_othercompany_bmfl_parent | NONCLUSTERED
+ix_b_othercompany_bmfl_path | NONCLUSTERED
+(共 3 行)
diff --git a/code/fms/fms-vue/src/components/fms-file/composables/useFileCategory.js b/code/fms/fms-vue/src/components/fms-file/composables/useFileCategory.js
index a8232e7a..c35e49a9 100644
--- a/code/fms/fms-vue/src/components/fms-file/composables/useFileCategory.js
+++ b/code/fms/fms-vue/src/components/fms-file/composables/useFileCategory.js
@@ -2,7 +2,7 @@ import { ref } from 'vue'
import { loadDataApi } from '@/services/api'
/**
- * 文件分类逻辑 —— 加载 bf_files_cateid 扁平表,供 FmsTree 展示(分类为平铺列表,无层级)。
+ * 文件分类逻辑 —— 加载 bf_files_category 扁平表,供 FmsTree 展示(分类为平铺列表,无层级)。
* 「全部分类」虚拟根由 FmsTree 的 showRoot 注入,本组合式函数只负责取数与选中状态。
*/
export function useFileCategory() {
@@ -16,11 +16,7 @@ export function useFileCategory() {
loading.value = true
error.value = null
try {
- const res = await loadDataApi(
- 'bf_files_cateid',
- 'b_canuse = 1',
- 'b_xh ASC, b_id ASC',
- )
+ const res = await loadDataApi('bf_files_category', 'b_canuse = 1', 'b_xh ASC, b_id ASC')
categories.value = res.data || []
} catch (e) {
error.value = e?.message || String(e)
diff --git a/code/fms/fms-vue/src/views/base/othercompany/index.vue b/code/fms/fms-vue/src/views/base/othercompany/index.vue
index 97971e2f..47731883 100644
--- a/code/fms/fms-vue/src/views/base/othercompany/index.vue
+++ b/code/fms/fms-vue/src/views/base/othercompany/index.vue
@@ -2,7 +2,7 @@
/**
* 往来单位(合作伙伴)—— 左侧分类树 + 右侧模块列表。
*
- * 左树是 b_othercompany_bmfl(b_parent_id 是权威关系,b_depth / b_path 为派生字段),
+ * 左树是 b_othercompany_category(b_parent_id 是权威关系,b_depth / b_path 为派生字段),
* 右表由 FmsModuleListPage 按模块 v_b_othercompany 的配置驱动。页面负责三件事:
* 选中分类 → 固定查询条件(含全部下级)、b_cate_id 列显示分类名称、分类树的维护
* (新增 / 修改 / 删除 / 刷新 / 拖拽调层级与顺序)。
@@ -30,7 +30,7 @@ import { usePermissionStore } from '@/stores/permissions'
import { buildTree, collectAllKeys, filterTreeByText, findTreeNode, sortTree } from '@/utils/tree'
const MODULE_CODE = 'v_b_othercompany' // 右侧列表模块
-const CATEGORY_TABLE = 'b_othercompany_bmfl' // 左侧分类树表
+const CATEGORY_TABLE = 'b_othercompany_category' // 左侧分类树表
/** 必须与 FmsTree 的 rootKey 默认值一致 */
const ALL_CATEGORY_KEY = '__fms_tree_root__'
diff --git a/code/fms/fms-vue/tests/views/othercompany.spec.js b/code/fms/fms-vue/tests/views/othercompany.spec.js
index b1282c31..787560f3 100644
--- a/code/fms/fms-vue/tests/views/othercompany.spec.js
+++ b/code/fms/fms-vue/tests/views/othercompany.spec.js
@@ -1,5 +1,5 @@
/**
- * 回归用例:往来单位分类树(b_othercompany_bmfl)的新增 / 修改 / 删除 / 拖拽排序。
+ * 回归用例:往来单位分类树(b_othercompany_category)的新增 / 修改 / 删除 / 拖拽排序。
*
* 1) b_path 为 not null 且无默认值(b_depth / b_xh / b_canuse 才有默认值),新增分类时
* 必须按父级派生 b_depth / b_path 一起写入,否则插入直接失败;
@@ -77,7 +77,7 @@ beforeEach(() => {
Message.warning.mockClear()
modalConfirm.mockReset()
loadDataApi.mockImplementation((view) => {
- if (view === 'b_othercompany_bmfl')
+ if (view === 'b_othercompany_category')
return Promise.resolve({ data: CATEGORIES.map((row) => ({ ...row })) })
return Promise.resolve({ data: [] })
})
@@ -110,7 +110,7 @@ describe('往来单位:新增分类写派生树字段', () => {
await wrapper.vm.onCategorySubmit({ b_id: 'newcat', b_name: '新分类', b_xh: 30 })
await flushPromises()
- const request = lastRequestOf('b_othercompany_bmfl')
+ const request = lastRequestOf('b_othercompany_category')
expect(request.key_field).toBe('b_id')
expect(request.inserts).toHaveLength(1)
expect(request.inserts[0]).toMatchObject({
@@ -131,7 +131,7 @@ describe('往来单位:新增分类写派生树字段', () => {
await wrapper.vm.onCategorySubmit({ b_id: 'child2', b_name: '三级分类', b_xh: 20 })
await flushPromises()
- expect(lastRequestOf('b_othercompany_bmfl').inserts[0]).toMatchObject({
+ expect(lastRequestOf('b_othercompany_category').inserts[0]).toMatchObject({
b_id: 'child2',
b_parent_id: 'root1',
b_depth: 1,
@@ -148,7 +148,7 @@ describe('往来单位:修改分类', () => {
await wrapper.vm.onCategorySubmit({ b_id: 'child1', b_name: '改过的名字', b_xh: 99 })
await flushPromises()
- const request = lastRequestOf('b_othercompany_bmfl')
+ const request = lastRequestOf('b_othercompany_category')
expect(request.inserts).toBeUndefined()
expect(request.updates).toHaveLength(1)
expect(request.updates[0]).toEqual({ b_id: 'child1', b_name: '改过的名字', b_xh: 99 })
@@ -190,7 +190,7 @@ describe('往来单位:删除分类的两条守卫', () => {
await modalConfirm.mock.calls[0][0].onOk()
await flushPromises()
- const request = lastRequestOf('b_othercompany_bmfl')
+ const request = lastRequestOf('b_othercompany_category')
expect(request.deletes).toEqual([{ b_id: 'child1' }])
})
})
diff --git a/code/fms/sql/fms_business_othercompany.sql b/code/fms/sql/fms_business_othercompany.sql
index 00aefc79..9e6010fb 100644
--- a/code/fms/sql/fms_business_othercompany.sql
+++ b/code/fms/sql/fms_business_othercompany.sql
@@ -22,7 +22,7 @@ GO
drop table if exists dbo.b_othercompany_accountbank;
GO
-drop table if exists dbo.b_othercompany_bmfl;
+drop table if exists dbo.b_othercompany_category;
GO
drop table if exists dbo.b_othercompany_partner_type;
@@ -126,7 +126,7 @@ GO
分类树
============================================================================ */
-create table dbo.b_othercompany_bmfl (
+create table dbo.b_othercompany_category (
b_id varchar(150) not null primary key, -- 节点编码(创建后不可改)
b_parent_id varchar(150) null, -- 父节点编码,NULL 表示根节点
b_depth int not null default 0, -- 树层级,根节点为 0
@@ -142,12 +142,12 @@ create table dbo.b_othercompany_bmfl (
);
GO
-create index ix_b_othercompany_bmfl_parent
- on dbo.b_othercompany_bmfl (b_parent_id, b_canuse, b_depth, b_xh, b_id);
+create index ix_b_othercompany_category_parent
+ on dbo.b_othercompany_category (b_parent_id, b_canuse, b_depth, b_xh, b_id);
GO
-create index ix_b_othercompany_bmfl_path
- on dbo.b_othercompany_bmfl (b_path, b_canuse, b_id);
+create index ix_b_othercompany_category_path
+ on dbo.b_othercompany_category (b_path, b_canuse, b_id);
GO
/* ============================================================================
diff --git a/code/fms/sql/fms_files.sql b/code/fms/sql/fms_files.sql
new file mode 100644
index 00000000..bb9f6bce
--- /dev/null
+++ b/code/fms/sql/fms_files.sql
@@ -0,0 +1,70 @@
+/* ============================================================================
+ 文件表:bf_files(文件记录)/ bf_files_category(文件分类)
+ ----------------------------------------------------------------------------
+ 文件统一由文件服务托管:本地模式由后端写盘后落库,OSS 模式由前端取号直传后
+ 回调落库;业务表不存文件二进制,只通过 father 关联宿主业务主键。
+ 主键为应用层雪花(subid),不使用 identity —— OSS 直传链路由前端先取号。
+ 结构说明见《FMS新系统核心表结构设计.md》第 15 节。
+ ============================================================================ */
+
+/* ----------------------------------------------------------------------------
+ 1. 文件分类(先建,被 bf_files.mx_cate_id 引用)
+ ---------------------------------------------------------------------------- */
+
+drop table if exists dbo.bf_files_category;
+GO
+
+create table dbo.bf_files_category (
+ b_id bigint not null primary key, -- 主键(雪花,新增行由前端 nextIdApi 生成)
+ b_module_id varchar(50) null, -- 归属模块(s_module.b_id);NULL = 通用分类
+ b_name nvarchar(50) not null, -- 分类名称
+ b_i18n varchar(150) null, -- 多语言资源键(s_i18n.b_key)
+ b_files_type varchar(50) null, -- 允许的扩展名(逗号分隔,空 = 不限;预留)
+ b_xh int not null default 0, -- 显示顺序
+ b_canuse tinyint not null default 1, -- 是否启用(0/1)
+ b_bz nvarchar(200) null, -- 备注
+ b_created_by varchar(50) null, -- 创建人(用户账号)
+ b_created_at datetime2 null, -- 创建时间
+ b_updated_by varchar(50) null, -- 最后修改人
+ b_updated_at datetime2 null -- 最后修改时间
+);
+GO
+
+create index ix_bf_files_category_module
+ on dbo.bf_files_category (b_module_id, b_canuse, b_xh, b_id);
+GO
+
+/* ----------------------------------------------------------------------------
+ 2. 文件记录
+ ---------------------------------------------------------------------------- */
+
+drop table if exists dbo.bf_files;
+GO
+
+create table dbo.bf_files (
+ subid bigint not null primary key, -- 文件主键(雪花,应用层取号:本地由后端、OSS 直传由前端先取号)
+ father bigint null, -- 宿主业务主键(业务表 b_id),列表按它聚合
+ mx_filename nvarchar(500) null, -- 原始文件名(含扩展名,展示与下载用)
+ mx_filesize varchar(50) null, -- 文件大小(字节,字符串存储)
+ mx_fileext varchar(50) null, -- 扩展名(小写、不含点)
+ mx_mapfilename nvarchar(500) null, -- 访问地址:本地为 {url-prefix}/{org}/{yyyy}/{MM}/{dd}/{uuid}.{ext},OSS 为完整 URL
+ mx_moduleid varchar(50) null, -- 业务模块编码(s_module.b_id)
+ mx_cate_id bigint null, -- 文件分类(bf_files_category.b_id)
+ mx_xh int not null default 0, -- 排序号(保留;当前实现固定 0,列表按 subid 倒序)
+ mx_sh tinyint not null default 0, -- 审核标识(保留;当前实现固定 0)
+ mx_shuser_id varchar(50) null, -- 审核人(保留)
+ mx_shdatetime datetime2 null, -- 审核时间(保留)
+ mx_cutfilename nvarchar(500) null, -- 缩略图地址(保留)
+ mx_cutfilesize varchar(50) null, -- 缩略图大小(保留)
+ mx_orderid varchar(50) null, -- 排序组(保留)
+ mx_bz nvarchar(500) null, -- 备注(保留)
+ mx_inputuser_id varchar(50) null, -- 上传人(用户账号)
+ mx_inputdatetime datetime2 null, -- 上传时间
+ mx_updateuser_id varchar(50) null, -- 最后修改人
+ mx_updatedatetime datetime2 null -- 最后修改时间
+);
+GO
+
+create index ix_bf_files_host
+ on dbo.bf_files (father, mx_moduleid, mx_cate_id, mx_xh, subid);
+GO
diff --git a/code/fms/sql/fms_rename_othercompany_category.sql b/code/fms/sql/fms_rename_othercompany_category.sql
new file mode 100644
index 00000000..d04975d0
--- /dev/null
+++ b/code/fms/sql/fms_rename_othercompany_category.sql
@@ -0,0 +1,18 @@
+/* ============================================================================
+ 分类表改名:b_othercompany_bmfl → b_othercompany_category
+ ----------------------------------------------------------------------------
+ 分类表命名统一为 <域>_category(去掉拼音缩写 bmfl)。
+ 原地改名(sp_rename),数据不动;同步改两个自定义索引名。
+ 已确认库内无视图 / 存储过程 / 模块配置引用旧表名,无需连带重建。
+ ============================================================================ */
+
+exec sp_rename 'dbo.b_othercompany_bmfl', 'b_othercompany_category';
+GO
+
+exec sp_rename 'dbo.b_othercompany_category.ix_b_othercompany_bmfl_parent',
+ 'ix_b_othercompany_category_parent', 'INDEX';
+GO
+
+exec sp_rename 'dbo.b_othercompany_category.ix_b_othercompany_bmfl_path',
+ 'ix_b_othercompany_category_path', 'INDEX';
+GO
diff --git a/code/fms/test.html b/code/fms/test.html
deleted file mode 100644
index e7ea45c3..00000000
--- a/code/fms/test.html
+++ /dev/null
@@ -1,971 +0,0 @@
-```html
-
-
-
-
-
-FMS Advanced Search Demo
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
状态
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 当前条件:
-
-
- 客户 = ABC Logistics
- ×
-
-
-
- 金额 > 10000
- ×
-
-
-
- 日期 ≥ 2026-09-01
- ×
-
-
-
-
-
-
-
-
-
- | 订舱号 |
- 客户 |
- 业务员 |
- 金额 |
- 开船日期 |
- 状态 |
-
-
-
-
-
- | BK202609001 |
- ABC Logistics |
- 张三 |
- 25,800.00 |
- 2026-09-05 |
- 已确认 |
-
-
-
- | BK202609002 |
- XYZ Shipping |
- 李四 |
- 18,600.00 |
- 2026-09-08 |
- 已完成 |
-
-
-
- | BK202609003 |
- ABC Logistics |
- 王五 |
- 12,500.00 |
- 2026-09-12 |
- 已确认 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询方案
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AND
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AND
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- OR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```