YD_Event.Admin/Database/Migrations/20260805_AddMiniProgramCompetitionTableComments.sql
ltx 25830581d2 feat(api): 完善小程序赛事角色与秩序册检录接口
新增成绩查询、裁判认证及检录员账号管理接口,并统一小程序角色登录与个人中心数据。

检录任务绑定赛事秩序册场次,按项目、组别、场地和场次顺序执行;支持最多三名检录员、分配检录轮次及前序检录校验。

补充检录任务、检录记录、裁判申请实体及四份数据库迁移,包含表字段备注、秩序册绑定和检录序号。
2026-08-07 14:59:15 +08:00

181 lines
8.3 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
小程序角色、裁判报名、检录任务及检录记录数据库备注迁移。
适用:SQL Server
依赖:请先执行 20260804_AddMiniProgramCompetitionRoles.sql
说明:使用 MS_Description 扩展属性,可重复执行;已有备注会更新。
*/
SET NOCOUNT ON;
DECLARE @Comments TABLE
(
SchemaName SYSNAME NOT NULL,
TableName SYSNAME NOT NULL,
ColumnName SYSNAME,
[Description] NVARCHAR(4000) NOT NULL
);
INSERT INTO @Comments (SchemaName, TableName, ColumnName, [Description])
VALUES
/* AppUser 新增角色字段 */
(N'dbo', N'AppUser', N'MiniProgramRole', N'小程序账户角色:1-参赛者,2-裁判,3-检录员;检录员只能由后台添加并绑定赛事'),
/* 裁判执裁报名 */
(N'dbo', N'RefereeApplication', N'', N'小程序裁判执裁报名表'),
(N'dbo', N'RefereeApplication', N'Id', N'主键ID'),
(N'dbo', N'RefereeApplication', N'EventId', N'赛事ID,关联 EventInfo.Id'),
(N'dbo', N'RefereeApplication', N'RefereeUserId', N'裁判小程序用户ID,关联 AppUser.Id'),
(N'dbo', N'RefereeApplication', N'ApplicationStatus', N'执裁报名状态:1-已报名,2-已确认执裁,3-报名未通过,4-已取消'),
(N'dbo', N'RefereeApplication', N'Remark', N'执裁报名备注'),
(N'dbo', N'RefereeApplication', N'Status', N'可用状态:0-启用,1-禁用'),
(N'dbo', N'RefereeApplication', N'DeleteMark', N'软删除标记:0-未删除,1-已删除'),
(N'dbo', N'RefereeApplication', N'CreatedUserId', N'创建人ID'),
(N'dbo', N'RefereeApplication', N'CreatedTime', N'创建时间'),
(N'dbo', N'RefereeApplication', N'UpdatedUserId', N'最后更新人ID'),
(N'dbo', N'RefereeApplication', N'UpdatedTime', N'最后更新时间'),
/* 检录任务 */
(N'dbo', N'CheckinTask', N'', N'检录员赛事绑定及当前检录进度任务表'),
(N'dbo', N'CheckinTask', N'Id', N'主键ID'),
(N'dbo', N'CheckinTask', N'EventId', N'绑定赛事ID,关联 EventInfo.Id'),
(N'dbo', N'CheckinTask', N'CheckerUserId', N'检录员小程序用户ID,关联 AppUser.Id'),
(N'dbo', N'CheckinTask', N'TotalRounds', N'赛事当前有效检录轮次数,由 EventScoreSheet.Round 实时同步'),
(N'dbo', N'CheckinTask', N'CurrentRound', N'当前检录轮次,对应 EventScoreSheet.Round'),
(N'dbo', N'CheckinTask', N'RoundName', N'当前检录轮次显示名称'),
(N'dbo', N'CheckinTask', N'CurrentGroupId', N'当前检录赛事组别ID,关联 EventProjectGroup.Id'),
(N'dbo', N'CheckinTask', N'CurrentGroupName', N'当前检录组别名称'),
(N'dbo', N'CheckinTask', N'GroupOrder', N'当前组别在本轮检录中的顺序'),
(N'dbo', N'CheckinTask', N'TotalGroups', N'当前轮次对应的有效组别总数'),
(N'dbo', N'CheckinTask', N'NextGroupName', N'当前轮次的下一检录组别名称'),
(N'dbo', N'CheckinTask', N'Venue', N'检录场地或检录区域'),
(N'dbo', N'CheckinTask', N'TaskStatus', N'任务状态:0-未开始或已解除绑定,1-进行中,2-已结束'),
(N'dbo', N'CheckinTask', N'Status', N'可用状态:0-启用,1-禁用'),
(N'dbo', N'CheckinTask', N'DeleteMark', N'软删除标记:0-未删除,1-已删除'),
(N'dbo', N'CheckinTask', N'CreatedUserId', N'创建任务的后台用户ID'),
(N'dbo', N'CheckinTask', N'CreatedTime', N'创建时间'),
(N'dbo', N'CheckinTask', N'UpdatedUserId', N'最后更新人ID'),
(N'dbo', N'CheckinTask', N'UpdatedTime', N'最后更新时间'),
/* 检录记录 */
(N'dbo', N'CheckinRecord', N'', N'赛事轮次和组别人员检录记录表'),
(N'dbo', N'CheckinRecord', N'Id', N'主键ID'),
(N'dbo', N'CheckinRecord', N'TaskId', N'检录任务ID,关联 CheckinTask.Id'),
(N'dbo', N'CheckinRecord', N'Round', N'检录轮次,对应任务绑定赛事的 EventScoreSheet.Round'),
(N'dbo', N'CheckinRecord', N'GroupId', N'赛事项目组别ID,关联 EventProjectGroup.Id'),
(N'dbo', N'CheckinRecord', N'RegistrationPersonId', N'报名人员ID,关联 EventRegistrationPerson.Id'),
(N'dbo', N'CheckinRecord', N'CheckerUserId', N'执行检录的检录员用户ID,关联 AppUser.Id'),
(N'dbo', N'CheckinRecord', N'Checked', N'检录状态:0-待检录,1-已检录'),
(N'dbo', N'CheckinRecord', N'CheckedTime', N'完成检录时间;取消检录后为空'),
(N'dbo', N'CheckinRecord', N'DeleteMark', N'软删除标记:0-未删除,1-已删除'),
(N'dbo', N'CheckinRecord', N'CreatedUserId', N'创建人ID,通常为检录员 AppUser.Id'),
(N'dbo', N'CheckinRecord', N'CreatedTime', N'创建时间'),
(N'dbo', N'CheckinRecord', N'UpdatedUserId', N'最后更新人ID'),
(N'dbo', N'CheckinRecord', N'UpdatedTime', N'最后更新时间');
DECLARE
@SchemaName SYSNAME,
@TableName SYSNAME,
@ColumnName SYSNAME,
@Description NVARCHAR(4000),
@ObjectId INT,
@ColumnId INT;
DECLARE CommentCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT SchemaName, TableName, ColumnName, [Description]
FROM @Comments;
OPEN CommentCursor;
FETCH NEXT FROM CommentCursor INTO @SchemaName, @TableName, @ColumnName, @Description;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ObjectId = OBJECT_ID(QUOTENAME(@SchemaName) + N'.' + QUOTENAME(@TableName), N'U');
IF @ObjectId > 0
BEGIN
IF @ColumnName = N''
BEGIN
IF EXISTS
(
SELECT 1
FROM sys.extended_properties
WHERE class = 1
AND major_id = @ObjectId
AND minor_id = 0
AND name = N'MS_Description'
)
BEGIN
EXEC sys.sp_updateextendedproperty
@name = N'MS_Description',
@value = @Description,
@level0type = N'SCHEMA', @level0name = @SchemaName,
@level1type = N'TABLE', @level1name = @TableName;
END
ELSE
BEGIN
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = @Description,
@level0type = N'SCHEMA', @level0name = @SchemaName,
@level1type = N'TABLE', @level1name = @TableName;
END;
END
ELSE
BEGIN
SET @ColumnId = COLUMNPROPERTY(@ObjectId, @ColumnName, 'ColumnId');
IF @ColumnId > 0
BEGIN
IF EXISTS
(
SELECT 1
FROM sys.extended_properties
WHERE class = 1
AND major_id = @ObjectId
AND minor_id = @ColumnId
AND name = N'MS_Description'
)
BEGIN
EXEC sys.sp_updateextendedproperty
@name = N'MS_Description',
@value = @Description,
@level0type = N'SCHEMA', @level0name = @SchemaName,
@level1type = N'TABLE', @level1name = @TableName,
@level2type = N'COLUMN', @level2name = @ColumnName;
END
ELSE
BEGIN
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = @Description,
@level0type = N'SCHEMA', @level0name = @SchemaName,
@level1type = N'TABLE', @level1name = @TableName,
@level2type = N'COLUMN', @level2name = @ColumnName;
END;
END;
END;
END;
FETCH NEXT FROM CommentCursor INTO @SchemaName, @TableName, @ColumnName, @Description;
END;
CLOSE CommentCursor;
DEALLOCATE CommentCursor;
SELECT
s.name AS SchemaName,
t.name AS TableName,
c.name AS ColumnName,
CAST(ep.value AS NVARCHAR(4000)) AS [Description]
FROM sys.extended_properties ep
INNER JOIN sys.tables t
ON ep.class = 1 AND ep.major_id = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
LEFT JOIN sys.columns c
ON c.object_id = t.object_id AND c.column_id = ep.minor_id
WHERE ep.name = N'MS_Description'
AND t.name IN (N'AppUser', N'RefereeApplication', N'CheckinTask', N'CheckinRecord')
AND (t.name <> N'AppUser' OR c.name = N'MiniProgramRole')
ORDER BY t.name, ep.minor_id;