1.gm_jf客户账户积分表 2.gm_jf_detail客户账户积分消费记录 3.gm_jf_action_rules积分动作规则表 4.gm_jf_goods_rules积分商品规则表 无 -- ===============测试=======================================================/*declare @statuscode int = 1;exec
        											1.gm_jf客户账户积分表
2. gm_jf_detail客户账户积分消费记录
3. gm_jf_action _rules积分动作规则表
4.gm_jf_goods _rules积分商品规则表    		    			    																			    		    				    			        		            	            	            	            	            	-- ===============测试=======================================================/*declare @statuscode int = 1;exec sp_gm_jf_addscore 'admin','an_jf_001_001',1,5,0,'',@statuscode outputprint @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: 不能重复获取asbegin-- 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 an_categorynumber=@jf_categorynumber;if(@repetitionscycle=@repetitionsfrequency)    --实际周期大于周期次数beginset @statuscode = 2;return 2;enddeclare @count int = 0;     --数据条数declare @temp_table table    --表变量(account_id varchar(30),jf_amount decimal(16,2),ttl_jf_amount decimal(16,2),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 account_id=@account_idselect @count = count(1) from @temp_table;--判断并更新总积分(0:添加 其他:修改)if(@count=0)begininsert into gm_jf(account_id,jf_amount,ttl_jf_amount)values(@account_id,@hq_jf_amount,@hq_jf_amount)endelsebegindeclare @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 account_id=@account_id;update gm_jf set jf_amount=(@jf_amount+@hq_jf_amount),ttl_jf_amount=(@ttl_jf_amount+@hq_jf_amount),last_update_time=getdate(),[version]=(@version+1) where account_id=@account_idendcommit tran;set @statuscode = 1;if(@@error0)beginset @statuscode = 0;rollback tran;endend
-- ===============测试=======================================================  /* declare @statuscode int = 1;     exec sp_gm_jf_cutscore 'admin','gs_jf_0004',2,1,'',@statuscode output     print @statuscode*/-- =============================华丽的分割线===================================set ansi_nulls ongoset quoted_identifier ongoalter proc [dbo].[sp_gm_jf_cutscore]    @account_id varchar(30), --兑换id 如admin    @gs_categorynumber varchar(12), --兑换商品类型    @card_num int,  --兑换数量    --@hq_jf_amount int, --兑换的积分总值 每个类型对应积分量*兑换数量    @state varchar(16),--兑换状态    @use_desc varchar(400), --备注    --输出参数    @statuscode int output            -- 状态码: 0:失败 1:成功 2: 不能重复获取asbegin        set nocount on;--不返回计数(表示受 transact-sql 语句影响的行数)       declare  --判断处理 自定义变量                        @score int ,                --要兑换商品类型的积分值            @scoresum int,                --要兑换商品类型的积分总值                @jf_amount int,                --可用积分            @version int;        --版本号            select @score=gs_score  from gm_jf_good_rules where gs_categorynumber=@gs_categorynumber   --'gs_jf_0003'             if(@card_num>0)            begin                set @scoresum=@score*@card_num*(-1)            end              select @jf_amount=jf_amount,@version=[version] from gm_jf where account_id=@account_id;                         if(@jf_amount>@scoresum*(-1)) --判断可用余额是否大于 兑换所需要的积分            begin                    begin tran;                 --插入详情 gm_jf_detail                insert into gm_jf_detail                        (account_id,jf_categorynumber,card_num,hq_jf_amount,[state],use_desc)                        values                        (@account_id,@gs_categorynumber,@card_num,@scoresum,@state,@use_desc)                                --修改总表字段 可用余额 版本号 gm_jf                                update gm_jf set jf_amount= (@jf_amount+@scoresum) ,last_update_time=getdate(),                                          [version]=(@version+1) where account_id=@account_id                                                          set @statuscode = 1;                commit tran;            end        else            begin                set @statuscode = 2; --可用积分小于要兑换物品的积分总值 兑换失败            end        if(@@error0)    begin        set @statuscode = 2;        rollback tran;    endend
   
 
   