2026-08-04 16:35:47 +08:00
/*
2026-08-30 21:46:05 +08:00
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
YD_Event 二 期 生 产 环 境 部 署 脚 本
2026-09-04 17:15:03 +08:00
版 本 : 3 . 1 | 基 线 提 交 : 25830581 d2add95f2d659e663f3d78b766ce0946
2026-08-30 21:46:05 +08:00
数 据 库 : Microsoft SQL Server 2016 + ( 兼 容 级 别 130 + )
执 行 示 例 :
sqlcmd - S < server > - d < database > - E - b - i Phase2_Production_Deployment . sql
设 计 原 则 : 单 事 务 、 失 败 全 回 滚 、 可 重 复 执 行 、 最 小 权 限 、 执 行 后 强 校 验 。
注 意 : 本 脚 本 不 创 建 SQL Login 、 不 保 存 密 码 , 仅 创 建 数 据 库 角 色 并 授 予 对 象 权 限 。
事 务 内 执 行 顺 序 ( 严 格 按 “ 先 新 增 表 → 后 更 改 表 结 构 → 最 后 插 入 数 据 ” 组 织 , 便 于 维 护 ) :
[ 1 / 9 ] 新 增 表 : 创 建 二 期 19 张 业 务 表 ( 只 引 用 一 期 主 键 , 故 最 先 执 行 )
[ 2 / 9 ] 改 表 结 构 : 为 一 期 已 有 表 补 充 二 期 所 需 列
[ 3 / 9 ] 改 表 结 构 : CHECK 约 束 、 外 键 、 索 引
[ 4 / 9 ] 插 入 数 据 : 计 分 规 则 / 规 则 明 细 / 角 色 / 菜 单 等 种 子 ( 幂 等 : 存 在 则 更 新 , 缺 失 才 插 入 )
[ 5 / 9 ] 编 程 对 象 : 函 数 、 视 图 、 存 储 过 程
[ 6 / 9 ] 权 限 : 最 小 权 限 数 据 库 角 色 与 授 权
[ 7 / 9 ] 后 置 校 验 : 对 象 / 列 / 种 子 / 权 限 强 校 验 , 失 败 整 体 回 滚
[ 8 / 9 ] 部 署 摘 要 : 输 出 本 次 部 署 统 计
[ 9 / 9 ] 提 交 事 务 : 全 部 成 功 后 COMMIT , 出 错 由 CATCH 完 整 回 滚
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2026-08-04 16:35:47 +08:00
* /
2026-08-30 21:46:05 +08:00
SET NOCOUNT ON ;
SET XACT_ABORT ON ;
SET ANSI_NULLS ON ;
SET QUOTED_IDENTIFIER ON ;
BEGIN TRY
BEGIN TRANSACTION ;
DECLARE @ LockResult INT ;
2026-09-04 17:15:03 +08:00
EXEC @ LockResult = sys . sp_getapplock @ Resource = N ' YD_Event_Phase2_Production_Deployment ' , @ LockMode = ' Exclusive ' , @ LockOwner = ' Transaction ' , @ LockTimeout = 10000 ;
2026-08-30 21:46:05 +08:00
IF @ LockResult < 0 THROW 51002 , N ' 无法取得二期部署排他锁,可能有另一个部署正在执行。 ' , 1 ;
2026-09-08 14:07:59 +08:00
/* EventScoreCorrection: 同时支持后台账号与裁判账号发起修正。 */
IF OBJECT_ID ( N ' dbo.EventScoreCorrection ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( N ' dbo.EventScoreCorrection ' , N ' ApplyRefereeId ' ) IS NULL
ALTER TABLE dbo . EventScoreCorrection ADD ApplyRefereeId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.EventScoreCorrection ' , ' U ' ) IS NOT NULL AND EXISTS (
SELECT 1 FROM sys . columns WHERE object_id = OBJECT_ID ( N ' dbo.EventScoreCorrection ' ) AND name = N ' ApplyUserId ' AND is_nullable = 0
)
ALTER TABLE dbo . EventScoreCorrection ALTER COLUMN ApplyUserId BIGINT NULL ;
2026-08-30 21:46:05 +08:00
/* ====================================================================================
[ 1 / 9 ] 新 增 表 · 创 建 二 期 业 务 表 ( 共 19 张 ; IF OBJECT_ID 判 空 , 可 重 复 执 行 )
说 明 : 新 表 外 键 只 引 用 一 期 已 有 表 主 键 ( Id ) , 不 依 赖 [ 2 / 9 ] 新 增 列 , 因 此 置 于 “ 改 表 结 构 ” 之 前 。
表 清 单 ( 按 业 务 域 ) :
裁 判 库 : Referee / RefereeApplication / EventReferee
检 录 : CheckinTask / CheckinRecord
编 排 场 次 : EventVenue / EventSession / EventSessionEntry / EventSessionEntryRematch
评 分 : EventJudgeAssignment / EventJudgeTask / EventJudgeMessage / EventJudgeScoreSheet / EventJudgeScoreDetail
计 分 规 则 : ScoreRule / ScoreRuleItem
成 绩 : EventResultVersion / EventScoreCorrection / EventResultScreenCast
公 共 字 段 : Status ( 0 启 用 / 1 禁 用 ) 、 DeleteMark ( 软 删 除 ) 、 CreatedUserId / CreatedTime 、 UpdatedUserId / UpdatedTime ; 字 段 行 尾 -- 后为中文注释
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [1/9] 新增表:创建二期业务表 ' ;
/* RefereeApplication: 裁判通过小程序报名执裁及审核状态。 */
IF OBJECT_ID ( N ' dbo.[RefereeApplication] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ RefereeApplication ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_RefereeApplication ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id( EventInfo.Id)
[ RefereeUserId ] BIGINT NOT NULL , -- 报名执裁的小程序用户Id( AppUser.Id, 账户角色为裁判)
[ ApplicationStatus ] INT NOT NULL CONSTRAINT [ DF_RefereeApplication_ApplicationStatus ] DEFAULT ( 1 ) , -- 报名状态: 1-处理中(历史数据), 2-报名成功, 3-报名失败, 4-已取消
[ Remark ] NVARCHAR ( 512 ) NULL , -- 备注
[ Status ] INT NOT NULL CONSTRAINT [ DF_RefereeApplication_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_RefereeApplication_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* CheckinTask: 赛事一检、二检、三检任务和当前检录进度。 */
IF OBJECT_ID ( N ' dbo.[CheckinTask] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ CheckinTask ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_CheckinTask ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id( EventInfo.Id)
[ CheckinNo ] INT NOT NULL CONSTRAINT [ DF_CheckinTask_CheckinNo ] DEFAULT ( 1 ) , -- 负责的检次: 1-一检, 2-二检, 3-三检
[ CheckerUserId ] BIGINT NULL , -- 关联检录员用户Id( 尚未绑定检录员时为空)
[ TotalRounds ] INT NOT NULL CONSTRAINT [ DF_CheckinTask_TotalRounds ] DEFAULT ( 1 ) , -- 赛事检录总次数
[ CurrentRound ] INT NOT NULL CONSTRAINT [ DF_CheckinTask_CurrentRound ] DEFAULT ( 1 ) , -- 当前检录轮次( 与CheckinNo保持一致)
[ CurrentSessionKey ] NVARCHAR ( 64 ) NULL , -- 当前秩序册列标识
[ CurrentSessionOrder ] INT NOT NULL CONSTRAINT [ DF_CheckinTask_CurrentSessionOrder ] DEFAULT ( 0 ) , -- 当前秩序册列的出场顺序
[ CurrentSessionName ] NVARCHAR ( 256 ) NULL , -- 当前秩序册列名称
[ CurrentEventProjectId ] BIGINT NULL , -- 当前检录的赛事项目Id
[ CurrentSessionVenue ] NVARCHAR ( 128 ) NULL , -- 当前秩序册列所在场地
[ RoundName ] NVARCHAR ( 64 ) NOT NULL CONSTRAINT [ DF_CheckinTask_RoundName ] DEFAULT ( N ' 赛前检录 ' ) , -- 检次名称( 由CheckinNo转换, 如一检、二检)
[ CurrentGroupId ] BIGINT NULL , -- 当前检录的参赛组别Id( 不限定组别时为空)
[ 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 ) , -- 任务状态: 0-未开始, 1-进行中, 2-已结束
[ Status ] INT NOT NULL CONSTRAINT [ DF_CheckinTask_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_CheckinTask_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* CheckinRecord: 参赛人员逐轮检录结果。 */
IF OBJECT_ID ( N ' dbo.[CheckinRecord] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ CheckinRecord ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_CheckinRecord ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ TaskId ] BIGINT NOT NULL , -- 关联检录任务Id( CheckinTask.Id)
[ Round ] INT NOT NULL , -- 检次( 与检录任务CheckinNo一致)
[ SessionKey ] NVARCHAR ( 64 ) NULL , -- 秩序册列标识
[ SessionOrder ] INT NOT NULL CONSTRAINT [ DF_CheckinRecord_SessionOrder ] DEFAULT ( 0 ) , -- 秩序册列的出场顺序
[ GroupId ] BIGINT NULL , -- 参赛组别Id( 不限定组别时为空)
[ RegistrationPersonId ] BIGINT NOT NULL , -- 关联的报名人员Id
[ CheckerUserId ] BIGINT NOT NULL , -- 执行检录的检录员用户Id
[ Checked ] BIT NOT NULL CONSTRAINT [ DF_CheckinRecord_Checked ] DEFAULT ( 0 ) , -- 是否已检录( 取消检录置为0)
[ CheckedTime ] DATETIME2 ( 3 ) NULL , -- 检录时间(取消检录时置空)
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_CheckinRecord_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* Referee: 裁判实名档案、等级、证书和可执裁角色。 */
IF OBJECT_ID ( N ' dbo.[Referee] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ Referee ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_Referee ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ Name ] NVARCHAR ( 64 ) NOT NULL , -- 裁判姓名
[ Mobile ] NVARCHAR ( 16 ) NOT NULL , -- 联系电话(未删除数据中唯一)
[ AppUserId ] BIGINT NULL , -- 关联小程序用户Id( 未关联小程序账号时为空)
[ ProvinceCode ] NVARCHAR ( 20 ) NOT NULL , -- 所属省份编码
[ ProvinceName ] NVARCHAR ( 64 ) NOT NULL , -- 所属省份名称
[ CityCode ] NVARCHAR ( 20 ) NOT NULL , -- 所属城市编码
[ CityName ] NVARCHAR ( 64 ) NOT NULL , -- 所属城市名称
[ DistrictCode ] NVARCHAR ( 20 ) NOT NULL , -- 所属区县编码
[ DistrictName ] NVARCHAR ( 64 ) NOT NULL , -- 所属区县名称
[ Level ] INT NOT NULL , -- 裁判等级: 1-国际级, 2-国家级, 3-一级, 4-二级, 5-三级
[ CertificateUrl ] NVARCHAR ( 512 ) NOT NULL , -- 裁判证书图片URL
[ Roles ] INT NOT NULL , -- 可执裁角色( 位标记, 可多选, RefereeRole枚举组合)
[ AuditStatus ] INT NOT NULL CONSTRAINT [ DF_Referee_AuditStatus ] DEFAULT ( 0 ) , -- 审核状态( AuditStatus枚举: 待审核/通过/拒绝)
[ AuditRemark ] NVARCHAR ( 512 ) NULL , -- 审核备注
[ AuditUserId ] BIGINT NULL , -- 审核人( 后台系统用户Id)
[ AuditTime ] DATETIME2 ( 3 ) NULL , -- 审核时间
[ Status ] INT NOT NULL CONSTRAINT [ DF_Referee_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_Referee_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventReferee: 赛事与裁判档案的关联关系。 */
IF OBJECT_ID ( N ' dbo.[EventReferee] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventReferee ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventReferee ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ RefereeId ] BIGINT NOT NULL , -- 关联裁判档案Id( Referee.Id)
[ RefereeApplicationId ] BIGINT NULL , -- 关联裁判报名记录Id( 非小程序报名时为空)
[ SourceType ] INT NOT NULL CONSTRAINT [ DF_EventReferee_SourceType ] DEFAULT ( 0 ) , -- 关联来源: 1-后台添加, 2-小程序报名, 3-秩序册导入
[ Status ] INT NOT NULL CONSTRAINT [ DF_EventReferee_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventReferee_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventJudgeAssignment: 场次裁判席位分配。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeAssignment] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeAssignment ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeAssignment ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ SessionId ] BIGINT NOT NULL , -- 关联比赛场次Id( EventSession.Id)
[ EventRefereeId ] BIGINT NOT NULL , -- 关联赛事裁判记录Id( EventReferee.Id)
[ RefereeId ] BIGINT NOT NULL , -- 关联裁判档案Id( 兼容历史查询的冗余字段)
[ JudgeUserId ] BIGINT NULL , -- 关联小程序用户Id( 裁判未注册小程序时为空)
[ JudgeRole ] NVARCHAR ( 32 ) NOT NULL , -- 裁判席位编码( 取自计分规则席位配置, 如T、DP1、P)
[ JudgeRoleType ] NVARCHAR ( 16 ) NULL , -- 裁判角色类别编码( 如DP、DM、DR、P、T)
[ AssignmentStatus ] INT NOT NULL CONSTRAINT [ DF_EventJudgeAssignment_AssignmentStatus ] DEFAULT ( 0 ) , -- 分配状态: 0-草稿, 1-已提交, 2-已替换, 9-已停用
[ SubmittedTime ] DATETIME2 ( 3 ) NULL , -- 提交时间
[ Remark ] NVARCHAR ( 512 ) NULL , -- 备注
[ Status ] INT NOT NULL CONSTRAINT [ DF_EventJudgeAssignment_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeAssignment_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventJudgeTask: 面向裁判端下发的版本化评分任务。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeTask] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeTask ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeTask ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ SessionId ] BIGINT NOT NULL , -- 关联比赛场次Id
[ SessionEntryId ] BIGINT NOT NULL , -- 关联场次出场记录Id
[ JudgeAssignmentId ] BIGINT NOT NULL , -- 关联裁判分配Id
[ EventRefereeId ] BIGINT NOT NULL , -- 关联赛事裁判记录Id
[ RefereeId ] BIGINT NOT NULL , -- 关联裁判档案Id
[ JudgeUserId ] BIGINT NULL , -- 关联小程序用户Id
[ JudgeRole ] NVARCHAR ( 32 ) NOT NULL , -- 裁判席位编码
[ JudgeRoleType ] NVARCHAR ( 16 ) NOT NULL , -- 裁判角色类别编码
[ ScoreRuleId ] BIGINT NOT NULL , -- 关联计分规则Id
[ RuleVersion ] INT NOT NULL CONSTRAINT [ DF_EventJudgeTask_RuleVersion ] DEFAULT ( 1 ) , -- 计分规则版本号
[ TaskSnapshotJson ] NVARCHAR ( MAX ) NOT NULL , -- 任务快照( JSON)
[ TaskType ] INT NOT NULL CONSTRAINT [ DF_EventJudgeTask_TaskType ] DEFAULT ( 0 ) , -- 任务类型: 0-正常打分, 1-成绩修正
[ TaskStatus ] INT NOT NULL CONSTRAINT [ DF_EventJudgeTask_TaskStatus ] DEFAULT ( 0 ) , -- 任务状态: 0-待下发, 10-已下发, 20-已接收, 30-评分中, 40-已提交, 50-需修正, 60-已修正, 80-已拒绝, 90-已作废, 99-已过期
[ TaskVersion ] INT NOT NULL CONSTRAINT [ DF_EventJudgeTask_TaskVersion ] DEFAULT ( 1 ) , -- 任务版本号
[ DispatchedTime ] DATETIME2 ( 3 ) NULL , -- 下发时间
[ AcceptedTime ] DATETIME2 ( 3 ) NULL , -- 接收时间
[ SubmittedTime ] DATETIME2 ( 3 ) NULL , -- 提交时间
[ ExpiresTime ] DATETIME2 ( 3 ) NULL , -- 任务截止时间
[ OriginalTaskId ] BIGINT NULL , -- 来源任务Id( 修正/重发时)
[ RejectReason ] NVARCHAR ( 512 ) NULL , -- 拒绝原因
[ Remark ] NVARCHAR ( 512 ) NULL , -- 备注
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeTask_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventVenue: 赛事比赛场地。 */
IF OBJECT_ID ( N ' dbo.[EventVenue] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventVenue ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventVenue ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ VenueCode ] NVARCHAR ( 32 ) NOT NULL , -- 场地编码( 同一赛事未删除数据中唯一, 如V01)
[ VenueName ] NVARCHAR ( 128 ) NOT NULL , -- 场地名称
[ Status ] INT NOT NULL CONSTRAINT [ DF_EventVenue_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ Sort ] INT NOT NULL CONSTRAINT [ DF_EventVenue_Sort ] DEFAULT ( 0 ) , -- 排序
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventVenue_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventSession: 项目、组别、场地对应的比赛场次。 */
IF OBJECT_ID ( N ' dbo.[EventSession] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventSession ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventSession ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ EventProjectId ] BIGINT NOT NULL , -- 关联赛事项目Id
[ EventProjectGroupId ] BIGINT NULL , -- 关联赛事项目组别Id( 多组别混合时为空)
[ VenueId ] BIGINT NOT NULL , -- 关联比赛场地Id( EventVenue.Id)
[ ScoreRuleId ] BIGINT NOT NULL , -- 关联计分规则Id( 取自项目配置)
[ SessionNo ] NVARCHAR ( 32 ) NOT NULL , -- 场次编号(同一赛事未删除数据中唯一)
[ SessionName ] NVARCHAR ( 128 ) NULL , -- 场次名称
[ StartTime ] DATETIME2 ( 3 ) NULL , -- 场次开始时间
[ EndTime ] DATETIME2 ( 3 ) NULL , -- 场次结束时间
[ CurrentEntryId ] BIGINT NULL , -- 当前出场记录Id
[ SessionStatus ] INT NOT NULL CONSTRAINT [ DF_EventSession_SessionStatus ] DEFAULT ( 0 ) , -- 场次状态: 0-草稿, 10-就绪, 20-检录中, 30-进行中, 40-暂停, 50-待确认, 60-已结束, 90-已取消
[ Version ] INT NOT NULL CONSTRAINT [ DF_EventSession_Version ] DEFAULT ( 1 ) , -- 版本号(场次内容变更时递增)
[ Status ] INT NOT NULL CONSTRAINT [ DF_EventSession_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventSession_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventSessionEntry: 场次出场顺序、状态和重赛标识。 */
IF OBJECT_ID ( N ' dbo.[EventSessionEntry] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventSessionEntry ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventSessionEntry ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ SessionId ] BIGINT NOT NULL , -- 关联比赛场次Id
[ ParticipationRecordId ] BIGINT NULL , -- 关联赛事参赛记录Id( 未匹配到参赛记录时为空)
[ RegistrationItemId ] BIGINT NULL , -- 关联报名项目明细Id
[ SourceType ] INT NOT NULL CONSTRAINT [ DF_EventSessionEntry_SourceType ] DEFAULT ( 0 ) , -- 出场数据来源: 0-报名平台编排, 1-秩序册导入
[ EntryNo ] NVARCHAR ( 32 ) NOT NULL , -- 出场编号(项目序号+场地序号+出场顺序)
[ PlayOrder ] INT NOT NULL , -- 出场顺序(同一场次未删除数据中唯一)
[ EntryStatus ] INT NOT NULL CONSTRAINT [ DF_EventSessionEntry_EntryStatus ] DEFAULT ( 0 ) , -- 出场状态: 0-待出场, 10-已检录, 20-已叫号, 30-进行中, 40-已完成, 80-退赛, 90-取消比赛资格
[ CallTime ] DATETIME2 ( 3 ) NULL , -- 叫号时间
[ StartTime ] DATETIME2 ( 3 ) NULL , -- 开始比赛时间
[ FinishTime ] DATETIME2 ( 3 ) NULL , -- 结束比赛时间
[ IsRematch ] BIT NOT NULL CONSTRAINT [ DF_EventSessionEntry_IsRematch ] DEFAULT ( 0 ) , -- 是否为重赛产生的出场记录
[ RematchFromEntryId ] BIGINT NULL , -- 重赛来源出场记录Id
[ IsVoided ] BIT NOT NULL CONSTRAINT [ DF_EventSessionEntry_IsVoided ] DEFAULT ( 0 ) , -- 成绩是否已作废
[ VoidReason ] NVARCHAR ( 512 ) NULL , -- 成绩作废原因
[ ParticipantName ] NVARCHAR ( 128 ) NOT NULL , -- 参赛人员姓名
[ TeamName ] NVARCHAR ( 128 ) NULL , -- 参赛队伍名称(个人项目为空)
[ GroupName ] NVARCHAR ( 128 ) NOT NULL , -- 参赛组别名称
[ Version ] INT NOT NULL CONSTRAINT [ DF_EventSessionEntry_Version ] DEFAULT ( 1 ) , -- 版本号(出场信息变更时递增)
[ Status ] INT NOT NULL CONSTRAINT [ DF_EventSessionEntry_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventSessionEntry_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventSessionEntryRematch: 重赛申请、安排和完成记录。 */
IF OBJECT_ID ( N ' dbo.[EventSessionEntryRematch] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventSessionEntryRematch ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventSessionEntryRematch ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ EventProjectId ] BIGINT NOT NULL , -- 关联赛事项目Id
[ EventProjectGroupId ] BIGINT NULL , -- 关联赛事项目组别Id
[ OriginalSessionId ] BIGINT NOT NULL , -- 原比赛场次Id
[ OriginalSessionEntryId ] BIGINT NOT NULL , -- 原场次出场记录Id
[ NewSessionId ] BIGINT NULL , -- 重赛场次Id
[ NewSessionEntryId ] BIGINT NULL , -- 重赛出场记录Id
[ ReasonCode ] NVARCHAR ( 64 ) NOT NULL , -- 重赛原因编码
[ RematchReason ] NVARCHAR ( 512 ) NOT NULL , -- 重赛原因说明
[ ApplyUserId ] BIGINT NOT NULL , -- 申请人Id
[ RematchStatus ] INT NOT NULL CONSTRAINT [ DF_EventSessionEntryRematch_RematchStatus ] DEFAULT ( 0 ) , -- 重赛状态: 0-已申请, 10-已安排, 20-已完成, 90-已取消
[ CompletedTime ] DATETIME2 ( 3 ) NULL , -- 完成时间
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventSessionEntryRematch_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventJudgeMessage: 裁判端业务通知与已读状态。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeMessage] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeMessage ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeMessage ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ ReceiverUserId ] BIGINT NOT NULL , -- 接收用户Id
[ RefereeId ] BIGINT NOT NULL , -- 接收裁判Id
[ MessageType ] INT NOT NULL , -- 消息类型: 1-成绩修正提醒, 2-评分任务下发, 3-重赛通知, 9-系统通知
[ Title ] NVARCHAR ( 128 ) NOT NULL , -- 消息标题
[ Content ] NVARCHAR ( 512 ) NOT NULL , -- 消息内容
[ RelationType ] NVARCHAR ( 32 ) NULL , -- 关联业务类型
[ RelationId ] BIGINT NULL , -- 关联业务Id
[ IsRead ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeMessage_IsRead ] DEFAULT ( 0 ) , -- 是否已读
[ ReadTime ] DATETIME2 ( 3 ) NULL , -- 阅读时间
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeMessage_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* ScoreRule: 项目计分规则及裁判席位JSON配置。 */
IF OBJECT_ID ( N ' dbo.[ScoreRule] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ ScoreRule ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_ScoreRule ] PRIMARY KEY , -- 主键Id( 雪花Id)
2026-09-17 10:25:06 +08:00
[ RuleCode ] NVARCHAR ( 64 ) NOT NULL , -- 规则编码( 未删除数据中唯一, 如ROPE_PRESCRIBED/ROPE_PRESCRIBED_SINGLE)
2026-08-30 21:46:05 +08:00
[ RuleName ] NVARCHAR ( 128 ) NOT NULL , -- 规则名称
[ JudgeRoleSchemaJson ] NVARCHAR ( 2000 ) NOT NULL , -- 裁判席位配置( JSON, 按裁判组描述所需角色席位)
[ RuleConfigJson ] NVARCHAR ( 4000 ) NULL , -- 计分参数配置( JSON, 扣分项/权重等扩展参数)
[ RuleVersion ] INT NOT NULL CONSTRAINT [ DF_ScoreRule_RuleVersion ] DEFAULT ( 1 ) , -- 规则版本号
[ Status ] INT NOT NULL CONSTRAINT [ DF_ScoreRule_Status ] DEFAULT ( 0 ) , -- 可用状态: 0-启用, 1-禁用
[ Sort ] INT NOT NULL CONSTRAINT [ DF_ScoreRule_Sort ] DEFAULT ( 0 ) , -- 排序
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_ScoreRule_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* ScoreRuleItem: 计分规则的标准化评分项字典。 */
IF OBJECT_ID ( N ' dbo.[ScoreRuleItem] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ ScoreRuleItem ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_ScoreRuleItem ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ ScoreRuleId ] BIGINT NOT NULL , -- 关联计分规则Id( ScoreRule.Id)
[ JudgeRoleType ] NVARCHAR ( 16 ) NOT NULL , -- 裁判角色类别编码
[ ItemCode ] NVARCHAR ( 64 ) NOT NULL , -- 评分项编码
[ ItemName ] NVARCHAR ( 128 ) NOT NULL , -- 评分项名称
[ ItemType ] INT NOT NULL , -- 评分项类型: 1-难度等级计数, 2-规定元素计数, 3-表现维度, 4-扣分项, 5-取消资格原因, 6-规定赛评分项
[ ParentItemCode ] NVARCHAR ( 64 ) NULL , -- 父级评分项编码
[ UnitValue ] DECIMAL ( 18 , 4 ) NULL , -- 单位分值
[ MinValue ] DECIMAL ( 18 , 4 ) NULL , -- 最小值
[ MaxValue ] DECIMAL ( 18 , 4 ) NULL , -- 最大值
[ StepValue ] DECIMAL ( 18 , 4 ) NULL , -- 录入步长
[ DefaultValue ] DECIMAL ( 18 , 4 ) NULL , -- 默认值
[ CalcMode ] INT NOT NULL CONSTRAINT [ DF_ScoreRuleItem_CalcMode ] DEFAULT ( 0 ) , -- 计算方式: 0-数量× 单位分值累加, 1-直接取录入值, 2-仅记录不参与合计
[ ScoreDimension ] INT NOT NULL CONSTRAINT [ DF_ScoreRuleItem_ScoreDimension ] DEFAULT ( 0 ) , -- 计入得分维度: 0-不计入, 1-难度分, 2-表现分, 3-规定分, 4-扣分
[ IsRequired ] BIT NOT NULL CONSTRAINT [ DF_ScoreRuleItem_IsRequired ] DEFAULT ( 0 ) , -- 是否必填
[ ExtensionJson ] NVARCHAR ( 2000 ) NULL , -- 扩展配置( JSON)
[ Sort ] INT NOT NULL CONSTRAINT [ DF_ScoreRuleItem_Sort ] DEFAULT ( 0 ) , -- 排序
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_ScoreRuleItem_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventJudgeScoreSheet: 裁判提交的版本化评分单主表。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeScoreSheet] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeScoreSheet ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeScoreSheet ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ SessionId ] BIGINT NOT NULL , -- 关联比赛场次Id
[ SessionEntryId ] BIGINT NOT NULL , -- 关联场次出场记录Id
[ JudgeTaskId ] BIGINT NOT NULL , -- 关联裁判评分任务Id
[ JudgeAssignmentId ] BIGINT NOT NULL , -- 关联裁判分配Id
[ RefereeId ] BIGINT NOT NULL , -- 关联裁判档案Id
[ JudgeUserId ] BIGINT NULL , -- 提交用户Id
[ JudgeRole ] NVARCHAR ( 32 ) NOT NULL , -- 裁判席位编码
[ JudgeRoleType ] NVARCHAR ( 16 ) NOT NULL , -- 裁判角色类别编码
[ ScoreRuleId ] BIGINT NOT NULL , -- 关联计分规则Id
[ RuleVersion ] INT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_RuleVersion ] DEFAULT ( 1 ) , -- 计分规则版本号
[ SheetVersion ] INT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_SheetVersion ] DEFAULT ( 1 ) , -- 评分单版本号
[ SheetStatus ] INT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_SheetStatus ] DEFAULT ( 0 ) , -- 评分单状态: 0-草稿, 10-已提交, 20-已确认, 30-已被修正, 90-已作废
[ IsCurrent ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_IsCurrent ] DEFAULT ( 1 ) , -- 是否为当前有效版本
[ DifficultyScore ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_DifficultyScore ] DEFAULT ( 0 ) , -- 难度分
[ PerformanceScore ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_PerformanceScore ] DEFAULT ( 0 ) , -- 表现分
[ RequiredScore ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_RequiredScore ] DEFAULT ( 0 ) , -- 规定分
[ DeductionScore ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_DeductionScore ] DEFAULT ( 0 ) , -- 扣分
[ RequiredCompletedCount ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_RequiredCompletedCount ] DEFAULT ( 0 ) , -- 规定元素完成数量
[ RequiredMissingCount ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_RequiredMissingCount ] DEFAULT ( 0 ) , -- 规定元素缺失数量
[ TotalScore ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_TotalScore ] DEFAULT ( 0 ) , -- 合计得分
[ IsDisqualified ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_IsDisqualified ] DEFAULT ( 0 ) , -- 是否取消比赛资格
[ DisqualifyReasonCode ] NVARCHAR ( 64 ) NULL , -- 取消比赛资格原因编码
[ DisqualifyRemark ] NVARCHAR ( 512 ) NULL , -- 取消比赛资格补充说明
[ CalculationJson ] NVARCHAR ( MAX ) NULL , -- 计算明细( JSON)
[ IdempotencyKey ] NVARCHAR ( 64 ) NOT NULL , -- 提交幂等键
[ SubmittedTime ] DATETIME2 ( 3 ) NULL , -- 提交时间
[ OriginalSheetId ] BIGINT NULL , -- 来源评分单Id( 成绩修正时)
[ CorrectionReason ] NVARCHAR ( 512 ) NULL , -- 修正原因
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreSheet_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
2026-09-08 14:07:59 +08:00
/* EventJudgeScoreAttachment: 评分单记录画板, 按上传版本留档。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeScoreAttachment] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeScoreAttachment ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeScoreAttachment ] PRIMARY KEY ,
[ EventId ] BIGINT NOT NULL ,
[ SessionId ] BIGINT NOT NULL ,
[ SessionEntryId ] BIGINT NOT NULL ,
[ ScoreSheetId ] BIGINT NOT NULL ,
[ JudgeAssignmentId ] BIGINT NOT NULL ,
[ RefereeId ] BIGINT NOT NULL ,
[ AttachmentType ] NVARCHAR ( 32 ) NOT NULL ,
[ FileName ] NVARCHAR ( 128 ) NOT NULL ,
[ FileUrl ] NVARCHAR ( 1000 ) NOT NULL ,
[ FileSize ] BIGINT NOT NULL ,
[ ContentType ] NVARCHAR ( 64 ) NOT NULL ,
[ IdempotencyKey ] NVARCHAR ( 64 ) NOT NULL ,
[ IsCurrent ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreAttachment_IsCurrent ] DEFAULT ( 1 ) ,
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreAttachment_DeleteMark ] DEFAULT ( 0 ) ,
[ CreatedUserId ] BIGINT NOT NULL ,
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL ,
[ UpdatedUserId ] BIGINT NULL ,
[ UpdatedTime ] DATETIME2 ( 3 ) NULL
) ;
END ;
2026-08-30 21:46:05 +08:00
/* EventJudgeScoreDetail: 评分单逐项录入和计算明细。 */
IF OBJECT_ID ( N ' dbo.[EventJudgeScoreDetail] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventJudgeScoreDetail ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventJudgeScoreDetail ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ ScoreSheetId ] BIGINT NOT NULL , -- 关联裁判评分单Id
[ ScoreRuleItemId ] BIGINT NULL , -- 关联计分规则明细Id
[ ItemCode ] NVARCHAR ( 64 ) NOT NULL , -- 评分项编码
[ ItemName ] NVARCHAR ( 128 ) NOT NULL , -- 评分项名称(快照)
[ SubjectCode ] NVARCHAR ( 32 ) NULL , -- 评分对象编码( 如A、B)
[ ItemType ] INT NOT NULL , -- 评分项类型: 1-难度计数, 2-规定元素, 3-表现维度, 4-扣分项, 5-取消资格, 6-规定赛评分项
[ ScoreDimension ] INT NOT NULL , -- 得分维度: 0-不计入, 1-难度分, 2-表现分, 3-规定分, 4-扣分
[ CountValue ] DECIMAL ( 18 , 4 ) NULL , -- 录入数量
[ InputValue ] DECIMAL ( 18 , 4 ) NULL , -- 录入分值
[ UnitValue ] DECIMAL ( 18 , 4 ) NULL , -- 单位分值
[ Subtotal ] DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT [ DF_EventJudgeScoreDetail_Subtotal ] DEFAULT ( 0 ) , -- 本项小计
[ IsAutoGenerated ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreDetail_IsAutoGenerated ] DEFAULT ( 0 ) , -- 是否自动生成
[ ParentItemCode ] NVARCHAR ( 64 ) NULL , -- 来源评分项编码
[ ExtensionJson ] NVARCHAR ( 1000 ) NULL , -- 扩展信息( JSON)
[ Sort ] INT NOT NULL CONSTRAINT [ DF_EventJudgeScoreDetail_Sort ] DEFAULT ( 0 ) , -- 排序
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventJudgeScoreDetail_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventResultVersion: 正式成绩的不可变版本快照。 */
IF OBJECT_ID ( N ' dbo.[EventResultVersion] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventResultVersion ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventResultVersion ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventResultId ] BIGINT NOT NULL , -- 关联赛事成绩Id( EventResult.Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ SessionEntryId ] BIGINT NOT NULL , -- 关联场次出场记录Id
[ ResultVersion ] INT NOT NULL , -- 成绩版本号
[ DifficultyScore ] DECIMAL ( 18 , 4 ) NOT NULL , -- 难度分
[ PerformanceScore ] DECIMAL ( 18 , 4 ) NOT NULL , -- 表现分
[ RequiredScore ] DECIMAL ( 18 , 4 ) NOT NULL , -- 规定分
[ DeductionScore ] DECIMAL ( 18 , 4 ) NOT NULL , -- 扣分
[ TotalScore ] DECIMAL ( 18 , 4 ) NOT NULL , -- 正式总分
[ Rank ] INT NULL , -- 名次
[ IsDisqualified ] BIT NOT NULL , -- 是否取消比赛资格
[ DisqualifyReasonCode ] NVARCHAR ( 64 ) NULL , -- 取消比赛资格原因编码
[ ResultStatus ] INT NOT NULL , -- 成绩状态: 0-计算中, 10-待复核, 20-已确认, 30-已投屏, 40-已更正, 90-已作废
[ SourceType ] INT NOT NULL , -- 版本来源: 0-正常聚合, 1-成绩修正, 2-重赛
[ ScoreCorrectionId ] BIGINT NULL , -- 关联成绩修正申请Id
[ ScoreRuleId ] BIGINT NOT NULL , -- 关联计分规则Id
[ RuleVersion ] INT NOT NULL , -- 计分规则版本号
[ CalculationJson ] NVARCHAR ( MAX ) NULL , -- 聚合计算明细( JSON)
[ Remark ] NVARCHAR ( 512 ) NULL , -- 版本说明
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventResultVersion_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventScoreCorrection: 成绩修正申请及审批闭环。 */
IF OBJECT_ID ( N ' dbo.[EventScoreCorrection] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventScoreCorrection ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventScoreCorrection ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ SessionId ] BIGINT NOT NULL , -- 关联比赛场次Id
[ SessionEntryId ] BIGINT NOT NULL , -- 关联场次出场记录Id
[ OriginalScoreSheetId ] BIGINT NOT NULL , -- 被修正的原评分单Id
[ JudgeAssignmentId ] BIGINT NOT NULL , -- 关联裁判分配Id
[ JudgeRole ] NVARCHAR ( 32 ) NOT NULL , -- 裁判席位编码
[ CorrectionTaskId ] BIGINT NULL , -- 修正任务Id
[ NewScoreSheetId ] BIGINT NULL , -- 修正完成后产生的新评分单Id
2026-09-08 14:07:59 +08:00
[ ApplyUserId ] BIGINT NULL , -- 后台申请人Id( SysUser) , 裁判端申请时为空
[ ApplyRefereeId ] BIGINT NULL , -- 裁判端申请人Id( Referee) , 后台发起时为空
2026-08-30 21:46:05 +08:00
[ ApplyReason ] NVARCHAR ( 512 ) NOT NULL , -- 申请修正原因
[ ApproveUserId ] BIGINT NULL , -- 审批人Id
[ ApproveRemark ] NVARCHAR ( 512 ) NULL , -- 审批意见
[ ApproveTime ] DATETIME2 ( 3 ) NULL , -- 审批时间
[ CorrectionStatus ] INT NOT NULL CONSTRAINT [ DF_EventScoreCorrection_CorrectionStatus ] DEFAULT ( 0 ) , -- 修正状态: 0-已申请, 10-已批准, 20-已拒绝, 30-裁判修改中, 40-已完成, 90-已取消
[ CompletedTime ] DATETIME2 ( 3 ) NULL , -- 完成时间
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventScoreCorrection_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* EventResultScreenCast: 成绩投屏载荷、发布与撤回审计。 */
IF OBJECT_ID ( N ' dbo.[EventResultScreenCast] ' , ' U ' ) IS NULL
BEGIN
CREATE TABLE dbo . [ EventResultScreenCast ] (
[ Id ] BIGINT NOT NULL CONSTRAINT [ PK_EventResultScreenCast ] PRIMARY KEY , -- 主键Id( 雪花Id)
[ EventId ] BIGINT NOT NULL , -- 关联赛事Id
[ CastType ] INT NOT NULL , -- 投屏类型: 1-成绩, 2-排名
[ VenueId ] BIGINT NULL , -- 投屏场地Id
[ EventProjectId ] BIGINT NULL , -- 关联赛事项目Id
[ EventProjectGroupId ] BIGINT NULL , -- 关联赛事项目组别Id
[ SessionId ] BIGINT NULL , -- 关联比赛场次Id
[ SessionEntryId ] BIGINT NULL , -- 关联场次出场记录Id
[ EventResultId ] BIGINT NULL , -- 关联赛事成绩Id
[ ResultVersion ] INT NULL , -- 投屏时的成绩版本号
[ PayloadJson ] NVARCHAR ( MAX ) NOT NULL , -- 投屏内容快照( JSON)
[ CastStatus ] INT NOT NULL CONSTRAINT [ DF_EventResultScreenCast_CastStatus ] DEFAULT ( 0 ) , -- 投屏状态: 0-已投出, 10-已撤回, 20-已被新投屏替换
[ CastTime ] DATETIME2 ( 3 ) NOT NULL , -- 投屏时间
[ RevokedTime ] DATETIME2 ( 3 ) NULL , -- 撤回时间
[ RevokedUserId ] BIGINT NULL , -- 撤回人Id
[ Remark ] NVARCHAR ( 512 ) NULL , -- 备注
[ DeleteMark ] BIT NOT NULL CONSTRAINT [ DF_EventResultScreenCast_DeleteMark ] DEFAULT ( 0 ) , -- 软删除标记: 0-正常, 1-已删除
[ CreatedUserId ] BIGINT NOT NULL , -- 创建人用户Id
[ CreatedTime ] DATETIME2 ( 3 ) NOT NULL , -- 创建时间( UTC)
[ UpdatedUserId ] BIGINT NULL , -- 最后更新人用户Id( 未更新过为空)
[ UpdatedTime ] DATETIME2 ( 3 ) NULL -- 最后更新时间( UTC, 未更新过为空)
) ;
END ;
/* ====================================================================================
[ 2 / 9 ] 改 表 结 构 · 扩 展 一 期 已 有 表 ( IF COL_LENGTH 判 空 , 列 已 存 在 则 跳 过 , 可 重 复 执 行 )
按 目 标 表 分 组 : AppUser / Referee / Merchant / MerchantCertification / CertificateTemplate /
CertificatePlaceholder / EventInfo / EventRegistrationLimit / Project / SysUser / EventResult
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [2/9] 改表结构:扩展一期表新增列 ' ;
/* AppUser 小程序用户:角色身份 MiniProgramRole, 1-参赛者 2-裁判 3-检录员(独立于报名人员类型 PersonType) , 默认1 */
IF COL_LENGTH ( ' dbo.AppUser ' , ' MiniProgramRole ' ) IS NULL ALTER TABLE dbo . AppUser ADD MiniProgramRole INT NOT NULL CONSTRAINT DF_AppUser_MiniProgramRole DEFAULT ( 1 ) WITH VALUES ; -- 小程序角色身份: 1-参赛者, 2-裁判, 3-检录员( 独立于报名人员类型PersonType) , 默认1
IF COL_LENGTH ( ' dbo.AppUser ' , ' AuditUserId ' ) IS NULL ALTER TABLE dbo . AppUser ADD AuditUserId BIGINT NULL ;
IF COL_LENGTH ( ' dbo.AppUser ' , ' AuditTime ' ) IS NULL ALTER TABLE dbo . AppUser ADD AuditTime DATETIME NULL ;
/* 审核留痕:裁判、商户及商户认证 */
IF COL_LENGTH ( ' dbo.Referee ' , ' AuditUserId ' ) IS NULL ALTER TABLE dbo . Referee ADD AuditUserId BIGINT NULL ;
IF COL_LENGTH ( ' dbo.Referee ' , ' AuditTime ' ) IS NULL ALTER TABLE dbo . Referee ADD AuditTime DATETIME2 ( 3 ) NULL ;
IF OBJECT_ID ( N ' dbo.MerchantCertification ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.MerchantCertification ' , ' AuditUserId ' ) IS NULL ALTER TABLE dbo . MerchantCertification ADD AuditUserId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.MerchantCertification ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.MerchantCertification ' , ' AuditTime ' ) IS NULL ALTER TABLE dbo . MerchantCertification ADD AuditTime DATETIME NULL ;
IF OBJECT_ID ( N ' dbo.Merchant ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.Merchant ' , ' AuditUserId ' ) IS NULL ALTER TABLE dbo . Merchant ADD AuditUserId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.Merchant ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.Merchant ' , ' AuditTime ' ) IS NULL ALTER TABLE dbo . Merchant ADD AuditTime DATETIME NULL ;
IF OBJECT_ID ( N ' dbo.Merchant ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.Merchant ' , ' AuditStatus ' ) IS NOT NULL
BEGIN
EXEC sys . sp_executesql N ' UPDATE dbo.Merchant SET AuditStatus=1 WHERE AuditStatus IS NULL; ' ;
EXEC sys . sp_executesql N ' ALTER TABLE dbo.Merchant ALTER COLUMN AuditStatus INT NOT NULL; ' ;
END ;
/* 证书模板与占位符通用字段 */
IF OBJECT_ID ( N ' dbo.CertificateTemplate ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificateTemplate ' , ' UpdatedUserId ' ) IS NULL ALTER TABLE dbo . CertificateTemplate ADD UpdatedUserId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.CertificateTemplate ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificateTemplate ' , ' UpdatedTime ' ) IS NULL ALTER TABLE dbo . CertificateTemplate ADD UpdatedTime DATETIME NULL ;
IF OBJECT_ID ( N ' dbo.CertificatePlaceholder ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificatePlaceholder ' , ' CreatedUserId ' ) IS NULL ALTER TABLE dbo . CertificatePlaceholder ADD CreatedUserId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.CertificatePlaceholder ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificatePlaceholder ' , ' CreatedTime ' ) IS NULL ALTER TABLE dbo . CertificatePlaceholder ADD CreatedTime DATETIME NULL ;
IF OBJECT_ID ( N ' dbo.CertificatePlaceholder ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificatePlaceholder ' , ' UpdatedUserId ' ) IS NULL ALTER TABLE dbo . CertificatePlaceholder ADD UpdatedUserId BIGINT NULL ;
IF OBJECT_ID ( N ' dbo.CertificatePlaceholder ' , ' U ' ) IS NOT NULL AND COL_LENGTH ( ' dbo.CertificatePlaceholder ' , ' UpdatedTime ' ) IS NULL ALTER TABLE dbo . CertificatePlaceholder ADD UpdatedTime DATETIME NULL ;
IF OBJECT_ID ( N ' dbo.CertificatePlaceholder ' , ' U ' ) IS NOT NULL
BEGIN
IF OBJECT_ID ( N ' dbo.CertificateTemplate ' , ' U ' ) IS NOT NULL
EXEC sys . sp_executesql N ' UPDATE p SET CreatedUserId=COALESCE(p.CreatedUserId,t.CreatedUserId,0),CreatedTime=COALESCE(p.CreatedTime,t.CreatedTime,GETDATE()) FROM dbo.CertificatePlaceholder p LEFT JOIN dbo.CertificateTemplate t ON t.Id=p.TemplateId WHERE p.CreatedUserId IS NULL OR p.CreatedTime IS NULL; ' ;
ELSE
EXEC sys . sp_executesql N ' UPDATE dbo.CertificatePlaceholder SET CreatedUserId=COALESCE(CreatedUserId,0),CreatedTime=COALESCE(CreatedTime,GETDATE()) WHERE CreatedUserId IS NULL OR CreatedTime IS NULL; ' ;
EXEC sys . sp_executesql N ' ALTER TABLE dbo.CertificatePlaceholder ALTER COLUMN CreatedUserId BIGINT NOT NULL; ' ;
EXEC sys . sp_executesql N ' ALTER TABLE dbo.CertificatePlaceholder ALTER COLUMN CreatedTime DATETIME NOT NULL; ' ;
END ;
/* EventInfo 赛事:裁判报名邀请码 RefereeRegistrationCode */
IF COL_LENGTH ( ' dbo.EventInfo ' , ' RefereeRegistrationCode ' ) IS NULL ALTER TABLE dbo . EventInfo ADD RefereeRegistrationCode NVARCHAR ( 32 ) NULL ; -- 裁判报名邀请码
/* EventRegistrationLimit 报名限额:裁判名额 RefereeLimit, 默认0 */
IF COL_LENGTH ( ' dbo.EventRegistrationLimit ' , ' RefereeLimit ' ) IS NULL ALTER TABLE dbo . EventRegistrationLimit ADD RefereeLimit INT NOT NULL CONSTRAINT DF_EventRegistrationLimit_RefereeLimit DEFAULT ( 0 ) WITH VALUES ; -- 裁判名额限制( 默认0)
/* Project 项目:绑定计分规则 ScoreRuleId -> ScoreRule.Id */
IF COL_LENGTH ( ' dbo.Project ' , ' ScoreRuleId ' ) IS NULL ALTER TABLE dbo . Project ADD ScoreRuleId BIGINT NULL ; -- 项目绑定的计分规则Id( ScoreRule.Id)
/* SysUser 扩展为“单位账号”: UnitName 单位名称; UnitPlatform 所属平台 0-系统用户 1-报名平台 2-打分系统, 默认0 */
IF COL_LENGTH ( ' dbo.SysUser ' , ' UnitName ' ) IS NULL ALTER TABLE dbo . SysUser ADD UnitName NVARCHAR ( 128 ) NULL ; -- 单位名称(单位账号扩展)
IF COL_LENGTH ( ' dbo.SysUser ' , ' UnitPlatform ' ) IS NULL ALTER TABLE dbo . SysUser ADD UnitPlatform INT NOT NULL CONSTRAINT DF_SysUser_UnitPlatform DEFAULT ( 0 ) WITH VALUES ; -- 所属平台: 0-赛事系统用户, 1-报名平台, 2-打分系统, 默认0
/* EventResult 成绩表:关联场次 / 出场 SessionId、SessionEntryId */
IF COL_LENGTH ( ' dbo.EventResult ' , ' SessionId ' ) IS NULL ALTER TABLE dbo . EventResult ADD SessionId BIGINT NULL ; -- 关联比赛场次Id( EventSession.Id)
IF COL_LENGTH ( ' dbo.EventResult ' , ' SessionEntryId ' ) IS NULL ALTER TABLE dbo . EventResult ADD SessionEntryId BIGINT NULL ; -- 关联场次出场记录Id
/* 成绩四类分值与总分:难度 / 表现 / 规定 / 扣分 DECIMAL(18,4) 默认0, TotalScore 允许为空 */
IF COL_LENGTH ( ' dbo.EventResult ' , ' DifficultyScore ' ) IS NULL ALTER TABLE dbo . EventResult ADD DifficultyScore DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT DF_EventResult_DifficultyScore DEFAULT ( 0 ) WITH VALUES ; -- 难度分 DECIMAL(18,4), 默认0
IF COL_LENGTH ( ' dbo.EventResult ' , ' PerformanceScore ' ) IS NULL ALTER TABLE dbo . EventResult ADD PerformanceScore DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT DF_EventResult_PerformanceScore DEFAULT ( 0 ) WITH VALUES ; -- 表现分 DECIMAL(18,4), 默认0
IF COL_LENGTH ( ' dbo.EventResult ' , ' RequiredScore ' ) IS NULL ALTER TABLE dbo . EventResult ADD RequiredScore DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT DF_EventResult_RequiredScore DEFAULT ( 0 ) WITH VALUES ; -- 规定分 DECIMAL(18,4), 默认0
IF COL_LENGTH ( ' dbo.EventResult ' , ' DeductionScore ' ) IS NULL ALTER TABLE dbo . EventResult ADD DeductionScore DECIMAL ( 18 , 4 ) NOT NULL CONSTRAINT DF_EventResult_DeductionScore DEFAULT ( 0 ) WITH VALUES ; -- 扣分 DECIMAL(18,4), 默认0
IF COL_LENGTH ( ' dbo.EventResult ' , ' TotalScore ' ) IS NULL ALTER TABLE dbo . EventResult ADD TotalScore DECIMAL ( 18 , 4 ) NULL ; -- 合计总分(允许为空)
/* 取消资格标记 IsDisqualified(默认0) 与原因码 DisqualifyReasonCode */
IF COL_LENGTH ( ' dbo.EventResult ' , ' IsDisqualified ' ) IS NULL ALTER TABLE dbo . EventResult ADD IsDisqualified BIT NOT NULL CONSTRAINT DF_EventResult_IsDisqualified DEFAULT ( 0 ) WITH VALUES ; -- 是否取消比赛资格( 默认0)
IF COL_LENGTH ( ' dbo.EventResult ' , ' DisqualifyReasonCode ' ) IS NULL ALTER TABLE dbo . EventResult ADD DisqualifyReasonCode NVARCHAR ( 64 ) NULL ; -- 取消比赛资格原因编码
/* 成绩状态机 ResultStatus(0草稿 / 10待确认 / 20已确认 / 30已发布 / 40已投屏 / 90作废) 与版本号 ResultVersion(默认1) */
IF COL_LENGTH ( ' dbo.EventResult ' , ' ResultStatus ' ) IS NULL ALTER TABLE dbo . EventResult ADD ResultStatus INT NOT NULL CONSTRAINT DF_EventResult_ResultStatus DEFAULT ( 0 ) WITH VALUES ; -- 成绩状态: 0-草稿, 10-待确认, 20-已确认, 30-已发布, 40-已投屏, 90-作废
IF COL_LENGTH ( ' dbo.EventResult ' , ' ResultVersion ' ) IS NULL ALTER TABLE dbo . EventResult ADD ResultVersion INT NOT NULL CONSTRAINT DF_EventResult_ResultVersion DEFAULT ( 1 ) WITH VALUES ; -- 成绩版本号( 默认1)
IF COL_LENGTH ( ' dbo.EventResult ' , ' ReviewUserId ' ) IS NULL ALTER TABLE dbo . EventResult ADD ReviewUserId BIGINT NULL ; -- 成绩复核人
IF COL_LENGTH ( ' dbo.EventResult ' , ' ReviewTime ' ) IS NULL ALTER TABLE dbo . EventResult ADD ReviewTime DATETIME NULL ; -- 成绩复核时间
/* 成绩计算过程快照 CalculationJson(NVARCHAR MAX),用于追溯与复算 */
IF COL_LENGTH ( ' dbo.EventResult ' , ' CalculationJson ' ) IS NULL ALTER TABLE dbo . EventResult ADD CalculationJson NVARCHAR ( MAX ) NULL ; -- 成绩计算过程快照( JSON) , 用于追溯复算
/* ====================================================================================
[ 3 / 9 ] 改 表 结 构 · 校 验 约 束 / 外 键 / 索 引 ( 均 判 空 后 创 建 , 可 重 复 执 行 )
3 . 1 CHECK 域 值 约 束 ; 3 . 2 外 键 ( WITH CHECK 强 校 验 存 量 ) ; 3 . 3 索 引 ( UX_唯一 / IX_非聚集 , 过 滤 索 引 仅 约 束 未 删 除 数 据 )
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [3/9] 改表结构:创建校验约束、外键与索引 ' ;
/* 3.1 CHECK 域值约束:限定枚举取值(含一期新增列 MiniProgramRole / UnitPlatform 与二期新表) */
IF OBJECT_ID ( ' CK_AppUser_MiniProgramRole ' , ' C ' ) IS NULL ALTER TABLE dbo . AppUser WITH CHECK ADD CONSTRAINT CK_AppUser_MiniProgramRole CHECK ( MiniProgramRole IN ( 1 , 2 , 3 ) ) ;
IF OBJECT_ID ( ' CK_SysUser_UnitPlatform ' , ' C ' ) IS NULL ALTER TABLE dbo . SysUser WITH CHECK ADD CONSTRAINT CK_SysUser_UnitPlatform CHECK ( UnitPlatform IN ( 0 , 1 , 2 ) ) ;
IF OBJECT_ID ( ' CK_CheckinTask_CheckinNo ' , ' C ' ) IS NULL ALTER TABLE dbo . CheckinTask WITH CHECK ADD CONSTRAINT CK_CheckinTask_CheckinNo CHECK ( CheckinNo BETWEEN 1 AND 3 AND TotalRounds BETWEEN 1 AND 3 AND CurrentRound BETWEEN 1 AND 3 ) ;
IF OBJECT_ID ( ' CK_EventSession_Time ' , ' C ' ) IS NULL ALTER TABLE dbo . EventSession WITH CHECK ADD CONSTRAINT CK_EventSession_Time CHECK ( EndTime IS NULL OR StartTime IS NULL OR EndTime > = StartTime ) ;
IF OBJECT_ID ( ' CK_ScoreRule_Version ' , ' C ' ) IS NULL ALTER TABLE dbo . ScoreRule WITH CHECK ADD CONSTRAINT CK_ScoreRule_Version CHECK ( RuleVersion > = 1 ) ;
IF OBJECT_ID ( ' CK_EventJudgeScoreSheet_Version ' , ' C ' ) IS NULL ALTER TABLE dbo . EventJudgeScoreSheet WITH CHECK ADD CONSTRAINT CK_EventJudgeScoreSheet_Version CHECK ( RuleVersion > = 1 AND SheetVersion > = 1 ) ;
2026-09-08 14:07:59 +08:00
IF OBJECT_ID ( ' CK_EventScoreCorrection_Applicant ' , ' C ' ) IS NULL ALTER TABLE dbo . EventScoreCorrection WITH CHECK ADD CONSTRAINT CK_EventScoreCorrection_Applicant CHECK ( ( ApplyUserId IS NOT NULL AND ApplyRefereeId IS NULL ) OR ( ApplyUserId IS NULL AND ApplyRefereeId IS NOT NULL ) ) ;
2026-08-30 21:46:05 +08:00
/* 3.2 外键:二期表引用一期表主键、以及二期表之间的引用关系 */
IF OBJECT_ID ( N ' dbo.[FK_RefereeApplication_Event] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ RefereeApplication ] WITH CHECK ADD CONSTRAINT [ FK_RefereeApplication_Event ] FOREIGN KEY ( [ EventId ] ) REFERENCES dbo . [ EventInfo ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_RefereeApplication_AppUser] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ RefereeApplication ] WITH CHECK ADD CONSTRAINT [ FK_RefereeApplication_AppUser ] FOREIGN KEY ( [ RefereeUserId ] ) REFERENCES dbo . [ AppUser ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_CheckinTask_Event] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ CheckinTask ] WITH CHECK ADD CONSTRAINT [ FK_CheckinTask_Event ] FOREIGN KEY ( [ EventId ] ) REFERENCES dbo . [ EventInfo ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_CheckinRecord_Task] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ CheckinRecord ] WITH CHECK ADD CONSTRAINT [ FK_CheckinRecord_Task ] FOREIGN KEY ( [ TaskId ] ) REFERENCES dbo . [ CheckinTask ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_Referee_AppUser] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ Referee ] WITH CHECK ADD CONSTRAINT [ FK_Referee_AppUser ] FOREIGN KEY ( [ AppUserId ] ) REFERENCES dbo . [ AppUser ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventReferee_Event] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventReferee ] WITH CHECK ADD CONSTRAINT [ FK_EventReferee_Event ] FOREIGN KEY ( [ EventId ] ) REFERENCES dbo . [ EventInfo ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventReferee_Referee] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventReferee ] WITH CHECK ADD CONSTRAINT [ FK_EventReferee_Referee ] FOREIGN KEY ( [ RefereeId ] ) REFERENCES dbo . [ Referee ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeAssignment_Session] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeAssignment ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeAssignment_Session ] FOREIGN KEY ( [ SessionId ] ) REFERENCES dbo . [ EventSession ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeAssignment_EventReferee] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeAssignment ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeAssignment_EventReferee ] FOREIGN KEY ( [ EventRefereeId ] ) REFERENCES dbo . [ EventReferee ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventVenue_Event] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventVenue ] WITH CHECK ADD CONSTRAINT [ FK_EventVenue_Event ] FOREIGN KEY ( [ EventId ] ) REFERENCES dbo . [ EventInfo ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventSession_Venue] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventSession ] WITH CHECK ADD CONSTRAINT [ FK_EventSession_Venue ] FOREIGN KEY ( [ VenueId ] ) REFERENCES dbo . [ EventVenue ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventSession_ScoreRule] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventSession ] WITH CHECK ADD CONSTRAINT [ FK_EventSession_ScoreRule ] FOREIGN KEY ( [ ScoreRuleId ] ) REFERENCES dbo . [ ScoreRule ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventSessionEntry_Session] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventSessionEntry ] WITH CHECK ADD CONSTRAINT [ FK_EventSessionEntry_Session ] FOREIGN KEY ( [ SessionId ] ) REFERENCES dbo . [ EventSession ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeTask_Entry] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeTask ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeTask_Entry ] FOREIGN KEY ( [ SessionEntryId ] ) REFERENCES dbo . [ EventSessionEntry ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeTask_Assignment] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeTask ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeTask_Assignment ] FOREIGN KEY ( [ JudgeAssignmentId ] ) REFERENCES dbo . [ EventJudgeAssignment ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeTask_ScoreRule] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeTask ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeTask_ScoreRule ] FOREIGN KEY ( [ ScoreRuleId ] ) REFERENCES dbo . [ ScoreRule ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_ScoreRuleItem_Rule] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ ScoreRuleItem ] WITH CHECK ADD CONSTRAINT [ FK_ScoreRuleItem_Rule ] FOREIGN KEY ( [ ScoreRuleId ] ) REFERENCES dbo . [ ScoreRule ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeScoreSheet_Task] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeScoreSheet ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeScoreSheet_Task ] FOREIGN KEY ( [ JudgeTaskId ] ) REFERENCES dbo . [ EventJudgeTask ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeScoreSheet_Entry] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeScoreSheet ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeScoreSheet_Entry ] FOREIGN KEY ( [ SessionEntryId ] ) REFERENCES dbo . [ EventSessionEntry ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeScoreSheet_Rule] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeScoreSheet ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeScoreSheet_Rule ] FOREIGN KEY ( [ ScoreRuleId ] ) REFERENCES dbo . [ ScoreRule ] ( [ Id ] ) ;
2026-09-08 14:07:59 +08:00
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeScoreAttachment_Sheet] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeScoreAttachment ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeScoreAttachment_Sheet ] FOREIGN KEY ( [ ScoreSheetId ] ) REFERENCES dbo . [ EventJudgeScoreSheet ] ( [ Id ] ) ;
2026-08-30 21:46:05 +08:00
IF OBJECT_ID ( N ' dbo.[FK_EventJudgeScoreDetail_Sheet] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventJudgeScoreDetail ] WITH CHECK ADD CONSTRAINT [ FK_EventJudgeScoreDetail_Sheet ] FOREIGN KEY ( [ ScoreSheetId ] ) REFERENCES dbo . [ EventJudgeScoreSheet ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventResultVersion_Result] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventResultVersion ] WITH CHECK ADD CONSTRAINT [ FK_EventResultVersion_Result ] FOREIGN KEY ( [ EventResultId ] ) REFERENCES dbo . [ EventResult ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventResultVersion_Entry] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventResultVersion ] WITH CHECK ADD CONSTRAINT [ FK_EventResultVersion_Entry ] FOREIGN KEY ( [ SessionEntryId ] ) REFERENCES dbo . [ EventSessionEntry ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventResultVersion_Rule] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventResultVersion ] WITH CHECK ADD CONSTRAINT [ FK_EventResultVersion_Rule ] FOREIGN KEY ( [ ScoreRuleId ] ) REFERENCES dbo . [ ScoreRule ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventScoreCorrection_Entry] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventScoreCorrection ] WITH CHECK ADD CONSTRAINT [ FK_EventScoreCorrection_Entry ] FOREIGN KEY ( [ SessionEntryId ] ) REFERENCES dbo . [ EventSessionEntry ] ( [ Id ] ) ;
IF OBJECT_ID ( N ' dbo.[FK_EventScoreCorrection_OriginalSheet] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventScoreCorrection ] WITH CHECK ADD CONSTRAINT [ FK_EventScoreCorrection_OriginalSheet ] FOREIGN KEY ( [ OriginalScoreSheetId ] ) REFERENCES dbo . [ EventJudgeScoreSheet ] ( [ Id ] ) ;
2026-09-08 14:07:59 +08:00
IF OBJECT_ID ( N ' dbo.[FK_EventScoreCorrection_ApplyReferee] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventScoreCorrection ] WITH CHECK ADD CONSTRAINT [ FK_EventScoreCorrection_ApplyReferee ] FOREIGN KEY ( [ ApplyRefereeId ] ) REFERENCES dbo . [ Referee ] ( [ Id ] ) ;
2026-08-30 21:46:05 +08:00
IF OBJECT_ID ( N ' dbo.[FK_EventResultScreenCast_Event] ' , ' F ' ) IS NULL ALTER TABLE dbo . [ EventResultScreenCast ] WITH CHECK ADD CONSTRAINT [ FK_EventResultScreenCast_Event ] FOREIGN KEY ( [ EventId ] ) REFERENCES dbo . [ EventInfo ] ( [ Id ] ) ;
/* 3.3 索引: UX_ 唯一索引 / IX_ 非聚集索引; WHERE DeleteMark=0 的过滤索引仅约束有效数据 */
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[Referee] ' ) AND name = N ' UX_Referee_Mobile_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_Referee_Mobile_Active ] ON dbo . [ Referee ] ( [ Mobile ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[Referee] ' ) AND name = N ' IX_Referee_AppUserId ' ) CREATE NONCLUSTERED INDEX [ IX_Referee_AppUserId ] ON dbo . [ Referee ] ( [ AppUserId ] ) WHERE [ AppUserId ] IS NOT NULL AND [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventReferee] ' ) AND name = N ' UX_EventReferee_Event_Referee_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventReferee_Event_Referee_Active ] ON dbo . [ EventReferee ] ( [ EventId ] , [ RefereeId ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[RefereeApplication] ' ) AND name = N ' IX_RefereeApplication_Event_Status ' ) CREATE NONCLUSTERED INDEX [ IX_RefereeApplication_Event_Status ] ON dbo . [ RefereeApplication ] ( [ EventId ] , [ ApplicationStatus ] , [ DeleteMark ] ) ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[CheckinTask] ' ) AND name = N ' UX_CheckinTask_Event_Checkin_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_CheckinTask_Event_Checkin_Active ] ON dbo . [ CheckinTask ] ( [ EventId ] , [ CheckinNo ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[CheckinRecord] ' ) AND name = N ' UX_CheckinRecord_Task_Round_Person_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_CheckinRecord_Task_Round_Person_Active ] ON dbo . [ CheckinRecord ] ( [ TaskId ] , [ Round ] , [ RegistrationPersonId ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventVenue] ' ) AND name = N ' UX_EventVenue_Event_Code_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventVenue_Event_Code_Active ] ON dbo . [ EventVenue ] ( [ EventId ] , [ VenueCode ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventSession] ' ) AND name = N ' UX_EventSession_Event_No_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventSession_Event_No_Active ] ON dbo . [ EventSession ] ( [ EventId ] , [ SessionNo ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventSession] ' ) AND name = N ' IX_EventSession_Event_Status ' ) CREATE NONCLUSTERED INDEX [ IX_EventSession_Event_Status ] ON dbo . [ EventSession ] ( [ EventId ] , [ SessionStatus ] , [ StartTime ] ) ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventSessionEntry] ' ) AND name = N ' UX_EventSessionEntry_Session_Order_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventSessionEntry_Session_Order_Active ] ON dbo . [ EventSessionEntry ] ( [ SessionId ] , [ PlayOrder ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventSessionEntry] ' ) AND name = N ' UX_EventSessionEntry_Session_No_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventSessionEntry_Session_No_Active ] ON dbo . [ EventSessionEntry ] ( [ SessionId ] , [ EntryNo ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeAssignment] ' ) AND name = N ' UX_EventJudgeAssignment_Session_Role_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeAssignment_Session_Role_Active ] ON dbo . [ EventJudgeAssignment ] ( [ SessionId ] , [ JudgeRole ] ) WHERE [ DeleteMark ] = 0 AND [ Status ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeTask] ' ) AND name = N ' IX_EventJudgeTask_User_Status ' ) CREATE NONCLUSTERED INDEX [ IX_EventJudgeTask_User_Status ] ON dbo . [ EventJudgeTask ] ( [ JudgeUserId ] , [ TaskStatus ] , [ ExpiresTime ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeTask] ' ) AND name = N ' UX_EventJudgeTask_Business_Version ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeTask_Business_Version ] ON dbo . [ EventJudgeTask ] ( [ SessionEntryId ] , [ JudgeAssignmentId ] , [ TaskVersion ] ) WHERE [ DeleteMark ] = 0 ;
2026-09-08 14:07:59 +08:00
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventScoreCorrection] ' ) AND name = N ' UX_EventScoreCorrection_OriginalSheet_Open ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventScoreCorrection_OriginalSheet_Open ] ON dbo . [ EventScoreCorrection ] ( [ OriginalScoreSheetId ] ) WHERE [ DeleteMark ] = 0 AND [ CorrectionStatus ] > = 0 AND [ CorrectionStatus ] < = 30 AND [ CorrectionStatus ] < > 20 ;
2026-08-30 21:46:05 +08:00
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[ScoreRule] ' ) AND name = N ' UX_ScoreRule_Code_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_ScoreRule_Code_Active ] ON dbo . [ ScoreRule ] ( [ RuleCode ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[ScoreRuleItem] ' ) AND name = N ' UX_ScoreRuleItem_Rule_Role_Code_Active ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_ScoreRuleItem_Rule_Role_Code_Active ] ON dbo . [ ScoreRuleItem ] ( [ ScoreRuleId ] , [ JudgeRoleType ] , [ ItemCode ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeScoreSheet] ' ) AND name = N ' UX_EventJudgeScoreSheet_Idempotency ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeScoreSheet_Idempotency ] ON dbo . [ EventJudgeScoreSheet ] ( [ IdempotencyKey ] ) ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeScoreSheet] ' ) AND name = N ' UX_EventJudgeScoreSheet_Current ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeScoreSheet_Current ] ON dbo . [ EventJudgeScoreSheet ] ( [ SessionEntryId ] , [ JudgeAssignmentId ] ) WHERE [ IsCurrent ] = 1 AND [ DeleteMark ] = 0 ;
2026-09-08 14:07:59 +08:00
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeScoreAttachment] ' ) AND name = N ' UX_EventJudgeScoreAttachment_Idempotency ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeScoreAttachment_Idempotency ] ON dbo . [ EventJudgeScoreAttachment ] ( [ ScoreSheetId ] , [ IdempotencyKey ] ) ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeScoreAttachment] ' ) AND name = N ' UX_EventJudgeScoreAttachment_Current ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventJudgeScoreAttachment_Current ] ON dbo . [ EventJudgeScoreAttachment ] ( [ ScoreSheetId ] , [ AttachmentType ] ) WHERE [ IsCurrent ] = 1 AND [ DeleteMark ] = 0 ;
2026-08-30 21:46:05 +08:00
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeScoreDetail] ' ) AND name = N ' IX_EventJudgeScoreDetail_Sheet ' ) CREATE NONCLUSTERED INDEX [ IX_EventJudgeScoreDetail_Sheet ] ON dbo . [ EventJudgeScoreDetail ] ( [ ScoreSheetId ] , [ Sort ] ) ;
2026-09-16 15:20:14 +08:00
/* 集体项目按队员分别保存成绩;旧版仅以 SessionEntryId 唯一会导致第二名队员写入失败。 */
IF EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventResult] ' ) AND name = N ' UX_EventResult_SessionEntry_Active '
AND ( INDEX_COL ( N ' dbo.EventResult ' , N ' UX_EventResult_SessionEntry_Active ' , 1 ) < > N ' SessionEntryId '
OR ISNULL ( INDEX_COL ( N ' dbo.EventResult ' , N ' UX_EventResult_SessionEntry_Active ' , 2 ) , N ' ' ) < > N ' RegistrationPersonId ' ) )
DROP INDEX [ UX_EventResult_SessionEntry_Active ] ON dbo . [ EventResult ] ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventResult] ' ) AND name = N ' UX_EventResult_SessionEntry_Active ' )
CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventResult_SessionEntry_Active ] ON dbo . [ EventResult ] ( [ SessionEntryId ] , [ RegistrationPersonId ] ) WHERE [ SessionEntryId ] IS NOT NULL AND [ DeleteMark ] = 0 ;
2026-08-30 21:46:05 +08:00
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventResultVersion] ' ) AND name = N ' UX_EventResultVersion_Result_Version ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventResultVersion_Result_Version ] ON dbo . [ EventResultVersion ] ( [ EventResultId ] , [ ResultVersion ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventJudgeMessage] ' ) AND name = N ' IX_EventJudgeMessage_Receiver_Unread ' ) CREATE NONCLUSTERED INDEX [ IX_EventJudgeMessage_Receiver_Unread ] ON dbo . [ EventJudgeMessage ] ( [ ReceiverUserId ] , [ IsRead ] , [ CreatedTime ] ) WHERE [ DeleteMark ] = 0 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventResultScreenCast] ' ) AND name = N ' IX_EventResultScreenCast_Event_Time ' ) CREATE NONCLUSTERED INDEX [ IX_EventResultScreenCast_Event_Time ] ON dbo . [ EventResultScreenCast ] ( [ EventId ] , [ CastTime ] ) WHERE [ DeleteMark ] = 0 ;
2026-09-04 17:15:03 +08:00
/* 同一赛事同一场地只允许保留一条投出中的投屏:先把重复的历史投屏置为“已替换(20)”,再创建唯一筛选索引兜底 */
; WITH ActiveCast AS (
SELECT Id , ROW_NUMBER ( ) OVER ( PARTITION BY EventId , VenueId ORDER BY CastTime DESC , Id DESC ) AS rn
FROM dbo . EventResultScreenCast WHERE CastStatus = 0 AND DeleteMark = 0
)
UPDATE sc SET CastStatus = 20 , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
FROM dbo . EventResultScreenCast sc JOIN ActiveCast a ON a . Id = sc . Id WHERE a . rn > 1 ;
IF NOT EXISTS ( SELECT 1 FROM sys . indexes WHERE object_id = OBJECT_ID ( N ' dbo.[EventResultScreenCast] ' ) AND name = N ' UX_EventResultScreenCast_Current ' ) CREATE UNIQUE NONCLUSTERED INDEX [ UX_EventResultScreenCast_Current ] ON dbo . [ EventResultScreenCast ] ( [ EventId ] , [ VenueId ] ) WHERE [ CastStatus ] = 0 AND [ DeleteMark ] = 0 ;
2026-08-30 21:46:05 +08:00
/* ====================================================================================
[ 4 / 9 ] 插 入 数 据 · 初 始 化 种 子 ( 统 一 “ 存 在 则 更 新 、 缺 失 才 插 入 ” 的 幂 等 写 法 , 可 重 复 执 行 )
2026-09-17 10:25:06 +08:00
顺 序 : 4 . 1 计 分 规 则 ( 8 条 ) - > 规 则 Id映射 - > 4 . 2 规 则 明 细 ( 334 条 ) - > 4 . 3 角 色 - > 4 . 4 账 号 管 理 按 钮 - > 4 . 5 角 色 菜 单 授 权
2026-08-30 21:46:05 +08:00
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [4/9] 插入数据:初始化计分规则、规则明细、角色与菜单 ' ;
2026-09-17 10:25:06 +08:00
/* 4.1 八条计分规则(固定Id: 3000规定赛 / 3100个人花样 / 3200两人同步花样 / 3300四人同步花样 / 3400两人车轮跳花样 / 3500三人交互绳花样 / 3600四人交互绳花样 / 3700表演赛):先按 RuleCode 更新, 再插入缺失, Id冲突则报错 */
2026-08-30 21:46:05 +08:00
CREATE TABLE #RuleSeed(SourceId BIGINT PRIMARY KEY,RuleCode NVARCHAR(64),RuleName NVARCHAR(128),JudgeRoleSchemaJson NVARCHAR(2000),RuleConfigJson NVARCHAR(4000),RuleVersion INT,Status INT,Sort INT,DeleteMark BIT,CreatedUserId BIGINT,CreatedTime DATETIME2(3));
2026-09-17 10:25:06 +08:00
INSERT #RuleSeed VALUES (3000,N'ROPE_PRESCRIBED',N'规定赛',N'[{"title":"创意编排裁判","slots":[{"code":"CJ","name":"创意编排裁判","min":1}]},{"title":"完成质量裁判","slots":[{"code":"CQ","name":"完成质量裁判","min":1}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判","min":1,"max":1}]}]',N'{"ruleType":"PRESCRIBED","baseScore":100,"scoreDecimals":2,"deductionUnit":5,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"CJ","symbol":"T1","label":"创意分","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1},{"roleType":"CQ","symbol":"T2","label":"完成分","sourceField":"RequiredScore","targetField":"RequiredScore","aggregate":"avg","sign":1},{"roleType":"T","symbol":"T3","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1}],"tieBreakers":["TotalScore","RequiredScore","PerformanceScore"]}',1,0,1,0,1000,N'2026-08-19T00:00:00'),
( 3100 , N ' ROPE_PRESCRIBED_SINGLE ' , N ' 个人花样(精英级) ' , N ' [{"title":"创意编排裁判","slots":[{"code":"CJ","name":"创意编排裁判","min":1}]},{"title":"完成质量裁判","slots":[{"code":"CQ","name":"完成质量裁判","min":1}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判","min":1,"max":1}]}] ' , N ' {"ruleType":"PRESCRIBED","baseScore":100,"scoreDecimals":2,"deductionUnit":5,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"CJ","symbol":"T1","label":"创意分","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1},{"roleType":"CQ","symbol":"T2","label":"完成分","sourceField":"RequiredScore","targetField":"RequiredScore","aggregate":"avg","sign":1},{"roleType":"T","symbol":"T3","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1}],"tieBreakers":["TotalScore","RequiredScore","PerformanceScore"]} ' , 1 , 0 , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3200 , N ' ROPE_PRESCRIBED_DOUBLE_SYNC ' , N ' 两人同步花样(精英级) ' , N ' [{"title":"创意编排裁判","slots":[{"code":"CJ","name":"创意编排裁判","min":1}]},{"title":"完成质量裁判","slots":[{"code":"CQ","name":"完成质量裁判","min":1}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判","min":1,"max":1}]}] ' , N ' {"ruleType":"PRESCRIBED","baseScore":100,"scoreDecimals":2,"deductionUnit":5,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"CJ","symbol":"T1","label":"创意分","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1},{"roleType":"CQ","symbol":"T2","label":"完成分","sourceField":"RequiredScore","targetField":"RequiredScore","aggregate":"avg","sign":1},{"roleType":"T","symbol":"T3","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1}],"tieBreakers":["TotalScore","RequiredScore","PerformanceScore"]} ' , 1 , 0 , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3300 , N ' ROPE_PRESCRIBED_QUAD_SYNC ' , N ' 四人同步花样(精英级) ' , N ' [{"title":"创意编排裁判","slots":[{"code":"CJ","name":"创意编排裁判","min":1}]},{"title":"完成质量裁判","slots":[{"code":"CQ","name":"完成质量裁判","min":1}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判","min":1,"max":1}]}] ' , N ' {"ruleType":"PRESCRIBED","baseScore":100,"scoreDecimals":2,"deductionUnit":5,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"CJ","symbol":"T1","label":"创意分","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1},{"roleType":"CQ","symbol":"T2","label":"完成分","sourceField":"RequiredScore","targetField":"RequiredScore","aggregate":"avg","sign":1},{"roleType":"T","symbol":"T3","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1}],"tieBreakers":["TotalScore","RequiredScore","PerformanceScore"]} ' , 1 , 0 , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3400 , N ' ROPE_FREESTYLE_WHEEL_PAIR ' , N ' 两人车轮跳花样(精英级) ' , N ' [{"title":"难度裁判","slots":[{"code":"DA","name":"难度裁判-DA(运动员A难度裁判)","min":2},{"code":"DB","name":"难度裁判-DB(运动员B难度裁判)","min":2}]},{"title":"表现裁判","slots":[{"code":"P","name":"表现裁判-P","min":2}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判-T","min":1,"max":1}]}] ' , N ' {"ruleType":"FREESTYLE_WHEEL","totalMode":"factor","baseScore":0,"scoreDecimals":2,"difficultyDivisor":2,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"DA","symbol":"dA","label":"运动员A难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"DB","symbol":"dB","label":"运动员B难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"P","symbol":"P","label":"表现","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1,"factor":"P","factorWeight":0.05},{"roleType":"T","symbol":"Q","label":"规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"max","sign":1,"factor":"Q","factorWeight":0.05},{"roleType":"T","symbol":"M","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1,"factor":"M","factorWeight":1}],"tieBreakers":["TotalScore","-DeductionScore","RequiredScore","PerformanceScore","DifficultyScore"]} ' , 1 , 0 , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3500 , N ' ROPE_FREESTYLE_WIRE_TRIPLE ' , N ' 三人交互绳花样(精英级) ' , N ' [{"title":"难度裁判","slots":[{"code":"DJ","name":"难度裁判-DJ(跳绳运动员难度裁判)","min":2},{"code":"DT","name":"难度裁判-DT(摇绳运动员难度裁判)","min":2}]},{"title":"表现裁判","slots":[{"code":"P","name":"表现裁判-P","min":2}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判-T","min":1,"max":1}]}] ' , N ' {"ruleType":"FREESTYLE_WIRE","totalMode":"factor","baseScore":0,"scoreDecimals":2,"difficultyDivisor":1,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"DJ","symbol":"dJ","label":"跳绳运动员难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1.4},{"roleType":"DT","symbol":"dT","label":"摇绳运动员难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"P","symbol":"P","label":"表现","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1,"factor":"P","factorWeight":0.033},{"roleType":"T","symbol":"M","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1,"factor":"M","factorWeight":1}],"tieBreakers":["TotalScore","-DeductionScore","PerformanceScore","DifficultyScore"]} ' , 1 , 0 , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3600 , N ' ROPE_FREESTYLE_WIRE_QUAD ' , N ' 四人交互绳花样(精英级) ' , N ' [{"title":"难度裁判","slots":[{"code":"DJ","name":"难度裁判-DJ(跳绳运动员难度裁判)","min":2},{"code":"DT","name":"难度裁判-DT(摇绳运动员难度裁判)","min":2}]},{"title":"表现裁判","slots":[{"code":"P","name":"表现裁判-P","min":2}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判-T","min":1,"max":1}]}] ' , N ' {"ruleType":"FREESTYLE_WIRE","totalMode":"factor","baseScore":0,"scoreDecimals":2,"difficultyDivisor":1,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"DJ","symbol":"dJ","label":"跳绳运动员难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1.4},{"roleType":"DT","symbol":"dT","label":"摇绳运动员难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"P","symbol":"P","label":"表现","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1,"factor":"P","factorWeight":0.033},{"roleType":"T","symbol":"M","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1,"factor":"M","factorWeight":1}],"tieBreakers":["TotalScore","-DeductionScore","PerformanceScore","DifficultyScore"]} ' , 1 , 0 , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3700 , N ' ROPE_SHOWCASE ' , N ' 表演赛(精英级) ' , N ' [{"title":"难度裁判","slots":[{"code":"DGA","name":"难度裁判-A组裁判","min":3},{"code":"DGB","name":"难度裁判-B组裁判","min":3}]},{"title":"表现裁判","slots":[{"code":"P","name":"表现裁判-P","min":3}]},{"title":"主裁判","slots":[{"code":"T","name":"主裁判-T","min":1,"max":1}]}] ' , N ' {"ruleType":"SHOWCASE","totalMode":"factor","baseScore":0,"scoreDecimals":2,"difficultyDivisor":2,"correctionNeedApproval":false,"roleAggregations":[{"roleType":"DGA","symbol":"A","label":"A组难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"DGB","symbol":"B","label":"B组难度","sourceField":"DifficultyScore","targetField":"DifficultyScore","aggregate":"avg","sign":1,"factor":"D","factorWeight":1},{"roleType":"P","symbol":"P","label":"表现","sourceField":"PerformanceScore","targetField":"PerformanceScore","aggregate":"avg","sign":1,"factor":"P","factorWeight":0.05},{"roleType":"T","symbol":"Q","label":"规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"max","sign":1,"factor":"Q","factorWeight":0.05},{"roleType":"T","symbol":"M","label":"扣分","sourceField":"DeductionScore","targetField":"DeductionScore","aggregate":"sum","sign":-1,"factor":"M","factorWeight":1}],"tieBreakers":["TotalScore","-DeductionScore","RequiredScore","PerformanceScore","DifficultyScore"]} ' , 1 , 0 , 8 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ;
2026-08-30 21:46:05 +08:00
UPDATE r SET RuleName = s . RuleName , JudgeRoleSchemaJson = s . JudgeRoleSchemaJson , RuleConfigJson = s . RuleConfigJson ,
RuleVersion = s . RuleVersion , Status = s . Status , Sort = s . Sort , DeleteMark = 0 , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
FROM dbo . ScoreRule r JOIN #RuleSeed s ON s.RuleCode=r.RuleCode AND r.DeleteMark=0
WHERE EXISTS ( SELECT r . RuleName , r . JudgeRoleSchemaJson , r . RuleConfigJson , r . RuleVersion , r . Status , r . Sort , r . DeleteMark
EXCEPT SELECT s . RuleName , s . JudgeRoleSchemaJson , s . RuleConfigJson , s . RuleVersion , s . Status , s . Sort , CONVERT ( BIT , 0 ) ) ;
INSERT dbo . ScoreRule ( Id , RuleCode , RuleName , JudgeRoleSchemaJson , RuleConfigJson , RuleVersion , Status , Sort , DeleteMark , CreatedUserId , CreatedTime )
SELECT s . SourceId , s . RuleCode , s . RuleName , s . JudgeRoleSchemaJson , s . RuleConfigJson , s . RuleVersion , s . Status , s . Sort , s . DeleteMark , s . CreatedUserId , s . CreatedTime
FROM #RuleSeed s WHERE NOT EXISTS(SELECT 1 FROM dbo.ScoreRule r WHERE r.RuleCode=s.RuleCode AND r.DeleteMark=0)
AND NOT EXISTS ( SELECT 1 FROM dbo . ScoreRule r WHERE r . Id = s . SourceId ) ;
IF EXISTS ( SELECT 1 FROM #RuleSeed s WHERE NOT EXISTS(SELECT 1 FROM dbo.ScoreRule r WHERE r.RuleCode=s.RuleCode AND r.DeleteMark=0))
THROW 51003 , N ' 计分规则种子ID被占用且规则编码不存在, 无法安全初始化。 ' , 1 ;
/* 规则“源Id->实际Id”映射: 兼容目标库 Id 被占用时按 RuleCode 对齐,供规则明细写入外键 ScoreRuleId */
CREATE TABLE #RuleMap(SourceId BIGINT PRIMARY KEY,TargetId BIGINT NOT NULL);
INSERT #RuleMap SELECT s.SourceId,r.Id FROM #RuleSeed s JOIN dbo.ScoreRule r ON r.RuleCode=s.RuleCode AND r.DeleteMark=0;
2026-09-17 10:25:06 +08:00
/* 4.2 计分规则评分项明细(共334条; Id段 30xx规定赛 / 31xx个人花样 / 32xx两人同步花样 / 33xx四人同步花样 / 34xx两人车轮跳花样 / 35xx三人交互绳花样 / 36xx四人交互绳花样 / 37xx表演赛):同样先更新后插入 */
2026-08-30 21:46:05 +08:00
CREATE TABLE #ItemSeed(Id BIGINT PRIMARY KEY,SourceRuleId BIGINT,JudgeRoleType NVARCHAR(16),ItemCode NVARCHAR(64),ItemName NVARCHAR(128),ItemType INT,ParentItemCode NVARCHAR(64),UnitValue DECIMAL(18,4),MinValue DECIMAL(18,4),MaxValue DECIMAL(18,4),StepValue DECIMAL(18,4),DefaultValue DECIMAL(18,4),CalcMode INT,ScoreDimension INT,IsRequired BIT,ExtensionJson NVARCHAR(2000),Sort INT,DeleteMark BIT,CreatedUserId BIGINT,CreatedTime DATETIME2(3));
2026-09-17 10:25:06 +08:00
INSERT #ItemSeed VALUES (3001,3000,N'CJ',N'CJ_ARRANGE',N'过渡连接、成套创编、场地运用',6,NULL,1,0,10,1,0,1,2,1,N'{"inputMode":"score","fineTuneStep":0.5}',1,0,1000,N'2026-08-19T00:00:00'),
2026-08-30 21:46:05 +08:00
( 3002 , 3000 , N ' CJ ' , N ' CJ_EFFECT ' , N ' 现场表现效果 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3003 , 3000 , N ' CQ ' , N ' CQ_ACCURACY ' , N ' 动作的准确性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":20}} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3004 , 3000 , N ' CQ ' , N ' CQ_PROFICIENCY ' , N ' 动作的熟练性 ' , 6 , NULL , 1 , 0 , 20 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":20,"team":15}} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3005 , 3000 , N ' CQ ' , N ' CQ_SYNCHRONY ' , N ' 动作的合拍性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":15}} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3006 , 3000 , N ' CQ ' , N ' CQ_ABILITY_CONSISTENCY ' , N ' 运动能力一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3007 , 3000 , N ' CQ ' , N ' CQ_SKILL_CONSISTENCY ' , N ' 表演技巧一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3008 , 3000 , N ' T ' , N ' T_DED_ROPE_SALUTE ' , N ' 赛前或赛后未行绳礼(每队) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3009 , 3000 , N ' T ' , N ' T_DED_APPEARANCE ' , N ' 运动员的头发、着装、仪容不符合规定,佩戴饰物、饰物掉落 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3010 , 3000 , N ' T ' , N ' T_DED_CHANGE_1X8 ' , N ' 更改1× 8拍规定元素内容 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3011 , 3000 , N ' T ' , N ' T_DED_INTERRUPT ' , N ' 套路中断4秒以上 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3012 , 3000 , N ' T ' , N ' T_DED_AREA_FOUL ' , N ' 场地犯规(踩线、出界) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3013 , 3000 , N ' T ' , N ' T_DQ_CALL_TIMEOUT ' , N ' 运动员( 队) 被叫超过60秒未上场 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3014 , 3000 , N ' T ' , N ' T_DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3015 , 3000 , N ' T ' , N ' T_DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3016 , 3000 , N ' T ' , N ' T_DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3017 , 3000 , N ' T ' , N ' T_DQ_MISCONDUCT ' , N ' 比赛中嚼口香糖、不文明用语等 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3018 , 3000 , N ' T ' , N ' T_DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3019 , 3000 , N ' T ' , N ' T_DQ_CHANGE_4X8 ' , N ' 更改4× 8拍规定元素内容 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
2026-09-17 10:25:06 +08:00
( 3101 , 3100 , N ' CJ ' , N ' CJ_ARRANGE ' , N ' 过渡连接、成套创编、场地运用 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3102 , 3100 , N ' CJ ' , N ' CJ_EFFECT ' , N ' 现场表现效果 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3103 , 3100 , N ' CQ ' , N ' CQ_ACCURACY ' , N ' 动作的准确性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":20}} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3104 , 3100 , N ' CQ ' , N ' CQ_PROFICIENCY ' , N ' 动作的熟练性 ' , 6 , NULL , 1 , 0 , 20 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":20,"team":15}} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3105 , 3100 , N ' CQ ' , N ' CQ_SYNCHRONY ' , N ' 动作的合拍性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":15}} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3106 , 3100 , N ' CQ ' , N ' CQ_ABILITY_CONSISTENCY ' , N ' 运动能力一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3107 , 3100 , N ' CQ ' , N ' CQ_SKILL_CONSISTENCY ' , N ' 表演技巧一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3108 , 3100 , N ' T ' , N ' T_DED_ROPE_SALUTE ' , N ' 赛前或赛后未行绳礼(每队) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3109 , 3100 , N ' T ' , N ' T_DED_APPEARANCE ' , N ' 运动员的头发、着装、仪容不符合规定,佩戴饰物、饰物掉落 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3110 , 3100 , N ' T ' , N ' T_DED_CHANGE_1X8 ' , N ' 更改1× 8拍规定元素内容 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3111 , 3100 , N ' T ' , N ' T_DED_INTERRUPT ' , N ' 套路中断4秒以上 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3112 , 3100 , N ' T ' , N ' T_DED_AREA_FOUL ' , N ' 场地犯规(踩线、出界) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3113 , 3100 , N ' T ' , N ' T_DQ_CALL_TIMEOUT ' , N ' 运动员( 队) 被叫超过60秒未上场 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3114 , 3100 , N ' T ' , N ' T_DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3115 , 3100 , N ' T ' , N ' T_DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3116 , 3100 , N ' T ' , N ' T_DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3117 , 3100 , N ' T ' , N ' T_DQ_MISCONDUCT ' , N ' 比赛中嚼口香糖、不文明用语等 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3118 , 3100 , N ' T ' , N ' T_DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3119 , 3100 , N ' T ' , N ' T_DQ_CHANGE_4X8 ' , N ' 更改4× 8拍规定元素内容 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3201 , 3200 , N ' CJ ' , N ' CJ_ARRANGE ' , N ' 过渡连接、成套创编、场地运用 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3202 , 3200 , N ' CJ ' , N ' CJ_EFFECT ' , N ' 现场表现效果 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3203 , 3200 , N ' CQ ' , N ' CQ_ACCURACY ' , N ' 动作的准确性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":20}} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3204 , 3200 , N ' CQ ' , N ' CQ_PROFICIENCY ' , N ' 动作的熟练性 ' , 6 , NULL , 1 , 0 , 20 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":20,"team":15}} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3205 , 3200 , N ' CQ ' , N ' CQ_SYNCHRONY ' , N ' 动作的合拍性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":15}} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3206 , 3200 , N ' CQ ' , N ' CQ_ABILITY_CONSISTENCY ' , N ' 运动能力一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3207 , 3200 , N ' CQ ' , N ' CQ_SKILL_CONSISTENCY ' , N ' 表演技巧一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3208 , 3200 , N ' T ' , N ' T_DED_ROPE_SALUTE ' , N ' 赛前或赛后未行绳礼(每队) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3209 , 3200 , N ' T ' , N ' T_DED_APPEARANCE ' , N ' 运动员的头发、着装、仪容不符合规定,佩戴饰物、饰物掉落 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3210 , 3200 , N ' T ' , N ' T_DED_CHANGE_1X8 ' , N ' 更改1× 8拍规定元素内容 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3211 , 3200 , N ' T ' , N ' T_DED_INTERRUPT ' , N ' 套路中断4秒以上 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3212 , 3200 , N ' T ' , N ' T_DED_AREA_FOUL ' , N ' 场地犯规(踩线、出界) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3213 , 3200 , N ' T ' , N ' T_DQ_CALL_TIMEOUT ' , N ' 运动员( 队) 被叫超过60秒未上场 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3214 , 3200 , N ' T ' , N ' T_DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3215 , 3200 , N ' T ' , N ' T_DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3216 , 3200 , N ' T ' , N ' T_DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3217 , 3200 , N ' T ' , N ' T_DQ_MISCONDUCT ' , N ' 比赛中嚼口香糖、不文明用语等 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3218 , 3200 , N ' T ' , N ' T_DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3219 , 3200 , N ' T ' , N ' T_DQ_CHANGE_4X8 ' , N ' 更改4× 8拍规定元素内容 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3301 , 3300 , N ' CJ ' , N ' CJ_ARRANGE ' , N ' 过渡连接、成套创编、场地运用 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3302 , 3300 , N ' CJ ' , N ' CJ_EFFECT ' , N ' 现场表现效果 ' , 6 , NULL , 1 , 0 , 10 , 1 , 0 , 1 , 2 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3303 , 3300 , N ' CQ ' , N ' CQ_ACCURACY ' , N ' 动作的准确性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":20}} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3304 , 3300 , N ' CQ ' , N ' CQ_PROFICIENCY ' , N ' 动作的熟练性 ' , 6 , NULL , 1 , 0 , 20 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":20,"team":15}} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3305 , 3300 , N ' CQ ' , N ' CQ_SYNCHRONY ' , N ' 动作的合拍性 ' , 6 , NULL , 1 , 0 , 30 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"maxByScope":{"personal":30,"team":15}} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3306 , 3300 , N ' CQ ' , N ' CQ_ABILITY_CONSISTENCY ' , N ' 运动能力一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3307 , 3300 , N ' CQ ' , N ' CQ_SKILL_CONSISTENCY ' , N ' 表演技巧一致性 ' , 6 , NULL , 1 , 0 , 15 , 1 , 0 , 1 , 3 , 1 , N ' {"inputMode":"score","fineTuneStep":0.5,"scopes":["team"],"maxByScope":{"team":15}} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3308 , 3300 , N ' T ' , N ' T_DED_ROPE_SALUTE ' , N ' 赛前或赛后未行绳礼(每队) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3309 , 3300 , N ' T ' , N ' T_DED_APPEARANCE ' , N ' 运动员的头发、着装、仪容不符合规定,佩戴饰物、饰物掉落 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3310 , 3300 , N ' T ' , N ' T_DED_CHANGE_1X8 ' , N ' 更改1× 8拍规定元素内容 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3311 , 3300 , N ' T ' , N ' T_DED_INTERRUPT ' , N ' 套路中断4秒以上 ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3312 , 3300 , N ' T ' , N ' T_DED_AREA_FOUL ' , N ' 场地犯规(踩线、出界) ' , 4 , NULL , 5 , 0 , 20 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","remark":"每项每次扣5分"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3313 , 3300 , N ' T ' , N ' T_DQ_CALL_TIMEOUT ' , N ' 运动员( 队) 被叫超过60秒未上场 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3314 , 3300 , N ' T ' , N ' T_DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3315 , 3300 , N ' T ' , N ' T_DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3316 , 3300 , N ' T ' , N ' T_DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3317 , 3300 , N ' T ' , N ' T_DQ_MISCONDUCT ' , N ' 比赛中嚼口香糖、不文明用语等 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3318 , 3300 , N ' T ' , N ' T_DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3319 , 3300 , N ' T ' , N ' T_DQ_CHANGE_4X8 ' , N ' 更改4× 8拍规定元素内容 ' , 5 , NULL , 0 , 0 , 1 , 1 , 0 , 2 , 0 , 0 , N ' {"inputMode":"reason"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3401 , 3400 , N ' DA ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3402 , 3400 , N ' DA ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3403 , 3400 , N ' DA ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3404 , 3400 , N ' DA ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3405 , 3400 , N ' DA ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3406 , 3400 , N ' DA ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3407 , 3400 , N ' DA ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3408 , 3400 , N ' DA ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 8 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3409 , 3400 , N ' DA ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 9 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3410 , 3400 , N ' DA ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"A"} ' , 10 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3411 , 3400 , N ' DB ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 11 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3412 , 3400 , N ' DB ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 12 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3413 , 3400 , N ' DB ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 13 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3414 , 3400 , N ' DB ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 14 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3415 , 3400 , N ' DB ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 15 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3416 , 3400 , N ' DB ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 16 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3417 , 3400 , N ' DB ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 17 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3418 , 3400 , N ' DB ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 18 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3419 , 3400 , N ' DB ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 19 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3420 , 3400 , N ' DB ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"B"} ' , 20 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3421 , 3400 , N ' P ' , N ' MUSIC_PLUS ' , N ' 音乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":1} ' , 21 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3422 , 3400 , N ' P ' , N ' MUSIC_MINUS ' , N ' 音乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":-1} ' , 22 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3423 , 3400 , N ' P ' , N ' MUSIC_SCORE ' , N ' 音乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"MUSIC","dimensionWeight":0.20,"baseValue":12.0} ' , 23 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3424 , 3400 , N ' P ' , N ' QUALITY_PLUS ' , N ' 完成质量(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":1} ' , 24 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3425 , 3400 , N ' P ' , N ' QUALITY_MINUS ' , N ' 完成质量(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":-1} ' , 25 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3426 , 3400 , N ' P ' , N ' QUALITY_SCORE ' , N ' 完成质量 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"QUALITY","dimensionWeight":0.25,"baseValue":12.0} ' , 26 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3427 , 3400 , N ' P ' , N ' ENTERTAINMENT_PLUS ' , N ' 娱乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":1} ' , 27 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3428 , 3400 , N ' P ' , N ' ENTERTAINMENT_MINUS ' , N ' 娱乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":-1} ' , 28 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3429 , 3400 , N ' P ' , N ' ENTERTAINMENT_SCORE ' , N ' 娱乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"ENTERTAINMENT","dimensionWeight":0.25,"baseValue":12.0} ' , 29 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3430 , 3400 , N ' P ' , N ' CREATIVITY_PLUS ' , N ' 创意(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":1} ' , 30 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3431 , 3400 , N ' P ' , N ' CREATIVITY_MINUS ' , N ' 创意(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":-1} ' , 31 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3432 , 3400 , N ' P ' , N ' CREATIVITY_SCORE ' , N ' 创意 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"CREATIVITY","dimensionWeight":0.15,"baseValue":12.0} ' , 32 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3433 , 3400 , N ' P ' , N ' VARIETY_PLUS ' , N ' 多样性(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":1} ' , 33 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3434 , 3400 , N ' P ' , N ' VARIETY_MINUS ' , N ' 多样性(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":-1} ' , 34 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3435 , 3400 , N ' P ' , N ' VARIETY_SCORE ' , N ' 多样性 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"VARIETY","dimensionWeight":0.15,"baseValue":12.0} ' , 35 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3436 , 3400 , N ' P ' , N ' FAILURE_COUNT ' , N ' 失误次数 ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 0 , 0 , N ' {"inputMode":"count","unitLabel":"次","isFailureCount":true,"remark":"表现裁判记一次失误,其对应的表现五个方面(音乐,完成质量,创意,娱乐和多样性)减数量+1"} ' , 36 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3437 , 3400 , N ' T ' , N ' T_FAILURE ' , N ' 失误 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","stepDeductions":[0.05,0.075,0.1],"remark":"第1次扣0.05, 第2次扣0.075, 第3次起每次扣0.1"} ' , 37 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3438 , 3400 , N ' T ' , N ' T_VIOLATION ' , N ' 违例 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 38 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3439 , 3400 , N ' T ' , N ' T_INTERVAL ' , N ' 间歇 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 39 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3440 , 3400 , N ' T ' , N ' REQ_STRENGTH_GYMNASTICS ' , N ' 力量和体操 ' , 2 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 40 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3441 , 3400 , N ' T ' , N ' REQ_MULTIPLE_ROPE ' , N ' 多摇 ' , 2 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 41 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3442 , 3400 , N ' T ' , N ' REQ_ROPE_MANIPULATION ' , N ' 绳子运用 ' , 2 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 42 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3443 , 3400 , N ' T ' , N ' REQ_INTERACTION ' , N ' 互动配合 ' , 2 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 43 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3444 , 3400 , N ' T ' , N ' REQUIRED_MISSING ' , N ' 规定元素缺失(个) ' , 2 , NULL , NULL , 0 , 4 , 1 , 0 , 1 , 0 , 0 , N ' {"inputMode":"score","isAuto":true,"unitLabel":"个","requiredTarget":4.0} ' , 44 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3445 , 3400 , N ' T ' , N ' DQ_DISCIPLINE ' , N ' 违反赛场纪律 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 45 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3446 , 3400 , N ' T ' , N ' DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 46 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3447 , 3400 , N ' T ' , N ' DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 47 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3448 , 3400 , N ' T ' , N ' DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 48 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3449 , 3400 , N ' T ' , N ' DQ_UNCIVILIZED ' , N ' 比赛中嚼口香糖/不文明用语等 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 49 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3450 , 3400 , N ' T ' , N ' DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 50 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3451 , 3400 , N ' T ' , N ' DQ_LATE_60S ' , N ' 运动员(队)被叫超过60秒未上场 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 51 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3452 , 3400 , N ' T ' , N ' DQ_TATTOO ' , N ' 显露纹身 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 52 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3501 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3502 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3503 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3504 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3505 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3506 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3507 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3508 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 8 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3509 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 9 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3510 , 3500 , N ' DJ ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 10 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3511 , 3500 , N ' DT ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 11 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3512 , 3500 , N ' DT ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 12 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3513 , 3500 , N ' DT ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 13 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3514 , 3500 , N ' DT ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 14 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3515 , 3500 , N ' DT ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 15 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3516 , 3500 , N ' DT ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 16 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3517 , 3500 , N ' DT ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 17 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3518 , 3500 , N ' DT ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 18 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3519 , 3500 , N ' DT ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 19 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3520 , 3500 , N ' DT ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 20 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3521 , 3500 , N ' P ' , N ' MUSIC_PLUS ' , N ' 音乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":1} ' , 21 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3522 , 3500 , N ' P ' , N ' MUSIC_MINUS ' , N ' 音乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":-1} ' , 22 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3523 , 3500 , N ' P ' , N ' MUSIC_SCORE ' , N ' 音乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"MUSIC","dimensionWeight":0.20,"baseValue":12.0} ' , 23 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3524 , 3500 , N ' P ' , N ' QUALITY_PLUS ' , N ' 完成质量(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":1} ' , 24 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3525 , 3500 , N ' P ' , N ' QUALITY_MINUS ' , N ' 完成质量(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":-1} ' , 25 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3526 , 3500 , N ' P ' , N ' QUALITY_SCORE ' , N ' 完成质量 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"QUALITY","dimensionWeight":0.25,"baseValue":12.0} ' , 26 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3527 , 3500 , N ' P ' , N ' ENTERTAINMENT_PLUS ' , N ' 娱乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":1} ' , 27 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3528 , 3500 , N ' P ' , N ' ENTERTAINMENT_MINUS ' , N ' 娱乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":-1} ' , 28 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3529 , 3500 , N ' P ' , N ' ENTERTAINMENT_SCORE ' , N ' 娱乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"ENTERTAINMENT","dimensionWeight":0.25,"baseValue":12.0} ' , 29 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3530 , 3500 , N ' P ' , N ' CREATIVITY_PLUS ' , N ' 创意(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":1} ' , 30 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3531 , 3500 , N ' P ' , N ' CREATIVITY_MINUS ' , N ' 创意(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":-1} ' , 31 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3532 , 3500 , N ' P ' , N ' CREATIVITY_SCORE ' , N ' 创意 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"CREATIVITY","dimensionWeight":0.15,"baseValue":12.0} ' , 32 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3533 , 3500 , N ' P ' , N ' VARIETY_PLUS ' , N ' 多样性(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":1} ' , 33 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3534 , 3500 , N ' P ' , N ' VARIETY_MINUS ' , N ' 多样性(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":-1} ' , 34 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3535 , 3500 , N ' P ' , N ' VARIETY_SCORE ' , N ' 多样性 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"VARIETY","dimensionWeight":0.15,"baseValue":12.0} ' , 35 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3536 , 3500 , N ' P ' , N ' FAILURE_COUNT ' , N ' 失误次数 ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 0 , 0 , N ' {"inputMode":"count","unitLabel":"次","isFailureCount":true,"remark":"表现裁判记一次失误,其对应的表现五个方面(音乐,完成质量,创意,娱乐和多样性)减数量+1"} ' , 36 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3537 , 3500 , N ' T ' , N ' T_FAILURE ' , N ' 失误 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","stepDeductions":[0.05,0.075,0.1],"remark":"第1次扣0.05, 第2次扣0.075, 第3次起每次扣0.1"} ' , 37 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3538 , 3500 , N ' T ' , N ' T_VIOLATION ' , N ' 违例 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 38 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3539 , 3500 , N ' T ' , N ' T_SPACE_VIOLATION ' , N ' 空间违例 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 39 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3540 , 3500 , N ' T ' , N ' DQ_DISCIPLINE ' , N ' 违反赛场纪律 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 40 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3541 , 3500 , N ' T ' , N ' DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 41 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3542 , 3500 , N ' T ' , N ' DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 42 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3543 , 3500 , N ' T ' , N ' DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 43 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3544 , 3500 , N ' T ' , N ' DQ_UNCIVILIZED ' , N ' 比赛中嚼口香糖/不文明用语等 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 44 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3545 , 3500 , N ' T ' , N ' DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 45 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3546 , 3500 , N ' T ' , N ' DQ_LATE_60S ' , N ' 运动员(队)被叫超过60秒未上场 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 46 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3547 , 3500 , N ' T ' , N ' DQ_TATTOO ' , N ' 显露纹身 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 47 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3601 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3602 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3603 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3604 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3605 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3606 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3607 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3608 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 8 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3609 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 9 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3610 , 3600 , N ' DJ ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"avg"} ' , 10 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3611 , 3600 , N ' DT ' , N ' DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 11 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3612 , 3600 , N ' DT ' , N ' DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 12 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3613 , 3600 , N ' DT ' , N ' DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 13 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3614 , 3600 , N ' DT ' , N ' DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 14 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3615 , 3600 , N ' DT ' , N ' DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 15 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3616 , 3600 , N ' DT ' , N ' DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 16 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3617 , 3600 , N ' DT ' , N ' DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 17 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3618 , 3600 , N ' DT ' , N ' DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 18 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3619 , 3600 , N ' DT ' , N ' DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 19 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3620 , 3600 , N ' DT ' , N ' DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 , 50 , 1 , 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","difficultyAggregate":"top","difficultyTopCount":20} ' , 20 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3621 , 3600 , N ' P ' , N ' MUSIC_PLUS ' , N ' 音乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":1} ' , 21 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3622 , 3600 , N ' P ' , N ' MUSIC_MINUS ' , N ' 音乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":-1} ' , 22 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3623 , 3600 , N ' P ' , N ' MUSIC_SCORE ' , N ' 音乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"MUSIC","dimensionWeight":0.20,"baseValue":12.0} ' , 23 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3624 , 3600 , N ' P ' , N ' QUALITY_PLUS ' , N ' 完成质量(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":1} ' , 24 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3625 , 3600 , N ' P ' , N ' QUALITY_MINUS ' , N ' 完成质量(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":-1} ' , 25 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3626 , 3600 , N ' P ' , N ' QUALITY_SCORE ' , N ' 完成质量 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"QUALITY","dimensionWeight":0.25,"baseValue":12.0} ' , 26 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3627 , 3600 , N ' P ' , N ' ENTERTAINMENT_PLUS ' , N ' 娱乐(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":1} ' , 27 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3628 , 3600 , N ' P ' , N ' ENTERTAINMENT_MINUS ' , N ' 娱乐(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":-1} ' , 28 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3629 , 3600 , N ' P ' , N ' ENTERTAINMENT_SCORE ' , N ' 娱乐 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"ENTERTAINMENT","dimensionWeight":0.25,"baseValue":12.0} ' , 29 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3630 , 3600 , N ' P ' , N ' CREATIVITY_PLUS ' , N ' 创意(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":1} ' , 30 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3631 , 3600 , N ' P ' , N ' CREATIVITY_MINUS ' , N ' 创意(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":-1} ' , 31 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3632 , 3600 , N ' P ' , N ' CREATIVITY_SCORE ' , N ' 创意 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"CREATIVITY","dimensionWeight":0.15,"baseValue":12.0} ' , 32 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3633 , 3600 , N ' P ' , N ' VARIETY_PLUS ' , N ' 多样性(加数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":1} ' , 33 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3634 , 3600 , N ' P ' , N ' VARIETY_MINUS ' , N ' 多样性(减数量) ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":-1} ' , 34 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3635 , 3600 , N ' P ' , N ' VARIETY_SCORE ' , N ' 多样性 ' , 3 , NULL , 1 , 0 , 24 , 1 , 12 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"VARIETY","dimensionWeight":0.15,"baseValue":12.0} ' , 35 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3636 , 3600 , N ' P ' , N ' FAILURE_COUNT ' , N ' 失误次数 ' , 3 , NULL , 1 , 0 , 50 , 1 , 0 , 0 , 0 , 0 , N ' {"inputMode":"count","unitLabel":"次","isFailureCount":true,"remark":"表现裁判记一次失误,其对应的表现五个方面(音乐,完成质量,创意,娱乐和多样性)减数量+1"} ' , 36 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3637 , 3600 , N ' T ' , N ' T_FAILURE ' , N ' 失误 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","stepDeductions":[0.05,0.075,0.1],"remark":"第1次扣0.05, 第2次扣0.075, 第3次起每次扣0.1"} ' , 37 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3638 , 3600 , N ' T ' , N ' T_VIOLATION ' , N ' 违例 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 38 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3639 , 3600 , N ' T ' , N ' T_SPACE_VIOLATION ' , N ' 空间违例 ' , 4 , NULL , 0 . 05 , 0 , 50 , 1 , 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 39 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3640 , 3600 , N ' T ' , N ' DQ_DISCIPLINE ' , N ' 违反赛场纪律 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 40 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3641 , 3600 , N ' T ' , N ' DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 41 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3642 , 3600 , N ' T ' , N ' DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 42 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3643 , 3600 , N ' T ' , N ' DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 43 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3644 , 3600 , N ' T ' , N ' DQ_UNCIVILIZED ' , N ' 比赛中嚼口香糖/不文明用语等 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 44 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3645 , 3600 , N ' T ' , N ' DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 45 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3646 , 3600 , N ' T ' , N ' DQ_LATE_60S ' , N ' 运动员(队)被叫超过60秒未上场 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 46 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3647 , 3600 , N ' T ' , N ' DQ_TATTOO ' , N ' 显露纹身 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 47 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3701 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 1 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3702 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 2 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3703 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 3 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3704 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 4 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3705 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 5 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3706 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 6 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3707 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 7 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3708 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 8 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3709 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 9 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3710 , 3700 , N ' DGA ' , N ' DP_DM_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DP_DM","subjectName":"DP+DM(个人绳)"} ' , 10 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3711 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 11 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3712 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 12 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3713 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 13 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3714 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 14 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3715 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 15 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3716 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 16 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3717 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 17 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3718 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 18 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3719 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 19 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3720 , 3700 , N ' DGA ' , N ' DA_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DA","subjectName":"DA(车轮跳)"} ' , 20 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3721 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 21 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3722 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 22 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3723 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 23 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3724 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 24 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3725 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 25 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3726 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 26 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3727 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 27 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3728 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 28 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3729 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 29 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3730 , 3700 , N ' DGA ' , N ' DT_INTERACTION_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_INTERACTION","subjectName":"DT(交互绳)"} ' , 30 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3731 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 31 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3732 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 32 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3733 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 33 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3734 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 34 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3735 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 35 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3736 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 36 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3737 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 37 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3738 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 38 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3739 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 39 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3740 , 3700 , N ' DGA ' , N ' DT_TRAVEL_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DT_TRAVEL","subjectName":"DT(旅行跳)"} ' , 40 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3741 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 41 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3742 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 42 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3743 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 43 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3744 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 44 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3745 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 45 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3746 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 46 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3747 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 47 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3748 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 48 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3749 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 49 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3750 , 3700 , N ' DGB ' , N ' DR_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DR","subjectName":"DR(个人绳)"} ' , 50 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3751 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 51 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3752 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 52 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3753 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 53 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3754 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 54 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3755 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 55 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3756 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 56 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3757 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 57 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3758 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 58 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3759 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 59 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3760 , 3700 , N ' DGB ' , N ' DB_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DB","subjectName":"DB(车轮跳)"} ' , 60 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3761 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 61 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3762 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 62 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3763 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 63 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3764 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 64 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3765 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 65 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3766 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 66 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3767 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 67 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3768 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 68 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3769 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 69 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3770 , 3700 , N ' DGB ' , N ' DJ_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DJ","subjectName":"DJ(交互绳)"} ' , 70 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3771 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_0 ' , N ' 0 级 ' , 1 , NULL , 0 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 71 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3772 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_0_5 ' , N ' 0.5 级 ' , 1 , NULL , 0 . 12 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 72 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3773 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_1 ' , N ' 1 级 ' , 1 , NULL , 0 . 15 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 73 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3774 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_2 ' , N ' 2 级 ' , 1 , NULL , 0 . 23 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 74 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3775 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_3 ' , N ' 3 级 ' , 1 , NULL , 0 . 34 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 75 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3776 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_4 ' , N ' 4 级 ' , 1 , NULL , 0 . 51 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 76 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3777 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_5 ' , N ' 5 级 ' , 1 , NULL , 0 . 76 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 77 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3778 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_6 ' , N ' 6 级 ' , 1 , NULL , 1 . 14 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 78 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3779 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_7 ' , N ' 7 级 ' , 1 , NULL , 1 . 71 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 79 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3780 , 3700 , N ' DGB ' , N ' DL_DIFF_LEVEL_8 ' , N ' 8 级 ' , 1 , NULL , 2 . 56 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 1 , 0 , N ' {"inputMode":"count","unitLabel":"个","subjectCode":"DL","subjectName":"DL(长绳)"} ' , 80 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3781 , 3700 , N ' P ' , N ' MUSIC_PLUS ' , N ' 音乐(加数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":1} ' , 81 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3782 , 3700 , N ' P ' , N ' MUSIC_MINUS ' , N ' 音乐(减数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"MUSIC","adjustSign":-1} ' , 82 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3783 , 3700 , N ' P ' , N ' MUSIC_SCORE ' , N ' 音乐 ' , 3 , NULL , 1 . 0 , 0 . 0 , 24 . 0 , 1 . 0 , 12 . 0 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"MUSIC","dimensionWeight":0.20,"baseValue":12.0} ' , 83 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3784 , 3700 , N ' P ' , N ' QUALITY_PLUS ' , N ' 完成质量(加数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":1} ' , 84 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3785 , 3700 , N ' P ' , N ' QUALITY_MINUS ' , N ' 完成质量(减数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"QUALITY","adjustSign":-1} ' , 85 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3786 , 3700 , N ' P ' , N ' QUALITY_SCORE ' , N ' 完成质量 ' , 3 , NULL , 1 . 0 , 0 . 0 , 24 . 0 , 1 . 0 , 12 . 0 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"QUALITY","dimensionWeight":0.25,"baseValue":12.0} ' , 86 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3787 , 3700 , N ' P ' , N ' ENTERTAINMENT_PLUS ' , N ' 娱乐(加数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":1} ' , 87 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3788 , 3700 , N ' P ' , N ' ENTERTAINMENT_MINUS ' , N ' 娱乐(减数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"ENTERTAINMENT","adjustSign":-1} ' , 88 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3789 , 3700 , N ' P ' , N ' ENTERTAINMENT_SCORE ' , N ' 娱乐 ' , 3 , NULL , 1 . 0 , 0 . 0 , 24 . 0 , 1 . 0 , 12 . 0 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"ENTERTAINMENT","dimensionWeight":0.25,"baseValue":12.0} ' , 89 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3790 , 3700 , N ' P ' , N ' CREATIVITY_PLUS ' , N ' 创意(加数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":1} ' , 90 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3791 , 3700 , N ' P ' , N ' CREATIVITY_MINUS ' , N ' 创意(减数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"CREATIVITY","adjustSign":-1} ' , 91 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3792 , 3700 , N ' P ' , N ' CREATIVITY_SCORE ' , N ' 创意 ' , 3 , NULL , 1 . 0 , 0 . 0 , 24 . 0 , 1 . 0 , 12 . 0 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"CREATIVITY","dimensionWeight":0.15,"baseValue":12.0} ' , 92 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3793 , 3700 , N ' P ' , N ' VARIETY_PLUS ' , N ' 多样性(加数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":1} ' , 93 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3794 , 3700 , N ' P ' , N ' VARIETY_MINUS ' , N ' 多样性(减数量) ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 2 , 0 , N ' {"inputMode":"count","unitLabel":"次","dimensionCode":"VARIETY","adjustSign":-1} ' , 94 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3795 , 3700 , N ' P ' , N ' VARIETY_SCORE ' , N ' 多样性 ' , 3 , NULL , 1 . 0 , 0 . 0 , 24 . 0 , 1 . 0 , 12 . 0 , 1 , 2 , 0 , N ' {"inputMode":"score","isAuto":true,"dimensionCode":"VARIETY","dimensionWeight":0.15,"baseValue":12.0} ' , 95 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3796 , 3700 , N ' P ' , N ' FAILURE_COUNT ' , N ' 失误次数 ' , 3 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 0 , 0 , N ' {"inputMode":"count","unitLabel":"次","isFailureCount":true,"remark":"表现裁判记一次失误,其对应的表现五个方面(音乐,完成质量,创意,娱乐和多样性)减数量+1"} ' , 96 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3797 , 3700 , N ' T ' , N ' T_FAILURE ' , N ' 失误 ' , 4 , NULL , 0 . 05 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次","stepDeductions":[0.05,0.075,0.1],"remark":"第1次扣0.05, 第2次扣0.075, 第3次起每次扣0.1"} ' , 97 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3798 , 3700 , N ' T ' , N ' T_VIOLATION ' , N ' 违例 ' , 4 , NULL , 0 . 05 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 4 , 0 , N ' {"inputMode":"count","unitLabel":"次"} ' , 98 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3799 , 3700 , N ' T ' , N ' REQ_SINGLE_ROPE ' , N ' 个人绳 ' , 2 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 99 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3800 , 3700 , N ' T ' , N ' REQ_WHEEL ' , N ' 车轮跳 ' , 2 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 100 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3801 , 3700 , N ' T ' , N ' REQ_WIRE ' , N ' 交互绳 ' , 2 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 101 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3802 , 3700 , N ' T ' , N ' REQ_LONG_ROPE ' , N ' 长绳 ' , 2 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 102 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3803 , 3700 , N ' T ' , N ' REQ_TRAVEL ' , N ' 旅行跳 ' , 2 , NULL , 1 . 0 , 0 . 0 , 50 . 0 , 1 . 0 , 0 . 0 , 0 , 3 , 0 , N ' {"inputMode":"count","unitLabel":"个","requiredAsCategory":true} ' , 103 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3804 , 3700 , N ' T ' , N ' REQUIRED_MISSING ' , N ' 规定元素缺失(个) ' , 2 , NULL , NULL , 0 . 0 , 5 . 0 , 1 . 0 , 0 . 0 , 1 , 0 , 0 , N ' {"inputMode":"score","isAuto":true,"unitLabel":"个","requiredTarget":5.0} ' , 104 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3805 , 3700 , N ' T ' , N ' DQ_DISCIPLINE ' , N ' 违反赛场纪律 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 105 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3806 , 3700 , N ' T ' , N ' DQ_MEMBER_COUNT ' , N ' 参赛人员不符合规定(不足或超过) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 106 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3807 , 3700 , N ' T ' , N ' DQ_NO_ROPE_SHOES ' , N ' 未穿跳绳鞋 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 107 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3808 , 3700 , N ' T ' , N ' DQ_EXTERNAL_AID ' , N ' 使用外部助力器材 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 108 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3809 , 3700 , N ' T ' , N ' DQ_UNCIVILIZED ' , N ' 比赛中嚼口香糖/不文明用语等 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 109 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3810 , 3700 , N ' T ' , N ' DQ_ANTI_OLYMPIC ' , N ' 有悖奥林匹克精神的元素(描绘暴力、战争、宗教、色情有关的元素) ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 110 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3811 , 3700 , N ' T ' , N ' DQ_LATE_60S ' , N ' 运动员(队)被叫超过60秒未上场 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 111 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ,
( 3812 , 3700 , N ' T ' , N ' DQ_TATTOO ' , N ' 显露纹身 ' , 5 , NULL , NULL , NULL , NULL , NULL , NULL , 2 , 0 , 0 , NULL , 112 , 0 , 1000 , N ' 2026-08-19T00:00:00 ' ) ;
2026-08-30 21:46:05 +08:00
UPDATE i SET ItemName = s . ItemName , ItemType = s . ItemType , ParentItemCode = s . ParentItemCode , UnitValue = s . UnitValue , MinValue = s . MinValue ,
MaxValue = s . MaxValue , StepValue = s . StepValue , DefaultValue = s . DefaultValue , CalcMode = s . CalcMode , ScoreDimension = s . ScoreDimension ,
IsRequired = s . IsRequired , ExtensionJson = s . ExtensionJson , Sort = s . Sort , DeleteMark = 0 , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
FROM dbo . ScoreRuleItem i JOIN #RuleMap m ON m.TargetId=i.ScoreRuleId
JOIN #ItemSeed s ON s.SourceRuleId=m.SourceId AND s.JudgeRoleType=i.JudgeRoleType AND s.ItemCode=i.ItemCode
WHERE EXISTS ( SELECT i . ItemName , i . ItemType , i . ParentItemCode , i . UnitValue , i . MinValue , i . MaxValue , i . StepValue , i . DefaultValue , i . CalcMode , i . ScoreDimension , i . IsRequired , i . ExtensionJson , i . Sort , i . DeleteMark
EXCEPT SELECT s . ItemName , s . ItemType , s . ParentItemCode , s . UnitValue , s . MinValue , s . MaxValue , s . StepValue , s . DefaultValue , s . CalcMode , s . ScoreDimension , s . IsRequired , s . ExtensionJson , s . Sort , CONVERT ( BIT , 0 ) ) ;
INSERT dbo . ScoreRuleItem ( Id , ScoreRuleId , JudgeRoleType , ItemCode , ItemName , ItemType , ParentItemCode , UnitValue , MinValue , MaxValue , StepValue , DefaultValue , CalcMode , ScoreDimension , IsRequired , ExtensionJson , Sort , DeleteMark , CreatedUserId , CreatedTime )
SELECT s . Id , m . TargetId , s . JudgeRoleType , s . ItemCode , s . ItemName , s . ItemType , s . ParentItemCode , s . UnitValue , s . MinValue , s . MaxValue , s . StepValue , s . DefaultValue , s . CalcMode , s . ScoreDimension , s . IsRequired , s . ExtensionJson , s . Sort , s . DeleteMark , s . CreatedUserId , s . CreatedTime
FROM #ItemSeed s JOIN #RuleMap m ON m.SourceId=s.SourceRuleId
WHERE NOT EXISTS ( SELECT 1 FROM dbo . ScoreRuleItem i WHERE i . ScoreRuleId = m . TargetId AND i . JudgeRoleType = s . JudgeRoleType AND i . ItemCode = s . ItemCode AND i . DeleteMark = 0 )
AND NOT EXISTS ( SELECT 1 FROM dbo . ScoreRuleItem i WHERE i . Id = s . Id ) ;
IF EXISTS ( SELECT 1 FROM #ItemSeed s JOIN #RuleMap m ON m.SourceId=s.SourceRuleId WHERE NOT EXISTS(SELECT 1 FROM dbo.ScoreRuleItem i WHERE i.ScoreRuleId=m.TargetId AND i.JudgeRoleType=s.JudgeRoleType AND i.ItemCode=s.ItemCode AND i.DeleteMark=0))
THROW 51004 , N ' 计分规则明细种子ID被占用且业务键不存在, 无法安全初始化。 ' , 1 ;
2026-09-15 09:50:40 +08:00
/* 4.2.1 交互绳基础项目必须绑定交互绳规则,避免新编排场次继承到无评分项的旧规则。 */
2026-09-17 10:25:06 +08:00
DECLARE @ WireRuleId BIGINT = ( SELECT TOP 1 Id FROM dbo . ScoreRule WHERE RuleCode LIKE N ' ROPE_FREESTYLE_WIRE_% ' AND DeleteMark = 0 ORDER BY Id ) ;
IF @ WireRuleId IS NULL THROW 51012 , N ' 未找到交互绳花样计分规则( ROPE_FREESTYLE_WIRE_*)。 ' , 1 ;
2026-09-15 09:50:40 +08:00
UPDATE dbo . Project
SET ScoreRuleId = @ WireRuleId , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
WHERE Name IN ( N ' 2人交互绳 ' , N ' 3人交互绳 ' )
AND DeleteMark = 0
AND ISNULL ( ScoreRuleId , 0 ) < > @ WireRuleId ;
2026-08-30 21:46:05 +08:00
/* 4.3 角色: Id=1003 “打分系统单位(scoringunit)”; 若该Id被其他编码占用则报错终止 */
IF EXISTS ( SELECT 1 FROM dbo . SysRole WHERE Id = 1003 AND Code < > N ' scoringunit ' ) THROW 51005 , N ' SysRole.Id=1003 已被其他角色占用。 ' , 1 ;
IF NOT EXISTS ( SELECT 1 FROM dbo . SysRole WHERE Id = 1003 )
INSERT dbo . SysRole ( Id , Name , Code , Status , Sort , Remark , DeleteMark , CreatedUserId , CreatedTime ) VALUES ( 1003 , N ' 打分系统单位 ' , N ' scoringunit ' , 0 , 4 , N ' 打分系统单位账号 ' , 0 , 1000 , ' 2023-06-01 ' ) ;
ELSE UPDATE dbo . SysRole SET Name = N ' 打分系统单位 ' , Code = N ' scoringunit ' , Status = 0 , Sort = 4 , Remark = N ' 打分系统单位账号 ' , DeleteMark = 0 WHERE Id = 1003 ;
2026-09-06 22:33:52 +08:00
/* 4.4 菜单 / 按钮: 独立单位管理、打分系统工作台及模块、2010裁判管理 */
2026-09-04 17:15:03 +08:00
IF NOT EXISTS ( SELECT 1 FROM dbo . SysMenu WHERE Id = 1047 AND Code = N ' permission:account ' AND DeleteMark = 0 )
THROW 51006 , N ' 未找到权限管理-账号管理菜单( Id=1047, Code=permission:account) 。 ' , 1 ;
IF EXISTS ( SELECT 1 FROM dbo . SysMenu WHERE Id = 1080 AND ISNULL ( Code , N ' ' ) < > N ' system:unit ' )
THROW 51006 , N ' SysMenu.Id=1080 已被其他菜单占用。 ' , 1 ;
2026-09-06 22:33:52 +08:00
/* 保留独立单位管理菜单,账号管理仅维护后台系统账号。 */
2026-08-30 21:46:05 +08:00
CREATE TABLE #MenuSeed(Id BIGINT PRIMARY KEY,Name NVARCHAR(32),Type INT,Code NVARCHAR(128),ParentId BIGINT,RouteName NVARCHAR(32),Path NVARCHAR(128),Component NVARCHAR(128),Redirect NVARCHAR(128),Icon NVARCHAR(64),IsIframe BIT,Link NVARCHAR(256),IsVisible BIT,IsKeepAlive BIT,IsFixed BIT,Status INT,Sort INT,Remark NVARCHAR(256),DeleteMark BIT,CreatedUserId BIGINT,CreatedTime DATETIME2(3));
INSERT #MenuSeed VALUES
2026-09-06 22:33:52 +08:00
( 1080 , N ' 单位管理 ' , 1 , N ' system:unit ' , 1070 , N ' systemunit ' , N ' /system/unit ' , N ' system/unit/index ' , N ' ' , N ' ele-OfficeBuilding ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 4 , N ' 单位管理 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1081 , N ' 打分账号-新增 ' , 2 , N ' system:unit:add ' , 1080 , N ' btn_system_unit_add ' , N ' ' , N ' ' , N ' ' , N ' ' , 0 , N ' ' , 0 , 1 , 0 , 0 , 1 , N ' 单位管理:账号新增 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1082 , N ' 打分账号-编辑 ' , 2 , N ' system:unit:edit ' , 1080 , N ' btn_system_unit_edit ' , N ' ' , N ' ' , N ' ' , N ' ' , 0 , N ' ' , 0 , 1 , 0 , 0 , 2 , N ' 单位管理:账号编辑 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1083 , N ' 打分账号-删除 ' , 2 , N ' system:unit:delete ' , 1080 , N ' btn_system_unit_delete ' , N ' ' , N ' ' , N ' ' , N ' ' , 0 , N ' ' , 0 , 1 , 0 , 0 , 3 , N ' 单位管理:账号删除 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1084 , N ' 打分账号-启用禁用 ' , 2 , N ' system:unit:status ' , 1080 , N ' btn_system_unit_status ' , N ' ' , N ' ' , N ' ' , N ' ' , 0 , N ' ' , 0 , 1 , 0 , 0 , 4 , N ' 单位管理:账号状态 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1085 , N ' 打分账号-重置密码 ' , 2 , N ' system:unit:resetpwd ' , 1080 , N ' btn_system_unit_resetpwd ' , N ' ' , N ' ' , N ' ' , N ' ' , 0 , N ' ' , 0 , 1 , 0 , 0 , 5 , N ' 单位管理:重置密码 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1086 , N ' 打分系统工作台 ' , 0 , N ' scoring ' , NULL , N ' scoring ' , N ' /scoring ' , N ' Layout ' , N ' /scoring/launcher ' , N ' ele-Trophy ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 190 , N ' 打分系统工作台 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1087 , N ' 工作台 ' , 1 , N ' scoring:launcher ' , 1086 , N ' scoringLauncher ' , N ' /scoring/launcher ' , N ' scoring/launcher/index ' , N ' ' , N ' ele-Monitor ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 1 , N ' 选择计分模式和赛事 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1088 , N ' 秩序册 ' , 1 , N ' scoring:orderbook ' , 1086 , N ' scoringOrderBook ' , N ' /scoring/orderbook ' , N ' scoring/orderbook/index ' , N ' ' , N ' ele-Notebook ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 2 , N ' 秩序册导入 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1089 , N ' 成绩管理 ' , 1 , N ' scoring:workbench ' , 1086 , N ' scoringWorkbench ' , N ' /scoring/workbench ' , N ' scoring/workbench/index ' , N ' ' , N ' ele-Management ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 3 , N ' 成绩管理 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 1090 , N ' 成绩投屏 ' , 1 , N ' scoring:cast ' , 1086 , N ' scoringCast ' , N ' /scoring/cast ' , N ' scoring/workbench/index ' , N ' ' , N ' ele-DataLine ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 4 , N ' 成绩投屏操作台 ' , 0 , 1000 , N ' 2023-06-01 ' ) ,
( 2010 , N ' 裁判管理 ' , 1 , N ' referee ' , NULL , N ' referee ' , N ' /referee ' , N ' match/referee/index ' , N ' ' , N ' ele-UserFilled ' , 0 , N ' ' , 1 , 1 , 0 , 0 , 245 , N ' 裁判库管理 ' , 0 , 1000 , N ' 2023-06-01 ' ) ;
2026-08-30 21:46:05 +08:00
IF EXISTS ( SELECT 1 FROM #MenuSeed s JOIN dbo.SysMenu m ON m.Id=s.Id WHERE ISNULL(m.Code,N'')<>ISNULL(s.Code,N'')) THROW 51006,N'二期菜单ID已被其他菜单占用。',1;
UPDATE m SET Name = s . Name , Type = s . Type , Code = s . Code , ParentId = s . ParentId , RouteName = s . RouteName , Path = s . Path , Component = s . Component , Redirect = s . Redirect , Icon = s . Icon , IsIframe = s . IsIframe , Link = s . Link , IsVisible = s . IsVisible , IsKeepAlive = s . IsKeepAlive , IsFixed = s . IsFixed , Status = s . Status , Sort = s . Sort , Remark = s . Remark , DeleteMark = 0 , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
FROM dbo . SysMenu m JOIN #MenuSeed s ON s.Id=m.Id
WHERE EXISTS ( SELECT m . Name , m . Type , m . Code , m . ParentId , m . RouteName , m . Path , m . Component , m . Redirect , m . Icon , m . IsIframe , m . Link , m . IsVisible , m . IsKeepAlive , m . IsFixed , m . Status , m . Sort , m . Remark , m . DeleteMark
EXCEPT SELECT s . Name , s . Type , s . Code , s . ParentId , s . RouteName , s . Path , s . Component , s . Redirect , s . Icon , s . IsIframe , s . Link , s . IsVisible , s . IsKeepAlive , s . IsFixed , s . Status , s . Sort , s . Remark , CONVERT ( BIT , 0 ) ) ;
INSERT dbo . SysMenu ( Id , Name , Type , Code , ParentId , RouteName , Path , Component , Redirect , Icon , IsIframe , Link , IsVisible , IsKeepAlive , IsFixed , Status , Sort , Remark , DeleteMark , CreatedUserId , CreatedTime )
SELECT Id , Name , Type , Code , ParentId , RouteName , Path , Component , Redirect , Icon , IsIframe , Link , IsVisible , IsKeepAlive , IsFixed , Status , Sort , Remark , DeleteMark , CreatedUserId , CreatedTime FROM #MenuSeed s WHERE NOT EXISTS(SELECT 1 FROM dbo.SysMenu m WHERE m.Id=s.Id);
2026-09-06 22:33:52 +08:00
/* 4.5 角色-菜单授权: 按角色和菜单匹配已有关系, 缺失关系自动生成新Id */
DECLARE @ RoleMenuSeed TABLE ( Id BIGINT NULL , RoleId BIGINT , MenuId BIGINT , SeedOrder INT IDENTITY ( 1 , 1 ) , PRIMARY KEY ( RoleId , MenuId ) ) ;
INSERT @ RoleMenuSeed ( RoleId , MenuId ) VALUES
( 1000 , 1080 ) , ( 1000 , 1081 ) , ( 1000 , 1082 ) , ( 1000 , 1083 ) , ( 1000 , 1084 ) , ( 1000 , 1085 ) , ( 1000 , 1086 ) , ( 1000 , 1087 ) , ( 1000 , 1088 ) , ( 1000 , 1089 ) , ( 1000 , 1090 ) , ( 1000 , 2010 ) ,
( 1003 , 1086 ) , ( 1003 , 1087 ) , ( 1003 , 1088 ) , ( 1003 , 1089 ) , ( 1003 , 1090 ) ,
( 1001 , 1086 ) , ( 1001 , 1089 ) , ( 1001 , 1090 ) ;
DECLARE @ RoleMenuNextId BIGINT ;
SELECT @ RoleMenuNextId = ISNULL ( MAX ( Id ) , 0 ) FROM dbo . SysRoleMenu WITH ( UPDLOCK , HOLDLOCK ) ;
UPDATE s SET Id = rm . Id
FROM @ RoleMenuSeed s
JOIN dbo . SysRoleMenu rm ON rm . RoleId = s . RoleId AND rm . MenuId = s . MenuId ;
UPDATE @ RoleMenuSeed SET Id = @ RoleMenuNextId + SeedOrder WHERE Id IS NULL ;
2026-08-30 21:46:05 +08:00
INSERT dbo . SysRoleMenu ( Id , RoleId , MenuId , CreatedUserId , CreatedTime , DeleteMark )
2026-09-06 22:33:52 +08:00
SELECT s . Id , s . RoleId , s . MenuId , 1000 , ' 2023-06-01 ' , 0
FROM @ RoleMenuSeed s
WHERE NOT EXISTS ( SELECT 1 FROM dbo . SysRoleMenu rm WHERE rm . RoleId = s . RoleId AND rm . MenuId = s . MenuId ) ;
UPDATE rm SET DeleteMark = 0 , UpdatedUserId = 1000 , UpdatedTime = SYSUTCDATETIME ( )
FROM dbo . SysRoleMenu rm JOIN @ RoleMenuSeed s ON s . RoleId = rm . RoleId AND s . MenuId = rm . MenuId ;
2026-08-30 21:46:05 +08:00
/* ====================================================================================
[ 5 / 9 ] 可 编 程 对 象 · 标 量 函 数 / 视 图 / 存 储 过 程 ( CREATE OR ALTER , 可 重 复 执 行 ; 用 EXEC 包 裹 规 避 批 处 理 分 隔 )
1 个 标 量 函 数 + 3 个 视 图 + 2 个 存 储 过 程
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [5/9] 可编程对象:创建函数、视图与存储过程 ' ;
2026-09-04 17:15:03 +08:00
/* 标量函数:成绩状态码 -> 中文名( 0计算中 / 10待复核 / 20已确认 / 30已投屏 / 40已更正 / 90作废) */
2026-08-30 21:46:05 +08:00
EXEC ( N ' CREATE OR ALTER FUNCTION dbo.fn_Phase2_ResultStatusName(@ResultStatus INT)
2026-09-04 17:15:03 +08:00
RETURNS NVARCHAR ( 32 ) AS BEGIN RETURN CASE @ ResultStatus WHEN 0 THEN N ' ' 计 算 中 ' ' WHEN 10 THEN N ' ' 待 复 核 ' ' WHEN 20 THEN N ' ' 已 确 认 ' ' WHEN 30 THEN N ' ' 已 投 屏 ' ' WHEN 40 THEN N ' ' 已 更 正 ' ' WHEN 90 THEN N ' ' 已 作 废 ' ' ELSE N ' ' 未 知 ' ' END END ' );
2026-08-30 21:46:05 +08:00
/* 视图:裁判席位分配明细(关联场次 / 场地 / 裁判档案) */
EXEC ( N ' CREATE OR ALTER VIEW dbo.vw_Phase2_JudgeAssignment AS
SELECT a . Id AS AssignmentId , a . EventId , a . SessionId , s . SessionNo , s . SessionName , v . VenueCode , v . VenueName ,
a . EventRefereeId , a . RefereeId , r . Name AS RefereeName , r . Mobile , a . JudgeUserId , a . JudgeRole , a . JudgeRoleType ,
a . AssignmentStatus , a . SubmittedTime , a . Status , a . DeleteMark
FROM dbo . EventJudgeAssignment a
JOIN dbo . EventSession s ON s . Id = a . SessionId
JOIN dbo . EventVenue v ON v . Id = s . VenueId
JOIN dbo . Referee r ON r . Id = a . RefereeId ' );
/* 视图:场次内每个出场的应收 / 已收评分单进度 */
EXEC ( N ' CREATE OR ALTER VIEW dbo.vw_Phase2_SessionScoreProgress AS
SELECT e . SessionId , e . Id AS SessionEntryId , e . EntryNo , e . PlayOrder , e . ParticipantName ,
COUNT ( DISTINCT CASE WHEN a . DeleteMark = 0 AND a . Status = 0 THEN a . Id END ) AS ExpectedJudgeCount ,
COUNT ( DISTINCT CASE WHEN sh . DeleteMark = 0 AND sh . IsCurrent = 1 AND sh . SheetStatus > = 10 THEN sh . JudgeAssignmentId END ) AS SubmittedJudgeCount ,
MAX ( sh . SubmittedTime ) AS LastSubmittedTime
FROM dbo . EventSessionEntry e
LEFT JOIN dbo . EventJudgeAssignment a ON a . SessionId = e . SessionId
LEFT JOIN dbo . EventJudgeScoreSheet sh ON sh . SessionEntryId = e . Id AND sh . JudgeAssignmentId = a . Id
WHERE e . DeleteMark = 0
GROUP BY e . SessionId , e . Id , e . EntryNo , e . PlayOrder , e . ParticipantName ' );
/* 视图:对外公开成绩(仅已确认 / 已发布 / 已投屏且未作废的出场) */
EXEC ( N ' CREATE OR ALTER VIEW dbo.vw_Phase2_PublicResult AS
SELECT r . Id , r . EventId , r . SessionId , r . SessionEntryId , e . EntryNo , e . ParticipantName , e . TeamName , e . GroupName ,
r . DifficultyScore , r . PerformanceScore , r . RequiredScore , r . DeductionScore , r . TotalScore , r . [ Rank ] ,
r . IsDisqualified , r . DisqualifyReasonCode , r . ResultStatus , r . ResultVersion ,
dbo . fn_Phase2_ResultStatusName ( r . ResultStatus ) AS ResultStatusName
FROM dbo . EventResult r
JOIN dbo . EventSessionEntry e ON e . Id = r . SessionEntryId
WHERE r . DeleteMark = 0 AND r . Status = 0 AND e . DeleteMark = 0 AND e . IsVoided = 0 AND r . ResultStatus IN ( 20 , 30 , 40 ) ' );
/* 存储过程:查询指定场次评分进度(按出场顺序) */
EXEC ( N ' CREATE OR ALTER PROCEDURE dbo.usp_Phase2_GetSessionScoreProgress @SessionId BIGINT AS
BEGIN SET NOCOUNT ON ; SELECT * FROM dbo . vw_Phase2_SessionScoreProgress WHERE SessionId = @ SessionId ORDER BY PlayOrder ; END ' );
/* 存储过程:部署自检(二期表 / 视图 / 例程清单 + 各规则明细条数) */
EXEC ( N ' CREATE OR ALTER PROCEDURE dbo.usp_Phase2_ValidateDeployment AS
BEGIN SET NOCOUNT ON ;
SELECT N ' ' Table ' ' AS ObjectType , t . name AS ObjectName FROM sys . tables t WHERE t . name IN
2026-09-08 14:07:59 +08:00
( ' ' RefereeApplication ' ' , ' ' CheckinTask ' ' , ' ' CheckinRecord ' ' , ' ' Referee ' ' , ' ' EventReferee ' ' , ' ' EventJudgeAssignment ' ' , ' ' EventJudgeTask ' ' , ' ' EventVenue ' ' , ' ' EventSession ' ' , ' ' EventSessionEntry ' ' , ' ' EventSessionEntryRematch ' ' , ' ' EventJudgeMessage ' ' , ' ' ScoreRule ' ' , ' ' ScoreRuleItem ' ' , ' ' EventJudgeScoreSheet ' ' , ' ' EventJudgeScoreAttachment ' ' , ' ' EventJudgeScoreDetail ' ' , ' ' EventResultVersion ' ' , ' ' EventScoreCorrection ' ' , ' ' EventResultScreenCast ' ' )
2026-08-30 21:46:05 +08:00
UNION ALL SELECT N ' ' View ' ' , name FROM sys . views WHERE name LIKE ' ' vw_Phase2 [ _ ] % ' '
UNION ALL SELECT N ' ' Routine ' ' , name FROM sys . objects WHERE type IN ( ' ' P ' ' , ' ' FN ' ' ) AND ( name LIKE ' ' usp_Phase2 [ _ ] % ' ' OR name LIKE ' ' fn_Phase2 [ _ ] % ' ' ) ;
2026-09-17 10:25:06 +08:00
SELECT r . RuleCode , COUNT ( i . Id ) AS ItemCount FROM dbo . ScoreRule r LEFT JOIN dbo . ScoreRuleItem i ON i . ScoreRuleId = r . Id AND i . DeleteMark = 0 WHERE r . RuleCode IN ( ' ' ROPE_PRESCRIBED ' ' , ' ' ROPE_PRESCRIBED_SINGLE ' ' , ' ' ROPE_PRESCRIBED_DOUBLE_SYNC ' ' , ' ' ROPE_PRESCRIBED_QUAD_SYNC ' ' , ' ' ROPE_FREESTYLE_WHEEL_PAIR ' ' , ' ' ROPE_FREESTYLE_WIRE_TRIPLE ' ' , ' ' ROPE_FREESTYLE_WIRE_QUAD ' ' , ' ' ROPE_SHOWCASE ' ' ) AND r . DeleteMark = 0 GROUP BY r . RuleCode ; END ' );
2026-08-30 21:46:05 +08:00
/* ====================================================================================
[ 6 / 9 ] 权 限 · 创 建 三 个 最 小 权 限 数 据 库 角 色 并 授 权
yd_phase2_app_rw 应 用 读 写 : 业 务 表 SELECT / INSERT / UPDATE + 视 图 查 询 + 例 程 执 行 , 关 键 留 痕 表 禁 止 DELETE
yd_phase2_app_ro 只 读 : 业 务 表 / 视 图 SELECT ; yd_phase2_executor 执 行 器 : 仅 执 行 自 检 / 进 度 存 储 过 程
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
PRINT N ' [6/9] 权限:配置最小权限数据库角色 ' ;
/* 6.1 创建三个数据库角色(已存在则跳过) */
IF DATABASE_PRINCIPAL_ID ( N ' yd_phase2_app_rw ' ) IS NULL CREATE ROLE [ yd_phase2_app_rw ] AUTHORIZATION [ dbo ] ;
IF DATABASE_PRINCIPAL_ID ( N ' yd_phase2_app_ro ' ) IS NULL CREATE ROLE [ yd_phase2_app_ro ] AUTHORIZATION [ dbo ] ;
IF DATABASE_PRINCIPAL_ID ( N ' yd_phase2_executor ' ) IS NULL CREATE ROLE [ yd_phase2_executor ] AUTHORIZATION [ dbo ] ;
/* 6.2 视图授权:只读角色、读写角色均可 SELECT */
PRINT N ' - grants: views -> read-only ' ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_JudgeAssignment TO [yd_phase2_app_ro]; ' ) ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_SessionScoreProgress TO [yd_phase2_app_ro]; ' ) ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_PublicResult TO [yd_phase2_app_ro]; ' ) ;
PRINT N ' - grants: views -> app-rw ' ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_JudgeAssignment TO [yd_phase2_app_rw]; ' ) ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_SessionScoreProgress TO [yd_phase2_app_rw]; ' ) ;
EXEC ( N ' GRANT SELECT ON OBJECT::dbo.vw_Phase2_PublicResult TO [yd_phase2_app_rw]; ' ) ;
PRINT N ' - grants: procedures ' ;
EXEC ( N ' GRANT EXECUTE ON OBJECT::dbo.usp_Phase2_GetSessionScoreProgress TO [yd_phase2_app_rw]; ' ) ;
EXEC ( N ' GRANT EXECUTE ON OBJECT::dbo.usp_Phase2_GetSessionScoreProgress TO [yd_phase2_executor]; ' ) ;
EXEC ( N ' GRANT EXECUTE ON OBJECT::dbo.usp_Phase2_ValidateDeployment TO [yd_phase2_executor]; ' ) ;
PRINT N ' - grants: function ' ;
EXEC ( N ' GRANT EXECUTE, REFERENCES ON OBJECT::dbo.fn_Phase2_ResultStatusName TO [yd_phase2_app_rw]; ' ) ;
EXEC ( N ' GRANT EXECUTE, REFERENCES ON OBJECT::dbo.fn_Phase2_ResultStatusName TO [yd_phase2_app_ro]; ' ) ;
/* 6.3 业务表授权:游标逐表 GRANT( rw=查增改, ro=查) */
DECLARE @ BusinessTable SYSNAME , @ PermissionSql NVARCHAR ( MAX ) ;
DECLARE business_tables CURSOR LOCAL FAST_FORWARD FOR SELECT [ Name ] FROM ( VALUES
( N ' RefereeApplication ' ) , ( N ' CheckinTask ' ) , ( N ' CheckinRecord ' ) , ( N ' Referee ' ) , ( N ' EventReferee ' ) , ( N ' EventJudgeAssignment ' ) ,
( N ' EventJudgeTask ' ) , ( N ' EventVenue ' ) , ( N ' EventSession ' ) , ( N ' EventSessionEntry ' ) , ( N ' EventSessionEntryRematch ' ) ,
2026-09-08 14:07:59 +08:00
( N ' EventJudgeMessage ' ) , ( N ' ScoreRule ' ) , ( N ' ScoreRuleItem ' ) , ( N ' EventJudgeScoreSheet ' ) , ( N ' EventJudgeScoreAttachment ' ) , ( N ' EventJudgeScoreDetail ' ) ,
2026-08-30 21:46:05 +08:00
( N ' EventResultVersion ' ) , ( N ' EventScoreCorrection ' ) , ( N ' EventResultScreenCast ' ) ) x ( [ Name ] ) ;
OPEN business_tables ; FETCH NEXT FROM business_tables INTO @ BusinessTable ;
WHILE @ @ FETCH_STATUS = 0
BEGIN
SET @ PermissionSql = N ' GRANT SELECT,INSERT,UPDATE ON OBJECT::dbo. ' + QUOTENAME ( @ BusinessTable ) + N ' TO [yd_phase2_app_rw]; GRANT SELECT ON OBJECT::dbo. ' + QUOTENAME ( @ BusinessTable ) + N ' TO [yd_phase2_app_ro]; ' ;
EXEC sys . sp_executesql @ PermissionSql ;
FETCH NEXT FROM business_tables INTO @ BusinessTable ;
END
CLOSE business_tables ; DEALLOCATE business_tables ;
/* 6.4 关键留痕表对读写角色 DENY DELETE, 只允许软删除(DeleteMark) */
DENY DELETE ON OBJECT : : dbo . EventJudgeScoreSheet TO [ yd_phase2_app_rw ] ;
DENY DELETE ON OBJECT : : dbo . EventJudgeScoreDetail TO [ yd_phase2_app_rw ] ;
DENY DELETE ON OBJECT : : dbo . EventResultVersion TO [ yd_phase2_app_rw ] ;
DENY DELETE ON OBJECT : : dbo . EventScoreCorrection TO [ yd_phase2_app_rw ] ;
PRINT N ' [7/9] 执行后置校验 ' ;
DECLARE @ Validation TABLE ( [ Category ] NVARCHAR ( 32 ) , [ Item ] NVARCHAR ( 128 ) , [ Passed ] BIT , [ Actual ] NVARCHAR ( 1000 ) ) ;
DECLARE @ ExpectedTables TABLE ( Name SYSNAME ) ;
2026-09-08 14:07:59 +08:00
INSERT @ ExpectedTables VALUES ( N ' RefereeApplication ' ) , ( N ' CheckinTask ' ) , ( N ' CheckinRecord ' ) , ( N ' Referee ' ) , ( N ' EventReferee ' ) , ( N ' EventJudgeAssignment ' ) , ( N ' EventJudgeTask ' ) , ( N ' EventVenue ' ) , ( N ' EventSession ' ) , ( N ' EventSessionEntry ' ) , ( N ' EventSessionEntryRematch ' ) , ( N ' EventJudgeMessage ' ) , ( N ' ScoreRule ' ) , ( N ' ScoreRuleItem ' ) , ( N ' EventJudgeScoreSheet ' ) , ( N ' EventJudgeScoreAttachment ' ) , ( N ' EventJudgeScoreDetail ' ) , ( N ' EventResultVersion ' ) , ( N ' EventScoreCorrection ' ) , ( N ' EventResultScreenCast ' ) ;
2026-08-30 21:46:05 +08:00
INSERT @ Validation SELECT N ' TABLE ' , Name , CASE WHEN OBJECT_ID ( N ' dbo. ' + QUOTENAME ( Name ) , ' U ' ) IS NOT NULL THEN 1 ELSE 0 END , N ' dbo. ' + Name FROM @ ExpectedTables ;
DECLARE @ ExpectedColumns TABLE ( TableName SYSNAME , ColumnName SYSNAME ) ;
INSERT @ ExpectedColumns VALUES
( N ' AppUser ' , N ' MiniProgramRole ' ) , ( N ' AppUser ' , N ' AuditUserId ' ) , ( N ' AppUser ' , N ' AuditTime ' ) ,
( N ' Referee ' , N ' AuditUserId ' ) , ( N ' Referee ' , N ' AuditTime ' ) ,
( N ' MerchantCertification ' , N ' AuditUserId ' ) , ( N ' MerchantCertification ' , N ' AuditTime ' ) ,
( N ' Merchant ' , N ' AuditUserId ' ) , ( N ' Merchant ' , N ' AuditTime ' ) ,
( N ' CertificateTemplate ' , N ' UpdatedUserId ' ) , ( N ' CertificateTemplate ' , N ' UpdatedTime ' ) ,
( N ' CertificatePlaceholder ' , N ' CreatedUserId ' ) , ( N ' CertificatePlaceholder ' , N ' CreatedTime ' ) , ( N ' CertificatePlaceholder ' , N ' UpdatedUserId ' ) , ( N ' CertificatePlaceholder ' , N ' UpdatedTime ' ) ,
( N ' EventInfo ' , N ' RefereeRegistrationCode ' ) , ( N ' EventRegistrationLimit ' , N ' RefereeLimit ' ) ,
( N ' Project ' , N ' ScoreRuleId ' ) , ( N ' SysUser ' , N ' UnitName ' ) , ( N ' SysUser ' , N ' UnitPlatform ' ) ,
( N ' EventResult ' , N ' SessionId ' ) , ( N ' EventResult ' , N ' SessionEntryId ' ) , ( N ' EventResult ' , N ' TotalScore ' ) , ( N ' EventResult ' , N ' ResultVersion ' ) , ( N ' EventResult ' , N ' ReviewUserId ' ) , ( N ' EventResult ' , N ' ReviewTime ' ) ,
( N ' EventReferee ' , N ' RefereeApplicationId ' ) , ( N ' EventVenue ' , N ' VenueCode ' ) , ( N ' EventJudgeMessage ' , N ' ReceiverUserId ' ) ,
( N ' EventJudgeScoreDetail ' , N ' ScoreRuleItemId ' ) , ( N ' EventResultVersion ' , N ' EventResultId ' ) , ( N ' EventScoreCorrection ' , N ' OriginalScoreSheetId ' ) ;
INSERT @ Validation SELECT N ' COLUMN ' , TableName + N ' . ' + ColumnName , CASE WHEN COL_LENGTH ( N ' dbo. ' + TableName , ColumnName ) IS NOT NULL THEN 1 ELSE 0 END , N ' dbo. ' + TableName + N ' . ' + ColumnName FROM @ ExpectedColumns ;
INSERT @ Validation VALUES
( N ' OBJECT ' , N ' 二期视图 ' , CASE WHEN ( SELECT COUNT ( * ) FROM sys . views WHERE name LIKE ' vw_Phase2[_]% ' ) = 3 THEN 1 ELSE 0 END , CONVERT ( NVARCHAR ( 20 ) , ( SELECT COUNT ( * ) FROM sys . views WHERE name LIKE ' vw_Phase2[_]% ' ) ) ) ,
( N ' OBJECT ' , N ' 二期存储过程 ' , CASE WHEN ( SELECT COUNT ( * ) FROM sys . procedures WHERE name LIKE ' usp_Phase2[_]% ' ) = 2 THEN 1 ELSE 0 END , CONVERT ( NVARCHAR ( 20 ) , ( SELECT COUNT ( * ) FROM sys . procedures WHERE name LIKE ' usp_Phase2[_]% ' ) ) ) ,
( N ' OBJECT ' , N ' 二期函数 ' , CASE WHEN OBJECT_ID ( ' dbo.fn_Phase2_ResultStatusName ' , ' FN ' ) IS NOT NULL THEN 1 ELSE 0 END , N ' fn_Phase2_ResultStatusName ' ) ,
( N ' INDEX ' , N ' 二期索引 ' , CASE WHEN ( SELECT COUNT ( * ) FROM sys . indexes WHERE name IN ( N ' UX_Referee_Mobile_Active ' , N ' UX_EventReferee_Event_Referee_Active ' , N ' UX_EventVenue_Event_Code_Active ' , N ' UX_EventSession_Event_No_Active ' , N ' UX_EventJudgeScoreSheet_Idempotency ' , N ' UX_EventResultVersion_Result_Version ' ) ) = 6 THEN 1 ELSE 0 END , N ' 6个关键索引 ' ) ,
( N ' CONSTRAINT ' , N ' 二期外键 ' , CASE WHEN ( SELECT COUNT ( * ) FROM sys . foreign_keys WHERE name LIKE ' FK[_]% ' AND parent_object_id IN ( SELECT OBJECT_ID ( N ' dbo. ' + QUOTENAME ( Name ) ) FROM @ ExpectedTables ) ) > = 20 THEN 1 ELSE 0 END , CONVERT ( NVARCHAR ( 20 ) , ( SELECT COUNT ( * ) FROM sys . foreign_keys WHERE name LIKE ' FK[_]% ' AND parent_object_id IN ( SELECT OBJECT_ID ( N ' dbo. ' + QUOTENAME ( Name ) ) FROM @ ExpectedTables ) ) ) ) ,
2026-09-17 10:25:06 +08:00
( N ' SEED ' , N ' 计分规则 ' , CASE WHEN ( SELECT COUNT ( DISTINCT r . RuleCode ) FROM dbo . ScoreRule r JOIN #RuleSeed s ON s.RuleCode=r.RuleCode WHERE r.DeleteMark=0)=8 THEN 1 ELSE 0 END,N'期望8条'),
( N ' SEED ' , N ' 计分规则明细 ' , CASE WHEN ( SELECT COUNT ( * ) FROM #ItemSeed s JOIN #RuleMap m ON m.SourceId=s.SourceRuleId JOIN dbo.ScoreRuleItem i ON i.ScoreRuleId=m.TargetId AND i.JudgeRoleType=s.JudgeRoleType AND i.ItemCode=s.ItemCode AND i.DeleteMark=0)=334 THEN 1 ELSE 0 END,N'期望334条'),
2026-09-04 17:15:03 +08:00
( N ' SEED ' , N ' 角色与菜单 ' , CASE WHEN EXISTS ( SELECT 1 FROM dbo . SysRole WHERE Id = 1003 AND Code = ' scoringunit ' AND DeleteMark = 0 )
2026-09-06 22:33:52 +08:00
AND ( SELECT COUNT ( * ) FROM dbo . SysMenu WHERE Id IN ( 1080 , 1081 , 1082 , 1083 , 1084 , 1085 , 1086 , 1087 , 1088 , 1089 , 1090 , 2010 ) AND DeleteMark = 0 ) = 12
AND EXISTS ( SELECT 1 FROM dbo . SysMenu WHERE Id = 1080 AND Code = ' system:unit ' AND ParentId = 1070 AND DeleteMark = 0 )
AND ( SELECT COUNT ( * ) FROM dbo . SysMenu WHERE Id IN ( 1081 , 1082 , 1083 , 1084 , 1085 ) AND ParentId = 1080 AND DeleteMark = 0 ) = 5
AND EXISTS ( SELECT 1 FROM dbo . SysMenu WHERE Id = 1086 AND Code = ' scoring ' AND DeleteMark = 0 )
AND ( SELECT COUNT ( * ) FROM dbo . SysMenu WHERE Id IN ( 1087 , 1088 , 1089 , 1090 ) AND ParentId = 1086 AND DeleteMark = 0 ) = 4
AND ( SELECT COUNT ( * ) FROM dbo . SysRoleMenu WHERE RoleId = 1000 AND MenuId IN ( 1080 , 1086 , 1087 , 1088 , 1089 , 1090 ) AND DeleteMark = 0 ) = 6
AND ( SELECT COUNT ( * ) FROM dbo . SysRoleMenu WHERE RoleId = 1003 AND MenuId IN ( 1086 , 1087 , 1088 , 1089 , 1090 ) AND DeleteMark = 0 ) = 5
AND ( SELECT COUNT ( * ) FROM dbo . SysRoleMenu WHERE RoleId = 1001 AND MenuId IN ( 1086 , 1089 , 1090 ) AND DeleteMark = 0 ) = 3
THEN 1 ELSE 0 END , N ' 单位管理、工作台及三个业务模块、三类角色菜单授权 ' ) ,
2026-08-30 21:46:05 +08:00
( N ' PERMISSION ' , N ' 最小权限角色 ' , CASE WHEN ( SELECT COUNT ( * ) FROM sys . database_principals WHERE name IN ( ' yd_phase2_app_rw ' , ' yd_phase2_app_ro ' , ' yd_phase2_executor ' ) AND type = ' R ' ) = 3 THEN 1 ELSE 0 END , N ' 期望3个数据库角色 ' ) ;
SELECT N ' POSTCHECK ' AS [ Stage ] , [ Category ] , [ Item ] , CASE WHEN Passed = 1 THEN N ' PASS ' ELSE N ' FAIL ' END AS [ Result ] , [ Actual ] FROM @ Validation ORDER BY Passed , [ Category ] , [ Item ] ;
2026-09-06 22:33:52 +08:00
IF EXISTS ( SELECT 1 FROM @ Validation WHERE Passed = 0 )
BEGIN
DECLARE @ FailedValidation NVARCHAR ( 2048 ) ;
SELECT TOP 1 @ FailedValidation = N ' 二期部署后置校验失败: ' + [ Category ] + N ' / ' + [ Item ] + N ' ,实际值: ' + ISNULL ( [ Actual ] , N ' ' ) FROM @ Validation WHERE Passed = 0 ORDER BY [ Category ] , [ Item ] ;
THROW 51008 , @ FailedValidation , 1 ;
END ;
2026-08-30 21:46:05 +08:00
PRINT N ' [8/9] 生成部署摘要 ' ;
SELECT DB_NAME ( ) AS DatabaseName , CONVERT ( NVARCHAR ( 128 ) , SERVERPROPERTY ( ' ProductVersion ' ) ) AS SqlServerVersion ,
( SELECT COUNT ( * ) FROM @ ExpectedTables ) AS Phase2TableCount ,
( SELECT COUNT ( * ) FROM sys . indexes i JOIN sys . tables t ON t . object_id = i . object_id WHERE t . name IN ( SELECT Name FROM @ ExpectedTables ) AND i . name IS NOT NULL ) AS Phase2IndexCount ,
( SELECT COUNT ( * ) FROM sys . foreign_keys f WHERE f . parent_object_id IN ( SELECT OBJECT_ID ( N ' dbo. ' + QUOTENAME ( Name ) ) FROM @ ExpectedTables ) ) AS Phase2ForeignKeyCount ,
( SELECT COUNT ( * ) FROM #RuleSeed) AS RuleSeedCount,(SELECT COUNT(*) FROM #ItemSeed) AS RuleItemSeedCount;
PRINT N ' [9/9] 提交事务 ' ;
COMMIT TRANSACTION ;
PRINT N ' 二期数据库部署成功,事务已提交。 ' ;
END TRY
BEGIN CATCH
DECLARE @ ErrorNumber INT = ERROR_NUMBER ( ) , @ ErrorLine INT = ERROR_LINE ( ) , @ ErrorMessage NVARCHAR ( 4000 ) = ERROR_MESSAGE ( ) ;
IF XACT_STATE ( ) < > 0 ROLLBACK TRANSACTION ;
SELECT N ' FAILED ' AS [ Stage ] , @ ErrorNumber AS ErrorNumber , @ ErrorLine AS ErrorLine , @ ErrorMessage AS ErrorMessage , N ' 所有未提交变更已回滚 ' AS RollbackStatus ;
THROW ;
END CATCH ;