一个简的存储过程

本文介绍了一个复杂的存储过程,用于处理投票系统的短信消息接收逻辑,包括不同类型的投票活动及其限制条件。

create procedure Msm
@Mobile varchar(20), --上行手机号
@OperationId int,--业务id
@OperationMarkId int,--业务内活动id
@Message Nvarchar(500), --信息内容
@stime dateTime --收到时间
AS
declare @activityType int
declare @type int
declare @participatorId int
declare @limitTimes int
declare @autoSend bit
declare @startTime datetime
declare @endTime datetime
declare @mobileList varchar(1000)
declare @nowTime datetime
declare @mobileSendCount int
declare @charPosition int
declare @returnMsg varchar(50)
declare @lastParticipator int
begin
 select @activityType =ActivityId, @type=CollectionType, @limitTimes=LimiteTime,@autoSend=VoterLimitable,@startTime=StartTime,@endTime=EndTime,@mobileList=LimiteList from VoteActivity where ActivityId=@OperationMarkId
 select @participatorId=ParticipatorId from VoteParticipator where ActivityId=@OperationMarkId and VoteMark=@Message
 select @mobileSendCount=count(MsmId) from VoteMsmHistory where OperationMarkId=@OperationMarkId and MobileNumber=@Mobile
 select @charPosition=charindex(@Mobile,@mobileList,1)
 if @participatorId is not null
 begin
  if @OperationId = 1 and @startTime<@stime and @endTime > @stime
  begin
   if @autoSend = 1
   begin
    if @type = 1
    begin
     if @mobileSendCount = 0
     begin
      insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
      if @@error = 0
      begin
       update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
      end
     end
     else
     begin
      select @lastParticipator=ParticipatorId from VoteParticipator A join VoteMsmHistory B on B.OperationMarkId = A.ActivityId and A.VoteMark=B.[Message] where B.OperationMarkId=@OperationMarkId and B.MobileNumber=@Mobile
      begin
       update VoteParticipator set VoteNumber=VoteNumber-1,VoteOrigNumber=VoteOrigNumber-1 where ParticipatorId=@lastParticipator;
       if @@error = 0
       begin
        update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
       end
       if @@error = 0
       begin
        update VoteMsmHistory set [Message]=@Message where OperationMarkId=@OperationMarkId and MobileNumber=@Mobile
       end
      end
     end
    end
    if @type = 2
    begin
     if @mobileSendCount < @limitTimes
     begin
      insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
      if @@error = 0
      begin
       update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
      end
     end
    end
    if @type = 3
    begin
     if @mobileSendCount = 0
     begin
      insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
      if @@error = 0
      begin
       update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
      end
     end
    end
    if @type = 4
    begin
     insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
     if @@error = 0
     begin
      update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
     end
    end
   end
   else ----@autoSend
   begin
    if @charPosition != 0
    begin
     if @type = 1
     begin
      if @mobileSendCount = 0
      begin
       insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
       if @@error = 0
       begin
        update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
       end
      end
      else
      begin
       select @lastParticipator=ParticipatorId from VoteParticipator A join VoteMsmHistory B on B.OperationMarkId = A.ActivityId and A.VoteMark=B.[Message] where B.OperationMarkId=@OperationMarkId and B.MobileNumber=@Mobile
       begin
        update VoteParticipator set VoteNumber=VoteNumber-1,VoteOrigNumber=VoteOrigNumber-1 where ParticipatorId=@lastParticipator;
        if @@error = 0
        begin
         update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
        end
        if @@error = 0
        begin
         update VoteMsmHistory set [Message]=@Message where OperationMarkId=@OperationMarkId and MobileNumber=@Mobile
        end
       end
      end
     end
     if @type = 2
     begin
      if @mobileSendCount < @limitTimes
      begin
       insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
       if @@error = 0
       begin
        update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
       end
      end
     end
     if @type = 3
     begin
      if @mobileSendCount = 0
      begin
       insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
       if @@error = 0
       begin
        update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
       end
      end
     end
     if @type = 4
     begin
      insert into VoteMsmHistory(MobileNumber,OperationId,OperationMarkId,[Message],SendTime) values(@Mobile,@OperationId,@OperationMarkId,@Message,@stime)
      if @@error = 0
      begin
       update VoteParticipator set VoteNumber=VoteNumber+1,VoteOrigNumber=VoteOrigNumber+1 where ParticipatorId=@participatorId;
      end
     end
    end
    else
    begin
     set @returnMsg=N'手机!';
     raiserror(@returnMsg,16,1);
    end
   end
  end
 end
 else
  begin
   set @returnMsg=N'!';
   raiserror(@returnMsg,16,1);
  end
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值