20260723173317

This commit is contained in:
oneao committed 2026-07-23 17:33:18 +08:00
1 parent 59b3ccfb1c
commit 5f73b54802
33 files changed
+3064 -2108

No files matched your search

@@ -2,6 +2,9 @@
WARNING: This script removes every user table except dbo.b_user.
Database views are intentionally preserved. Run it only against a selected
organization database after confirming the target connection.
The metadata tables are rebuilt from scratch to match 新数据库结构.md.
Only the b_user table is preserved; every other user table is dropped.
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;
@@ -15,7 +18,7 @@ BEGIN TRANSACTION;
WHERE b_account = N'g3soft' AND b_canuse = 1
);
IF @AdminId IS NULL
THROW 51000, '未找到启用的 g3soft 用户,已取消重置。', 1;
THROW 51000, N'未找到启用的 g3soft 用户,已取消重置。', 1;
EXEC sys.sp_set_session_context @key = N'reset_admin_id', @value = @AdminId;
DECLARE @Sql nvarchar(max) = N'';
@@ -26,7 +29,7 @@ BEGIN TRANSACTION;
FROM sys.foreign_keys
WHERE OBJECT_NAME(parent_object_id) <> N'b_user'
OR OBJECT_NAME(referenced_object_id) <> N'b_user';
IF @Sql <> N'' EXEC sys.sp_executesql @Sql;
IF @Sql <> N'' EXEC sys.sp_executesql @Sql;
SET @Sql = N'';
SELECT @Sql = @Sql + N'DROP TABLE '
@@ -39,7 +42,7 @@ GO
DECLARE @AdminId bigint = TRY_CONVERT(bigint, SESSION_CONTEXT(N'reset_admin_id'));
IF @AdminId IS NULL
THROW 51001, '重置会话缺少管理员 ID。', 1;
THROW 51001, N'重置会话缺少管理员 ID。', 1;
CREATE TABLE dbo.b_module (
b_id bigint NOT NULL,
@@ -69,7 +72,7 @@ GO
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)
CONSTRAINT CK_b_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);
@@ -80,93 +83,75 @@ GO
b_field varchar(50) NOT NULL,
b_name nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
b_field_type varchar(30) NOT NULL,
b_value nvarchar(500) NULL,
b_dict_code varchar(100) NULL,
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),
b_remark nvarchar(500) NULL,
b_inputdatetime datetime NOT NULL CONSTRAINT DF_b_module_field_inputdatetime DEFAULT (GETDATE()),
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_field_type IN ('string', 'text', 'number', 'date', 'datetime', 'boolean', 'select_id', 'select_input')),
CONSTRAINT CK_b_module_field_canuse CHECK (b_canuse IN (0, 1))
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)
);
CREATE INDEX IX_b_module_field_module ON dbo.b_module_field (b_module_id, b_canuse, b_id);
CREATE TABLE dbo.b_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))
);
CREATE INDEX IX_b_module_field_group_module ON dbo.b_module_field_group (b_module_id, b_canuse, b_xh, b_id);
CREATE TABLE dbo.b_module_field_list (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_parent_id bigint NULL,
b_kind varchar(20) 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_width int NULL,
b_sortable int NOT NULL CONSTRAINT DF_b_module_field_list_sortable DEFAULT (0),
b_display_type varchar(30) NULL,
b_canedit int NOT NULL CONSTRAINT DF_b_module_field_list_canedit 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_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.b_module_field_list (b_id),
CONSTRAINT FK_b_module_field_list_field FOREIGN KEY (b_field_id) REFERENCES dbo.b_module_field (b_id),
CONSTRAINT CK_b_module_field_list_kind CHECK (b_kind IN ('group', 'field')),
CONSTRAINT CK_b_module_field_list_shape CHECK (
(b_kind = 'group' AND b_field_id IS NULL AND b_width IS NULL AND b_display_type IS NULL AND b_canedit = 0)
OR (b_kind = 'field' AND b_field_id IS NOT NULL AND b_display_type IS NOT NULL)
),
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_canedit CHECK (b_canedit IN (0, 1)),
CONSTRAINT CK_b_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_parent_id, b_xh, b_id);
CREATE TABLE dbo.b_module_field_edit_group (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_code varchar(100) NOT NULL,
b_title nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
b_xh int NOT NULL CONSTRAINT DF_b_module_field_edit_group_xh DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_field_edit_group_canuse DEFAULT (1),
CONSTRAINT PK_b_module_field_edit_group PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_field_edit_group_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_field_edit_group UNIQUE (b_module_id, b_code),
CONSTRAINT CK_b_module_field_edit_group_canuse CHECK (b_canuse IN (0, 1))
);
CREATE INDEX IX_b_module_field_edit_group_module ON dbo.b_module_field_edit_group (b_module_id, b_canuse, b_xh, b_id);
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 TABLE dbo.b_module_field_edit (
b_id bigint NOT NULL,
b_module_id bigint NOT NULL,
b_field_id bigint NOT NULL,
b_editor varchar(30) NOT NULL,
b_edit_format varchar(100) NULL,
b_editor_options nvarchar(max) 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_placeholder nvarchar(200) NULL,
b_canform int NOT NULL CONSTRAINT DF_b_module_field_edit_canform DEFAULT (1),
b_edit_group varchar(100) NULL,
b_edit_xh int NOT NULL CONSTRAINT DF_b_module_field_edit_xh DEFAULT (0),
b_edit_span int NOT NULL CONSTRAINT DF_b_module_field_edit_span DEFAULT (24),
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)),
CONSTRAINT CK_b_module_field_edit_canform CHECK (b_canform IN (0, 1)),
CONSTRAINT CK_b_module_field_edit_span CHECK (b_edit_span BETWEEN 1 AND 24),
CONSTRAINT CK_b_module_field_edit_options CHECK (b_editor_options IS NULL OR ISJSON(b_editor_options) = 1)
CONSTRAINT CK_b_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_edit_xh, b_id);
CREATE INDEX IX_b_module_field_edit_module ON dbo.b_module_field_edit (b_module_id, b_xh, b_id);
CREATE TABLE dbo.b_module_field_query (
b_id bigint NOT NULL,
@@ -238,26 +223,18 @@ GO
DECLARE @SystemId bigint = 910000000000000001;
DECLARE @MetadataId bigint = 910000000000000002;
DECLARE @I18nId bigint = 910000000000000003;
DECLARE @AuthorizationId bigint = 910000000000000004;
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
(@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),
(@I18nId, 'm_i18n', @SystemId, N'多语言管理', 'module.m_i18n', 'page', '/system/i18n', 1, 1, 20),
(@AuthorizationId, 'm_authorization', @SystemId, N'用户授权', 'module.m_authorization', 'page', '/system/authorization', 1, 1, 30);
(@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
(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),
(910000000000000104, @MetadataId, 'sync', N'同步字段', 'power.m_metadata.sync', 40, 1),
(910000000000000105, @I18nId, 'update', N'保存', 'power.m_i18n.update', 10, 1),
(910000000000000106, @AuthorizationId, 'grant', N'授权', 'power.m_authorization.grant', 10, 1);
(910000000000000104, @MetadataId, 'sync', N'同步字段', 'power.m_metadata.sync', 40, 1);
INSERT INTO dbo.b_user_module (b_id, b_user_id, b_module_id, b_inputuser_id) VALUES
(910000000000000201, @AdminId, @MetadataId, @AdminId),
(910000000000000202, @AdminId, @I18nId, @AdminId),
(910000000000000203, @AdminId, @AuthorizationId, @AdminId);
(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;
@@ -8,11 +8,13 @@ import cn.g3soft.fmsapi.utils.snowflake.idgen.IdGenerator;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -56,8 +58,15 @@ public class DataController {
}
@GetMapping("/nextid")
public ApiResponse<Long> nextId() {
return ApiResponse.success(IdGenerator.nextId());
public ApiResponse<?> nextId(@RequestParam(required = false, defaultValue = "1") int count) {
if (count <= 1) {
return ApiResponse.success(IdGenerator.nextId());
}
List<Long> ids = new ArrayList<>();
for (int i = 0; i < count; i++) {
ids.add(IdGenerator.nextId());
}
return ApiResponse.success(ids);
}
@PostMapping("/describe")
@@ -76,7 +76,7 @@ public class DbUtils {
sql.append(" WHERE ").append(searchCondition.trim());
}
if (hasText(orderBy)) {
sql.append(" ORDER BY ").append(buildOrderBy(orderBy));
sql.append(" ORDER BY ").append(buildPageOrderBy(orderBy));
}
String querySql = sql.toString();