/* 小程序角色、裁判执裁报名、检录任务迁移。适用 SQL Server,可重复执行。 */ IF COL_LENGTH('dbo.AppUser', 'MiniProgramRole') IS NULL BEGIN ALTER TABLE dbo.AppUser ADD MiniProgramRole INT NOT NULL CONSTRAINT DF_AppUser_MiniProgramRole DEFAULT (1); END; GO IF OBJECT_ID('dbo.RefereeApplication', 'U') IS NULL BEGIN CREATE TABLE dbo.RefereeApplication ( Id BIGINT NOT NULL CONSTRAINT PK_RefereeApplication PRIMARY KEY, EventId BIGINT NOT NULL, RefereeUserId BIGINT NOT NULL, ApplicationStatus INT NOT NULL CONSTRAINT DF_RefereeApplication_ApplicationStatus DEFAULT (1), Remark NVARCHAR(512) NULL, Status INT NOT NULL CONSTRAINT DF_RefereeApplication_Status DEFAULT (1), DeleteMark BIT NOT NULL CONSTRAINT DF_RefereeApplication_DeleteMark DEFAULT (0), CreatedUserId BIGINT NOT NULL, CreatedTime DATETIME2 NOT NULL, UpdatedUserId BIGINT NULL, UpdatedTime DATETIME2 NULL ); CREATE INDEX IX_RefereeApplication_User ON dbo.RefereeApplication (RefereeUserId, CreatedTime DESC); CREATE UNIQUE INDEX UX_RefereeApplication_Event_User_Active ON dbo.RefereeApplication (EventId, RefereeUserId) WHERE DeleteMark = 0 AND ApplicationStatus <> 4; END; GO IF OBJECT_ID('dbo.CheckinTask', 'U') IS NULL BEGIN CREATE TABLE dbo.CheckinTask ( Id BIGINT NOT NULL CONSTRAINT PK_CheckinTask PRIMARY KEY, EventId BIGINT NOT NULL, CheckerUserId BIGINT NULL, TotalRounds INT NOT NULL CONSTRAINT DF_CheckinTask_TotalRounds DEFAULT (1), CurrentRound INT NOT NULL CONSTRAINT DF_CheckinTask_CurrentRound DEFAULT (1), RoundName NVARCHAR(64) NOT NULL CONSTRAINT DF_CheckinTask_RoundName DEFAULT (N'赛前检录'), CurrentGroupId BIGINT NULL, CurrentGroupName NVARCHAR(128) NOT NULL CONSTRAINT DF_CheckinTask_CurrentGroupName DEFAULT (N''), GroupOrder INT NOT NULL CONSTRAINT DF_CheckinTask_GroupOrder DEFAULT (0), TotalGroups INT NOT NULL CONSTRAINT DF_CheckinTask_TotalGroups DEFAULT (0), NextGroupName NVARCHAR(128) NULL, Venue NVARCHAR(128) NULL, TaskStatus INT NOT NULL CONSTRAINT DF_CheckinTask_TaskStatus DEFAULT (0), Status INT NOT NULL CONSTRAINT DF_CheckinTask_Status DEFAULT (1), DeleteMark BIT NOT NULL CONSTRAINT DF_CheckinTask_DeleteMark DEFAULT (0), CreatedUserId BIGINT NOT NULL, CreatedTime DATETIME2 NOT NULL, UpdatedUserId BIGINT NULL, UpdatedTime DATETIME2 NULL ); CREATE INDEX IX_CheckinTask_Checker_Status ON dbo.CheckinTask (CheckerUserId, TaskStatus, UpdatedTime DESC); END; GO IF OBJECT_ID('dbo.CheckinRecord', 'U') IS NULL BEGIN CREATE TABLE dbo.CheckinRecord ( Id BIGINT NOT NULL CONSTRAINT PK_CheckinRecord PRIMARY KEY, TaskId BIGINT NOT NULL, Round INT NOT NULL, GroupId BIGINT NULL, RegistrationPersonId BIGINT NOT NULL, CheckerUserId BIGINT NOT NULL, Checked BIT NOT NULL CONSTRAINT DF_CheckinRecord_Checked DEFAULT (0), CheckedTime DATETIME2 NULL, DeleteMark BIT NOT NULL CONSTRAINT DF_CheckinRecord_DeleteMark DEFAULT (0), CreatedUserId BIGINT NOT NULL, CreatedTime DATETIME2 NOT NULL, UpdatedUserId BIGINT NULL, UpdatedTime DATETIME2 NULL ); CREATE UNIQUE INDEX UX_CheckinRecord_Task_Round_Person_Active ON dbo.CheckinRecord (TaskId, Round, RegistrationPersonId) WHERE DeleteMark = 0; END; GO