USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: ** -- Create date: 2011-06-22 -- Description: 添加中奖记录 -- 成功返回失败返回 -- ============================================= CREATE PROCEDURE prMgame_addPrizesRecord @intUserId int,--用户ID @vchIptvName varchar(50),--IPTV名称 @intPrizesType smallint,--周奖还是终极大奖 0:周奖 1:终极大奖 @intPrizesNo int,--奖品编号 @vchPrizesName varchar(50)=null output,--奖品名称 @outPrizesNo int=0 output,--奖品编号 @intReturnCode int=1 output,--处理返回值 @vchMsg varchar(128)=null output --处理信息 AS BEGIN BEGIN TRANSACTION DECLARE @NowTime DATETIME DECLARE @NowPrizesSum INT DECLARE @NowRank INT DECLARE @NowWeek smallint --当天属于哪个星期 DECLARE @lestWeek smallint SELECT @NowTime=GETDATE() FROM dbo.sysobjects --获取系统时间 --取得第几周 IF NOT EXISTS (SELECT * FROM WeekTime WHERE WeekStartTime<=@NowTime AND WeekEndTime >=@NowTime) BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,无法获取周号。' ROLLBACK TRANSACTION RETURN 1 END SELECT @NowWeek=WeekNo FROM WeekTime WHERE WeekStartTime<=@NowTime AND WeekEndTime >=@NowTime SET @lestWeek = @NowWeek - 1 print @lestWeek IF (@intPrizesType = 0) BEGIN --周奖 IF EXISTS (SELECT * FROM PrizesRecode WHERE UserId=@intUserId AND WeekNo=@lestWeek AND PrizesType=@intPrizesType) BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,用户已经抽过奖了。' ROLLBACK TRANSACTION RETURN 1 END IF EXISTS (SELECT * FROM Prizes WHERE PrizesNo=@intPrizesNo AND PrizesRemainder > 0) BEGIN --奖品数量充足 SELECT @NowPrizesSum=PrizesRemainder,@vchPrizesName=PrizesName,@outPrizesNo=PrizesNo FROM Prizes WHERE PrizesNo=@intPrizesNo SET @NowPrizesSum = @NowPrizesSum - 1 UPDATE Prizes SET PrizesRemainder=@NowPrizesSum WHERE PrizesNo=@outPrizesNo IF @@ERROR<>0 BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,奖品表更新失败。' ROLLBACK TRANSACTION RETURN 1 END END ELSE BEGIN --奖品数量不足 SELECT TOP 1 @NowPrizesSum=PrizesRemainder,@outPrizesNo=PrizesNo FROM Prizes WHERE PrizesRemainder > 0 AND PrizesType = @intPrizesType ORDER BY PrizesRemainder DESC SET @NowPrizesSum = @NowPrizesSum - 1 UPDATE Prizes SET PrizesRemainder=@NowPrizesSum WHERE PrizesNo=@outPrizesNo IF @@ERROR<>0 BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,奖品表更新失败。' ROLLBACK TRANSACTION RETURN 1 END END SELECT @NowRank=WeekRank FROM WeekRank WHERE UserId=@intUserId AND WeekNo=@lestWeek INSERT INTO PrizesRecode (UserId,IptvName,PrizesNo,PrizesType,RecodeTime,WeekNo,GameRank) VALUES (@intUserId,@vchIptvName,@outPrizesNo,@intPrizesType,@NowTime,@lestWeek,@NowRank) IF @@ERROR<>0 BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,奖品记录表更新失败。' ROLLBACK TRANSACTION RETURN 1 END SET @intReturnCode=0 SET @vchMsg='奖品获取成功' COMMIT TRANSACTION RETURN 0 END ELSE IF (@intPrizesType = 1) BEGIN --终极大奖 IF EXISTS (SELECT * FROM PrizesRecode WHERE UserId=@intUserId AND PrizesType=@intPrizesType) BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,用户已经抽过奖了。' ROLLBACK TRANSACTION RETURN 1 END IF EXISTS (SELECT * FROM Prizes WHERE PrizesNo=@intPrizesNo AND PrizesRemainder > 0) BEGIN --奖品数量充足 SELECT @NowPrizesSum=PrizesRemainder,@outPrizesNo=PrizesNo FROM Prizes WHERE PrizesRemainder > 0 AND PrizesType = @intPrizesType ORDER BY PrizesRemainder DESC SET @NowPrizesSum = @NowPrizesSum - 1 UPDATE Prizes SET PrizesRemainder=@NowPrizesSum WHERE PrizesNo=@outPrizesNo IF @@ERROR<>0 BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,奖品表更新失败。' ROLLBACK TRANSACTION RETURN 1 END END SELECT @NowRank=AllRank FROM AllRank WHERE UserId=@intUserId INSERT INTO PrizesRecode (UserId,@NowRank) IF @@ERROR<>0 BEGIN SET @intReturnCode=1 SET @vchMsg='奖品添加失败,奖品记录表更新失败。' ROLLBACK TRANSACTION RETURN 1 END SET @intReturnCode=0 SET @vchMsg='奖品获取成功' COMMIT TRANSACTION RETURN 0 END SET @intReturnCode=1 SET @vchMsg='奖品添加失败,参数传入错误。' ROLLBACK TRANSACTION RETURN 1 END
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。