- 成绩工作台移除顶部标题和当前投屏状态栏,将实时同步、大屏配色与检录入口移到项目栏;展示接口返回的当前赛事名称,移除切换赛事按钮。 - 排名大屏展示前三名领奖台与第 4—8 名列表;使用排名行序号区分共用出场编号的选手,修复姓名和分数动画串位,改善长姓名布局。 - 排名持续展示期间增加领奖台光晕、台阶流光及列表扫光,并遵从系统的减少动态效果设置。 - 裁判分配保存及提交按钮增加加载状态和重复点击保护。 - 增加限定 QA 测试库的赛事 59 成绩补齐脚本,仅插入缺失成绩及对应版本,保留已有裁判评分单。 验证:npm run build:local 通过;git diff --check 无异常。
101 lines
5.5 KiB
Transact-SQL
101 lines
5.5 KiB
Transact-SQL
-- 仅为测试库中的赛事“59”补齐正式成绩,用于工作台和排名大屏调试。
|
||
-- 只插入尚无有效成绩的出场记录;不修改裁判评分单及已有成绩。
|
||
SET XACT_ABORT ON;
|
||
SET NOCOUNT ON;
|
||
|
||
BEGIN TRY
|
||
BEGIN TRANSACTION;
|
||
|
||
DECLARE @EventId bigint = 491967903178757;
|
||
IF DB_NAME() <> N'EventServerDB_QA'
|
||
THROW 51000, N'仅允许在 EventServerDB_QA 执行', 1;
|
||
IF NOT EXISTS (SELECT 1 FROM dbo.EventInfo WHERE Id = @EventId AND EventName = N'59' AND DeleteMark = 0)
|
||
THROW 51001, N'目标赛事不存在或名称不符', 1;
|
||
|
||
DECLARE @EntryCount int = (
|
||
SELECT COUNT(*) FROM dbo.EventSessionEntry e
|
||
JOIN dbo.EventSession s ON s.Id = e.SessionId
|
||
WHERE s.EventId = @EventId AND s.DeleteMark = 0 AND e.DeleteMark = 0
|
||
);
|
||
IF @EntryCount <> 10
|
||
THROW 51002, N'赛事出场人数已变化,请先复核脚本', 1;
|
||
|
||
-- 与应用相同的 2023-01-01 UTC 基准和 12 位尾段;预留调试专用 worker 63。
|
||
DECLARE @IdBase bigint = DATEDIFF_BIG(millisecond, '2023-01-01T00:00:00', SYSUTCDATETIME()) * 4096 + 63 * 64;
|
||
|
||
;WITH OrderedEntries AS (
|
||
SELECT e.Id AS EntryId, e.SessionId, s.EventProjectId, s.ScoreRuleId,
|
||
e.ParticipantName, e.GroupName, e.ParticipationRecordId,
|
||
ROW_NUMBER() OVER (PARTITION BY s.EventProjectId, e.GroupName ORDER BY s.CreatedTime, s.Id, e.PlayOrder, e.Id) AS GroupRank,
|
||
s.CreatedTime AS SessionCreatedTime, s.Id AS SessionOrderId, e.PlayOrder
|
||
FROM dbo.EventSessionEntry e
|
||
JOIN dbo.EventSession s ON s.Id = e.SessionId AND s.EventId = @EventId AND s.DeleteMark = 0
|
||
WHERE e.DeleteMark = 0 AND e.IsVoided = 0
|
||
), Missing AS (
|
||
SELECT o.*, ROW_NUMBER() OVER (ORDER BY o.SessionCreatedTime, o.SessionOrderId, o.PlayOrder, o.EntryId) AS SeedNo
|
||
FROM OrderedEntries o
|
||
WHERE NOT EXISTS (SELECT 1 FROM dbo.EventResult r WHERE r.SessionEntryId = o.EntryId AND r.DeleteMark = 0)
|
||
), Factors AS (
|
||
SELECT m.*, CAST(9.75 - (m.GroupRank - 1) * 0.60 AS decimal(18,4)) AS D,
|
||
CAST(0.64 - (m.GroupRank - 1) * 0.02 AS decimal(18,4)) AS P,
|
||
CAST(0.97 - (m.GroupRank - 1) * 0.01 AS decimal(18,4)) AS Q,
|
||
CAST(0.08 + (m.GroupRank - 1) * 0.02 AS decimal(18,4)) AS Deduction
|
||
FROM Missing m
|
||
)
|
||
SELECT f.*, ep.ProjectId, sr.RuleVersion,
|
||
CAST(ROUND(f.D * (1 + f.P) * f.Q * (1 - f.Deduction), 2) AS decimal(18,2)) AS FinalScore,
|
||
@IdBase + f.SeedNo AS ResultId,
|
||
@IdBase + 32 + f.SeedNo AS VersionId
|
||
INTO #Seed FROM Factors f
|
||
JOIN dbo.EventProject ep ON ep.Id = f.EventProjectId
|
||
JOIN dbo.ScoreRule sr ON sr.Id = f.ScoreRuleId;
|
||
|
||
IF (SELECT COUNT(*) FROM #Seed) > 10
|
||
THROW 51003, N'待补成绩数量异常', 1;
|
||
IF EXISTS (SELECT 1 FROM #Seed WHERE D <= 0 OR P < 0 OR Q <= 0 OR Deduction >= 1)
|
||
THROW 51004, N'模拟成绩因子超出允许范围', 1;
|
||
IF EXISTS (SELECT 1 FROM dbo.EventResult WHERE Id IN (SELECT ResultId FROM #Seed))
|
||
OR EXISTS (SELECT 1 FROM dbo.EventResultVersion WHERE Id IN (SELECT VersionId FROM #Seed))
|
||
THROW 51005, N'生成的主键发生冲突,请重试', 1;
|
||
|
||
INSERT dbo.EventResult (
|
||
Id, ParticipationRecordId, RegistrationId, RegistrationPersonId, EventId, ProjectId,
|
||
ParticipantName, GroupName, Score, Rank, AwardLevel, AwardStatus, CreatedTime,
|
||
ProjectTypeName, DeleteMark, CreatedUserId, Status, SessionId, SessionEntryId,
|
||
DifficultyScore, PerformanceScore, RequiredScore, DeductionScore, TotalScore,
|
||
IsDisqualified, ResultStatus, ResultVersion, CalculationJson
|
||
)
|
||
SELECT ResultId, COALESCE(ParticipationRecordId, 0), 0, 0, @EventId, ProjectId,
|
||
ParticipantName, GroupName, CONVERT(varchar(32), FinalScore), GroupRank, 0, 0, GETDATE(),
|
||
N'个人花样', 0, 0, 0, SessionId, EntryId,
|
||
D, P, Q, Deduction, FinalScore, 0, 20, 1,
|
||
CONCAT('{"ruleType":"FREESTYLE_SINGLE","totalMode":"factor","formula":"D × (1 + P) × Q × M","scoreDecimals":2,"debugSeed":true,"totalScore":',
|
||
CONVERT(varchar(32), FinalScore), ',"factors":{"d":', CONVERT(varchar(32), D),
|
||
',"p":', CONVERT(varchar(32), P), ',"q":', CONVERT(varchar(32), Q),
|
||
',"m":', CONVERT(varchar(32), CAST(1 - Deduction AS decimal(18,4))), '}}')
|
||
FROM #Seed;
|
||
|
||
INSERT dbo.EventResultVersion (
|
||
Id, EventResultId, EventId, SessionEntryId, ResultVersion,
|
||
DifficultyScore, PerformanceScore, RequiredScore, DeductionScore, TotalScore, Rank,
|
||
IsDisqualified, ResultStatus, SourceType, ScoreRuleId, RuleVersion, CalculationJson,
|
||
Remark, DeleteMark, CreatedUserId, CreatedTime
|
||
)
|
||
SELECT VersionId, ResultId, @EventId, EntryId, 1,
|
||
D, P, Q, Deduction, FinalScore, GroupRank,
|
||
0, 20, 0, ScoreRuleId, RuleVersion,
|
||
CONCAT('{"ruleType":"FREESTYLE_SINGLE","totalMode":"factor","formula":"D × (1 + P) × Q × M","scoreDecimals":2,"debugSeed":true,"totalScore":',
|
||
CONVERT(varchar(32), FinalScore), ',"factors":{"d":', CONVERT(varchar(32), D),
|
||
',"p":', CONVERT(varchar(32), P), ',"q":', CONVERT(varchar(32), Q),
|
||
',"m":', CONVERT(varchar(32), CAST(1 - Deduction AS decimal(18,4))), '}}'),
|
||
N'仅供调试的模拟成绩', 0, 0, SYSDATETIME()
|
||
FROM #Seed;
|
||
|
||
SELECT COUNT(*) AS InsertedResults FROM #Seed;
|
||
COMMIT TRANSACTION;
|
||
END TRY
|
||
BEGIN CATCH
|
||
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
|
||
THROW;
|
||
END CATCH;
|