YD_Event.Admin/二期需求/20260903_bind_existing_judge_accounts.sql

135 lines
5.9 KiB
MySQL
Raw Normal View History

:setvar JudgeDJPassword "__REQUIRED__"
:setvar JudgePPassword "__REQUIRED__"
:setvar JudgeTPassword "__REQUIRED__"
SET XACT_ABORT ON;
BEGIN TRANSACTION;
IF N'$(JudgeDJPassword)' = N'__REQUIRED__'
OR N'$(JudgePPassword)' = N'__REQUIRED__'
OR N'$(JudgeTPassword)' = N'__REQUIRED__'
THROW 51000, N'请通过 sqlcmd -v 提供 JudgeDJPassword、JudgePPassword 和 JudgeTPassword。', 1;
-- 本脚本只适用于当前 QA 赛事及场次;基础档案不匹配时立即停止,避免误改其他环境。
IF NOT EXISTS (SELECT 1 FROM dbo.Referee WHERE Id = 9001 AND Mobile = '13800000001' AND DeleteMark = 0)
OR NOT EXISTS (SELECT 1 FROM dbo.Referee WHERE Id = 9002 AND Mobile = '13800000002' AND DeleteMark = 0)
OR NOT EXISTS (SELECT 1 FROM dbo.Referee WHERE Id = 9003 AND Mobile = '13800000003' AND DeleteMark = 0)
THROW 51001, N'现有裁判档案与预期不一致,已停止账号换绑。', 1;
IF NOT EXISTS (SELECT 1 FROM dbo.EventSession WHERE Id = 468424868974597 AND EventId = 466884260081669 AND DeleteMark = 0)
THROW 51002, N'目标赛事场次不存在,已停止账号换绑。', 1;
DECLARE @Accounts TABLE (
UserId BIGINT NOT NULL,
RefereeId BIGINT NOT NULL,
EventRefereeId BIGINT NOT NULL,
AssignmentId BIGINT NOT NULL,
Name VARCHAR(64) NOT NULL,
Mobile VARCHAR(20) NOT NULL,
RoleMask INT NOT NULL,
JudgeRole VARCHAR(32) NOT NULL,
JudgeRoleType VARCHAR(16) NOT NULL,
PasswordPrefix VARCHAR(16) NOT NULL,
PlainPassword VARCHAR(64) NOT NULL
);
INSERT INTO @Accounts VALUES
(9001, 9001, 8001, 9101, '张裁判', '13800000001', 4, 'DJ1', 'DJ', 'LNL3', '$(JudgeDJPassword)'),
(9002, 9002, 8002, 9102, '李裁判', '13800000002', 2, 'P1', 'P', 'oP76', '$(JudgePPassword)'),
(9003, 9003, 8003, 9103, '王裁判', '13800000003', 1, 'T', 'T', 'PdYK', '$(JudgeTPassword)');
-- 使用应用现有的 Hashids(id)+MD5(password) 规则生成登录密码,密码本身不固化在仓库。
MERGE dbo.AppUser AS target
USING @Accounts AS source ON target.Id = source.UserId
WHEN MATCHED THEN UPDATE SET
target.Name = source.Name,
target.Mobile = source.Mobile,
target.Password = LOWER(CONVERT(VARCHAR(32), HASHBYTES('MD5', source.PasswordPrefix + source.PlainPassword), 2)),
target.MiniProgramRole = 2,
target.AuditStatus = 2,
target.Status = 0,
target.DeleteMark = 0,
target.UpdatedUserId = 0,
target.UpdatedTime = GETDATE()
WHEN NOT MATCHED THEN INSERT
(Id, Name, Gender, Mobile, AuditStatus, Status, DeleteMark, CreatedUserId, CreatedTime,
PersonType, Password, AuthType, MiniProgramRole, AuditTime, Remark)
VALUES
(source.UserId, source.Name, 0, source.Mobile, 2, 0, 0, 0, GETDATE(),
0, LOWER(CONVERT(VARCHAR(32), HASHBYTES('MD5', source.PasswordPrefix + source.PlainPassword), 2)),
0, 2, GETDATE(), N'裁判端正式联调账号');
UPDATE referee SET
referee.AppUserId = account.UserId,
referee.Roles = account.RoleMask,
referee.AuditStatus = 2,
referee.Status = 0,
referee.DeleteMark = 0,
referee.UpdatedUserId = 0,
referee.UpdatedTime = GETDATE()
FROM dbo.Referee referee
INNER JOIN @Accounts account ON account.RefereeId = referee.Id;
UPDATE eventReferee SET
eventReferee.Status = 0,
eventReferee.DeleteMark = 0,
eventReferee.UpdatedUserId = 0,
eventReferee.UpdatedTime = GETDATE()
FROM dbo.EventReferee eventReferee
INNER JOIN @Accounts account ON account.EventRefereeId = eventReferee.Id
WHERE eventReferee.EventId = 466884260081669;
-- 旧联调席位只停用,不改写旧评分单和任务,历史数据仍可追溯且不会串到新账号。
UPDATE assignment SET
assignment.AssignmentStatus = 9,
assignment.Status = 1,
assignment.SubmittedTime = NULL,
assignment.Remark = N'已由正式裁判账号换绑,旧联调席位停用',
assignment.UpdatedUserId = 0,
assignment.UpdatedTime = GETDATE()
FROM dbo.EventJudgeAssignment assignment
INNER JOIN dbo.AppUser appUser ON appUser.Id = assignment.JudgeUserId
WHERE assignment.SessionId = 468424868974597
AND appUser.Mobile IN ('19900000001', '19900000002', '19900000003')
AND assignment.DeleteMark = 0;
MERGE dbo.EventJudgeAssignment AS target
USING @Accounts AS source ON target.Id = source.AssignmentId
WHEN MATCHED THEN UPDATE SET
target.EventId = 466884260081669,
target.SessionId = 468424868974597,
target.EventRefereeId = source.EventRefereeId,
target.RefereeId = source.RefereeId,
target.JudgeUserId = source.UserId,
target.JudgeRole = source.JudgeRole,
target.JudgeRoleType = source.JudgeRoleType,
target.AssignmentStatus = 1,
target.Status = 0,
target.DeleteMark = 0,
target.SubmittedTime = GETDATE(),
target.Remark = N'裁判端正式联调席位',
target.UpdatedUserId = 0,
target.UpdatedTime = GETDATE()
WHEN NOT MATCHED THEN INSERT
(Id, EventId, SessionId, EventRefereeId, RefereeId, JudgeUserId, JudgeRole, JudgeRoleType,
AssignmentStatus, SubmittedTime, Remark, Status, DeleteMark, CreatedUserId, CreatedTime)
VALUES
(source.AssignmentId, 466884260081669, 468424868974597, source.EventRefereeId, source.RefereeId,
source.UserId, source.JudgeRole, source.JudgeRoleType, 1, GETDATE(), N'裁判端正式联调席位',
0, 0, 0, GETDATE());
-- 联调账号做可恢复的软删除;关联的旧草稿、任务和评分单不物理删除。
UPDATE eventReferee SET eventReferee.Status = 1, eventReferee.DeleteMark = 1,
eventReferee.UpdatedUserId = 0, eventReferee.UpdatedTime = GETDATE()
FROM dbo.EventReferee eventReferee
INNER JOIN dbo.Referee referee ON referee.Id = eventReferee.RefereeId
WHERE referee.Mobile IN ('19900000001', '19900000002', '19900000003');
UPDATE dbo.Referee SET Status = 1, DeleteMark = 1, UpdatedUserId = 0, UpdatedTime = GETDATE()
WHERE Mobile IN ('19900000001', '19900000002', '19900000003');
UPDATE dbo.AppUser SET Status = 1, DeleteMark = 1, UpdatedUserId = 0, UpdatedTime = GETDATE()
WHERE Mobile IN ('19900000001', '19900000002', '19900000003');
COMMIT TRANSACTION;