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

被折叠的 条评论
为什么被折叠?



