135 lines
5.9 KiB
Transact-SQL
135 lines
5.9 KiB
Transact-SQL
: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;
|