积分获取和消费的存储过程
发布时间:2020-12-11 23:21:54 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 -- ===============测试=======================================================/*declare @StatusCode int = 1;exec sp_GM_JF_AddScore 'admin','A
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 -- ===============测试======================================================= /* declare @StatusCode int = 1; exec sp_GM_JF_AddScore 'admin','AN_JF_001_001',1,5,'',@StatusCode output print @StatusCode */ -- =========================================================================== /* * 判断是否重复获取积分(首次完善个人资料,首次修改密码等等不能重复获取积分) * 判断是根据 从GM_JF_DETAIL(详情表)查询周期内的数据条数与GM_JF_ACTION_RULES(动作规则表)内的周期重复次数对比 * 如果大于等于周期重复次数,则为重复获取积分 * 接下来 * 1.详情表的数据入库 * 2.判断总积分表是否存在对应客户的总积分 没有则插入一条新的,有 则读取其数据,并更新 * */ ALTER PROCEDURE [dbo].[sp_GM_JF_AddScore] @ACCOUNT_ID varchar(30),@JF_CategoryNumber varchar(15),@CARD_NUM int,@HQ_JF_AMOUNT int,@State varchar(16),@USE_DESC varchar(400),@StatusCode int output -- 状态码: 0:失败 1:成功 2: 不能重复获取 AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; declare @repetitionsCycle float=0,--周期(天) @repetitionsCycle_second int=0,--周期(秒) @repetitionsFrequency int=0,--一个周期内允许最大次数 @realFrequency int=0,--实际周期 @USE_DATE datetime = GETDATE(); --是否重复获取积分 select top(1) @repetitionsCycle=RepetitionsCycle,@repetitionsFrequency=RepetitionsFrequency from GM_JF_ACTION_RULES where [email?protected]_CategoryNumber; if(@repetitionsCycle<1) BEGIN set @repetitionsCycle_second = (@repetitionsCycle-1)*24*60*60; select @realFrequency=COUNT(1) from GM_JF_DETAIL where [email?protected]_ID and [email?protected]_CategoryNumber and USE_DATE <= @USE_DATE and USE_DATE >= CONVERT(varchar(19),DATEADD(SECOND,[email?protected]_second,@USE_DATE),120) END ELSE BEGIN select @realFrequency=COUNT(1) from GM_JF_DETAIL where [email?protected]_ID and [email?protected]_CategoryNumber and USE_DATE <= @USE_DATE and USE_DATE >= CONVERT(varchar(10),DATEADD(DAY,-(@repetitionsCycle-1),120) END if(@realFrequency>[email?protected]) --实际周期大于周期次数 begin set @StatusCode = 2; return 2; end declare @count int = 0; --数据条数 declare @temp_table table --表变量 ( ACCOUNT_ID varchar(30),JF_AMOUNT decimal(16,2),TTL_JF_AMOUNT decimal(16,Last_Update_Time datetime,[Version] int ); begin tran; --插入详情 insert into GM_JF_DETAIL (ACCOUNT_ID,JF_CategoryNumber,CARD_NUM,HQ_JF_AMOUNT,[State],USE_DESC) values (@ACCOUNT_ID,@JF_CategoryNumber,@CARD_NUM,@HQ_JF_AMOUNT,@State,@USE_DESC) --填充表变量 insert into @temp_table select ACCOUNT_ID,JF_AMOUNT,TTL_JF_AMOUNT,Last_Update_Time,[Version] from GM_JF where [email?protected]_ID select @count = count(1) from @temp_table; --判断并更新总积分(0:添加 其他:修改) IF(@count=0) begin insert into GM_JF(ACCOUNT_ID,TTL_JF_AMOUNT) values (@ACCOUNT_ID,@HQ_JF_AMOUNT) end else begin declare @JF_AMOUNT int,--总积分 @TTL_JF_AMOUNT int,--可用积分 @Version int; --版本号 select @JF_AMOUNT=JF_AMOUNT,@TTL_JF_AMOUNT=TTL_JF_AMOUNT,@Version=[Version] from @temp_table where [email?protected]_ID; update GM_JF set JF_AMOUNT=(@[email?protected]_JF_AMOUNT),TTL_JF_AMOUNT=(@[email?protected]_JF_AMOUNT),Last_Update_Time=GETDATE(),[Version]=(@Version+1) where [email?protected]_ID end Commit tran; set @StatusCode = 1; IF(@@ERROR<>0) BEGIN set @StatusCode = 0; ROLLBACK tran; END END 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |