`
yinter
  • 浏览: 245060 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个小抽奖程序处理

Go 
阅读更多

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



ALTER   PROCEDURE [dbo].[wishwall_init_prize_data]

as
/*
select * from dbo.wall_prize_basedatas

select * from dbo.wall_set_prizies

--exec [wishwall_init_prize_data]

select count(*) as count from wall_set_prizies

select count(prizetype) as count from wall_set_prizies GROUP BY prizetype

select * from dbo.wall_prize_infos


*/
    declare @prizetype        int
    declare @allcount        int
    declare @startdate        datetime
    declare @enddate        datetime
    declare @lucknumber        int
    declare @curdate        datetime
    declare @curallcount        int
    declare @everycount        int
    declare @time            int
   
    set @time=0

    start:

    truncate table wall_set_prizies

    set @time=@time+1
   
   
    DECLARE cur CURSOR FOR
    SELECT type,allcount,startdate,enddate
    FROM wall_prize_basedatas where type<>3
   
    OPEN cur
    FETCH next FROM cur INTO @prizetype, @allcount,    @startdate,    @enddate

 
    WHILE @@FETCH_STATUS = 0
    BEGIN
        set @curdate=@startdate

        while @curdate<=@enddate
        begin
            select @curallcount = sum(edatecount) from wall_set_prizies where prizetype=@prizetype
            if @curallcount is null
            begin
                set @curallcount = 0
            end

            if @prizetype=1
            begin
                set @lucknumber = cast(500*rand() as int)
            end
            else
            begin
                set @lucknumber = cast(500*rand() as int)
            end

            if @curallcount<@allcount
            begin
                if @prizetype=1
                begin
                    select top 1 @everycount=ecount from
                    (select 2 as 'ecount' union select 3 as 'ecount' union select 1 as 'ecount')as temptable order by newid()
                end
                else
                begin
                    select top 1 @everycount=ecount from
                    (select 1 as 'ecount' union select 0 as 'ecount' union select 1 as 'ecount' union select 1 as 'ecount')as temptable
                    order by newid()
                end

                insert wall_set_prizies (prizetype,lucknumber,edatecount,prizedate,created_at)
                values(@prizetype,@lucknumber,@everycount,@curdate,getdate())
            end
            else
            begin
                insert wall_set_prizies (prizetype,lucknumber,edatecount,prizedate,created_at)
                values(@prizetype,@lucknumber,0,@curdate,getdate())
            end

            set @curdate = @curdate + 1
        end

        FETCH next FROM cur INTO @prizetype, @allcount,    @startdate,    @enddate
    END

    --***********************************************************************************
  
    DECLARE temp CURSOR FOR
    select sum(edatecount) as 'allcount',prizetype from dbo.wall_set_prizies group by prizetype
  
    OPEN temp
    FETCH next FROM temp INTO @allcount, @prizetype
   
    WHILE @@FETCH_STATUS = 0
    BEGIN
        if @prizetype=1
        begin
            if @allcount<>80
            begin
                truncate table wall_set_prizies
                CLOSE temp
                DEALLOCATE temp   

                CLOSE cur
                DEALLOCATE cur   
                goto start   
            end
        end
        else if @prizetype=2
        begin
            if @allcount<>20
            begin
                truncate table wall_set_prizies
                CLOSE temp
                DEALLOCATE temp   

                CLOSE cur
                DEALLOCATE cur   
                goto start   
            end
        end

        FETCH next FROM temp INTO @allcount, @prizetype
    end

    CLOSE temp
    DEALLOCATE temp   

    CLOSE cur
    DEALLOCATE cur               

    select @time '@time'



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

 

 

 

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


ALTER  PROCEDURE [dbo].[wishwall_start_draw]
(
    @prizetype        int,
    @mo_content        nvarchar(50),
    @fetion_no        varchar(20),
    @current_date        varchar(21)
    --,@can_winning    int        --是否可以中奖    0不可以,1可以
)
as
/*
select * from dbo.wall_prize_basedatas

select * from dbo.wall_set_prizies

select * from dbo.wall_prize_infos

exec [wishwall_start_draw] 1, 'c', '644513457', '2008-12-18 16:06:03.0'

*/    declare @can_winning    int   
    declare @luckNumber int
    declare @randNumber int
    declare @isPrize    int    --0没中奖    1中奖
    declare @drawTime    int
    declare @prizeAllCount        int
    declare @curPrizeAllCount    int
    declare @curDayPrizeCount    int
    declare @everyDayPrizeCount    int

    set @can_winning = 0
    set @drawtime = 0
    set @isprize = 0

    if NOT EXISTS (SELECT fetion_no FROM wall_prize_infos
    WHERE convert(varchar(10),created_at,121)=convert(varchar(10),@current_date,121)
        and fetion_no=@fetion_no)
    begin
        --允许中奖总数
        select @prizeallcount = allcount from dbo.wall_prize_basedatas where type=@prizetype
        --已中奖数量
        select @curprizeallcount = count(fetion_no) from wall_prize_infos
            where prizetype=@prizetype and isprize=1
        --中奖名额少于限制总数
        if  @curprizeallcount < @prizeallcount
        begin
            set @can_winning=1
        end
        else
        begin
            set @can_winning=0
        end

        begin tran
            --当天充许的中奖号码
            select @luckNumber=lucknumber, @everyDayPrizeCount=edatecount from wall_set_prizies
            where prizetype=@prizetype and
            convert(varchar(10),prizedate,121)=convert(varchar(10),@current_date,121)

            --当天中奖数量
            select @curprizeallcount = count(fetion_no) from wall_prize_infos
            with (tablockx)    --锁定
                    where prizetype=@prizetype and isprize=1 and
                convert(varchar(10),created_at,121)=convert(varchar(10),@current_date,121)
    
            --当天还有中奖名额
            if @curprizeallcount < @everyDayPrizeCount
            begin
                set @can_winning=1
            end
            else
            begin
                set @can_winning=0
            end

            if @can_winning=1    --可以中奖
            begin
                set @randNumber = cast(500*rand() as int)
            end
            else
            begin
                reDraw:
                set @drawtime = @drawtime + 1
                set @randNumber = cast(500*rand() as int)
                if @randNumber = @luckNumber
                begin
                    goto reDraw
                end
            end

            if @randNumber = @luckNumber
            begin
                set @isprize=1
            end
            else
            begin
                set @isprize=0
            end
           
            insert into wall_prize_infos (fetion_no,mocontent,mtcontent,prizetype,isprize,lucknumber,created_at)
            values(@fetion_no,@mo_content,'',@prizetype,@isprize,@randNumber,cast(@current_date as datetime))
        commit

        print 'not exist'
    end
    else
    begin
        print 'exist'
    end

    SELECT @isprize as 'prizevalue'
    --SELECT @LUCKNUMBER 'lucknumber',@randnumber 'randnumber',@drawtime 'drawTime',@isprize 'isprize'
   


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

 

 

 

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO







ALTER   PROCEDURE [dbo].[wishwall_user_score]
(
    @promise_id        int,
    @recv_fetion    varchar(20)
)
as
/*
select * from dbo.wall_prize_basedatas

select * from dbo.wall_set_prizies

select * from dbo.wall_prize_infos

select * from promise where pid = 81

exec [wishwall_user_score] 81,'726534971'

select * from wall_user_scores

select * from dbo.wall_user_wish_relations

delete from wall_user_wish_relations


*/    declare @promiseContent    nvarchar(1000)
    -- status    0字条不存在    1查看者不正确 2查看者正确 3多次查询
    declare @status            int
    declare @send_fetion    varchar(20)
    declare @send_score_id    int
    declare @recv_score_id    int
    declare @recv_date        varchar(10)
   

    select top 1 @promiseContent = promiseContent from promise
    where pid = @promise_id
   
    if @promiseContent is null
    begin
        set @status = 0
    end
    else
    begin
        select top 1 @send_fetion = sendFetion ,@recv_date = convert(varchar(10),sendTime,121)
        from promise where pid=@promise_id and acceptFetion = @recv_fetion
        --查看者不正确
        if @send_fetion is null    --NOT EXISTS()
        begin
            set @status = 1   
        end
        else
        begin
            --第一次两者交互
            if NOT EXISTS(select top 1 id from dbo.wall_user_wish_relations
                where send_fetion=@send_fetion and recv_fetion=@recv_fetion)
            begin
                set @status = 2

                insert into wall_user_wish_relations (send_fetion, recv_fetion)
                values(@send_fetion, @recv_fetion)

                select top 1 @send_score_id = id from wall_user_scores
                    where fetion_no = @send_fetion

                select top 1 @recv_score_id = id from wall_user_scores
                    where fetion_no = @recv_fetion

                --发送者积分处理
                if @send_score_id is null
                begin
                    insert into wall_user_scores (fetion_no,send_score)
                    values(@send_fetion,1)
                end
                else
                begin
                    update wall_user_scores set send_score = send_score + 1
                    where id = @send_score_id
                end

                --查看者积分处理
                if @recv_score_id is null
                begin
                    insert into wall_user_scores (fetion_no,recv_score)
                    values(@recv_fetion, 1)
                end
                else
                begin
                    update wall_user_scores set recv_score = recv_score + 1
                    where id = @recv_score_id
                end
            end
            else
            begin
                set @status = 3
            end
        end
    end

    if @status not in (2,3)
    begin
        set @promiseContent = ''
    end

    select @status as 'status', @promiseContent as 'content',
        month(@recv_date) as 'month',year(@recv_date) as 'year',
        day(@recv_date) as 'day' ,@send_fetion as 'send_fetion'










GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

分享到:
评论

相关推荐

    matlab设计的一个简单抽奖程序

    在MATLAB中设计一个简单的抽奖程序,涉及到的主要知识点包括MATLAB的基本编程语法、图形用户界面(GUI)的设计以及随机数生成。下面将详细讲解这些内容。 首先,MATLAB是一种强大的数值计算和符号计算软件,它的语法...

    购物抽奖小程序源码分享

    购物抽奖小程序源码是开发一款在线购物平台与互动娱乐相结合的应用程序的核心代码,它通常包含前端用户界面和后端服务器逻辑。...理解和掌握这些知识点,能帮助开发者成功构建一个吸引人的购物抽奖小程序。

    抽奖盒子微信小程序源码

    总的来说,"抽奖盒子微信小程序源码"是一个包含了微信小程序开发全套流程的项目,涵盖了前端界面设计、交互逻辑实现、网络通信、数据管理等多个技术点。开发者通过深入理解和修改这个源码,可以创建出符合自己需求的...

    最新版PHP微信小程序/抽奖小程序开源源码

    【PHP微信小程序/抽奖小程序开源源码】是一个基于PHP编程语言和微信小程序平台开发的抽奖应用项目。这个开源源码提供了完整的抽奖功能实现,对于想要了解或开发类似应用的开发者来说,是一个宝贵的学习和实践资源。 ...

    抽奖小程序开源源码PHP+uniapp

    综上所述,这个“抽奖小程序开源源码PHP+uniapp”项目为开发者提供了一个完整的抽奖程序开发模板,涵盖了从后端数据处理到前端用户交互的全过程。通过学习和实践,不仅可以提升PHP和uniapp的运用能力,还能掌握小...

    小程序大转盘抽奖源码小程序大转盘抽奖源码

    4. **数据库设计**:在后端,需要设计一个数据库来存储奖品信息、用户抽奖记录等数据。这可能包括用户表、奖品表、抽奖记录表等,用于跟踪用户的抽奖次数、中奖情况等。 5. **安全性与性能优化**:为了防止刷奖、...

    大转盘抽奖小程序源码.zip

    【大转盘抽奖小程序源码】是一个用于创建互动式抽奖活动的小程序应用源代码,它包含了一套完整的、经过测试的、无明显错误(BUG)的功能实现。此源码特别强调了其酷炫的"跑马灯旋转效果",这通常指的是在用户参与...

    PHP抽奖小程序微信小程序开源源码.rar

    下面将详细介绍PHP和微信小程序的相关知识点,以及如何结合它们创建一个抽奖程序。 1. PHP:全称Hypertext Preprocessor(超文本预处理器),是一种广泛用于Web开发的服务器端脚本语言。PHP语法简洁,易于学习,...

    转盘大抽奖小程序源码.zip

    综上所述,"转盘大抽奖"微信小程序源码涵盖了小程序开发的基础技术,包括UI设计、数据绑定、事件处理、动画效果、接口调用等多个方面,对于想要学习微信小程序开发的人员来说,是一个很好的实践案例。通过深入研究这...

    微信转盘抽奖小程序源码

    总的来说,微信转盘抽奖小程序源码提供了一套完整的积分游戏解决方案,涵盖了用户参与、积分获取、奖品兑换等多个环节,对于想要开展微信小程序营销活动的企业或开发者来说,是一个有价值的参考资料。通过学习和理解...

    小程序抽奖,小程序转盘抽奖

    综上所述,开发一个小程序抽奖转盘涉及到前端设计、动画实现、随机数生成、数据交互等多个技术环节。掌握这些知识点并熟练运用,才能构建出既吸引人又可靠的抽奖功能。在实际项目中,还需要根据具体需求进行调整和...

    小程序抽奖Demo

    本压缩包“wechat-turntalbe-canvas-master”提供了一个基于微信小程序的抽奖Demo,其设计灵感来源于淘宝的抽奖功能,具有高度互动性和趣味性,对于想要了解和实践微信小程序动态效果开发的开发者来说,这是一个非常...

    抽奖小程序源码,多方式实现展示抽奖功能【后台源码+前端】

    4. **数据库设计**:为了存储用户信息、抽奖记录等数据,抽奖小程序需要一个数据库系统。常见的数据库选择有MySQL、MongoDB、SQLite等,用于存储和检索数据。 5. **安全性**:抽奖小程序需要确保用户数据的安全,...

    抽奖小程序,任意个数及任意次数

    在这个抽奖程序中,C#的类库和语法被用来编写控制逻辑,包括随机数生成、数据处理和UI交互。 【详细知识点】 1. **随机数生成**:抽奖的核心是生成随机数,C#中的`Random`类用于此目的。开发者可能使用`Next`方法在...

    微信小程序_抽奖转盘源码

    微信小程序是一种轻量级的...以上就是关于“微信小程序_抽奖转盘源码”涉及的主要技术点和实现过程,掌握这些知识,你就能创建出一个功能完善的微信小程序抽奖转盘了。在实践中不断学习和优化,你的小程序将更加出色。

    微信小程序-幸运大抽奖(源码).zip

    本项目“微信小程序-幸运大抽奖(源码)”是一个基于微信小程序的互动抽奖应用,它集成了幸运大转盘的功能,适用于各种线上线下活动,如商场促销、品牌推广等,以增加用户参与度和互动性。 1. **微信小程序开发环境...

    微信小程序云开发抽奖小源码——可开流量主

    在深入学习这个抽奖小源码的过程中,开发者不仅可以掌握微信小程序的基本开发技能,还能了解如何利用云开发进行后端逻辑处理,以及如何实现广告变现。这是一次提升微信小程序开发实战经验的好机会。

    微信小程序抽奖优化版

    微信小程序抽奖优化版是一个专为学习目的设计的项目,它基于微信小程序平台,提供了一种互动式的转盘抽奖功能。微信小程序是一种轻量级的应用开发框架,由腾讯公司推出,旨在让用户无需安装即可在微信内体验各类应用...

    一个抽奖的小程序源码

    这是一个基于DELPHI开发的抽奖小程序的源代码包。该程序设计用于年终活动,具有一定的趣味性和实用性。从描述中可以看出,程序的核心功能是进行抽奖,而为了满足特定需求,程序的设定允许管理员在"setup.ini"配置...

    基于java开发的小程序抽奖转盘

    "基于Java开发的小程序抽奖转盘"是一个使用Java编程语言构建的微型应用,主要用于实现抽奖功能,其界面可能呈现为一个旋转的转盘,用户可以通过交互进行抽奖活动。这样的程序通常用于线上活动、促销或者游戏场景,为...

Global site tag (gtag.js) - Google Analytics