首页 数据库 mysql教程 积分获取和消费的存储过程

积分获取和消费的存储过程

Jun 07, 2016 pm 02:57 PM
2 分表 存储 客户 消费 积分 获取 账户 过程

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 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 AN_CategoryNumber=@JF_CategoryNumber;

if(@repetitionsCycle<1)
BEGIN
set @repetitionsCycle_second = (@repetitionsCycle-1)*24*60*60;
select @realFrequency=COUNT(1) from GM_JF_DETAIL where ACCOUNT_ID=@ACCOUNT_ID and JF_CategoryNumber=@JF_CategoryNumber and USE_DATE <= @USE_DATE and USE_DATE >= CONVERT(varchar(19),DATEADD(SECOND,-@repetitionsCycle_second,@USE_DATE),120)
END
ELSE
BEGIN
select @realFrequency=COUNT(1) from GM_JF_DETAIL where ACCOUNT_ID=@ACCOUNT_ID and JF_CategoryNumber=@JF_CategoryNumber and USE_DATE <= @USE_DATE and USE_DATE >= CONVERT(varchar(10),DATEADD(DAY,-(@repetitionsCycle-1),@USE_DATE),120)
END    

if(@realFrequency>=@repetitionsFrequency)    --实际周期大于周期次数
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,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_ID
select @count = count(1) from @temp_table;
--判断并更新总积分(0:添加 其他:修改)
IF(@count=0)
begin
insert into GM_JF(ACCOUNT_ID,JF_AMOUNT,TTL_JF_AMOUNT)
values
(@ACCOUNT_ID,@HQ_JF_AMOUNT,@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 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_ID
end

Commit tran;
set @StatusCode = 1;

IF(@@ERROR<>0)
BEGIN
set @StatusCode = 0;
ROLLBACK tran;
END
END
登录后复制
-- ===============测试=======================================================
  /* declare @StatusCode int = 1;
     exec sp_GM_JF_CutScore 'admin','GS_JF_0004',2,1,'',@StatusCode output
     print @StatusCode*/
-- =============================华丽的分割线===================================

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER 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: 不能重复获取
as
begin    
    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(@@ERROR<>0)
    BEGIN
        set @StatusCode = 2;
        ROLLBACK tran;
    end
END
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

华为明年将推创新 MED 存储产品:机架容量超过 10 PB,功耗低于 2 kW 华为明年将推创新 MED 存储产品:机架容量超过 10 PB,功耗低于 2 kW Mar 07, 2024 pm 10:43 PM

本站3月7日消息,华为数据存储产品线总裁周跃峰博士日前出席MWC2024大会,专门展示了为温数据(WarmData)和冷数据(ColdData)设计的新一代OceanStorArctic磁电存储解决方案。华为数据存储产品线总裁周跃峰发布系列创新解决方案图源:华为本站附上华为官方新闻稿内容如下:该方案的成本比磁带低20%,功耗比硬盘低90%。根据国外科技媒体blocksandfiles报道,华为发言人还透露了关于该磁电存储解决方案的信息:华为的磁电磁盘(MED)是对磁存储介质的重大创新。第一代ME

谷歌安全码在哪里获取 谷歌安全码在哪里获取 Mar 30, 2024 am 11:11 AM

谷歌验证器是一种用于保护用户账户安全的工具,其密钥是用于生成动态验证码的重要信息。如果忘记了谷歌验证器的密钥,只能通过安全码进行验证,那么下文本站小编就将为大家带来谷歌安全码在哪里获取的详细内容介绍,希望能帮助到大家,想要了解的用户们就请跟着下文继阅读吧!首先打开手机设置,进入设置页面。下拉页面,找到Google。进入Google页面,点击Google账号。进入账号页面,点击验证码下方的查看。输入密码或者使用指纹验证身份。获得Google安全码,利用安全码验证谷歌身份。

QQ音乐怎么领取积分?QQ音乐领取积分教程 QQ音乐怎么领取积分?QQ音乐领取积分教程 Mar 15, 2024 pm 10:49 PM

  QQ音乐是一款拥有很多音乐类型的播放软件,大家想要收听什么类型的音乐都可以在这里搜索查找。所有音乐的音质都是非常不错的,它有很多不同的音质选择。那么大家知道QQ音乐怎么领取积分吗?QQ音乐领取积分详细教程:  1、首先打开【QQ音乐】APP软件,点击底部功能栏内【我的】功能按钮。  2、然后点击【活动中心】功能按钮。  3、接着点击【领积分】按钮,即可领取到积分了。软件介绍  1、高品质音乐播放;  2、专辑图片和全屏歌词显示;  3、登录QQ同步电脑上QQ音乐我的收藏歌曲;  4、海量在线

Ubuntu上的Git安装过程 Ubuntu上的Git安装过程 Mar 20, 2024 pm 04:51 PM

Git是一个快速、可靠、适应性强的分布式版本控制系统。它旨在支持分布式的非线性工作流,使其成为各种规模的软件开发团队的理想选择。每个Git工作目录都是一个独立的存储库,具有所有更改的完整历史记录,并能够跟踪版本,即使没有网络访问或中央服务器。GitHub是托管在云上的Git存储库,它提供了分布式修订控制的所有功能。GitHub是Git的存储库,托管在云上。与作为CLI工具的Git不同,GitHub有一个基于Web的图形用户界面。它用于版本控制,这涉及到与其他开发人员协作,并跟踪随时间推移对脚本和

真我 12 Pro怎么安装双卡? 真我 12 Pro怎么安装双卡? Mar 18, 2024 pm 02:10 PM

虽然说国产手机的大致操作是很相似的,但是在有的细节上面还是会有些区别的,比如说不同的手机型号和制造商可能会有不同的双卡安装方式。二真我12Pro这款新手机也是支持双卡双待的,但是这款手机具体又应该怎么安装双卡呢?真我12Pro怎么安装双卡?在安装之间记得先把手机关机哟。步骤一查找SIM卡托盘:查找手机的SIM卡托盘,通常,在真我12Pro中,SIM卡托盘位于手机的侧边或顶部。步骤二插入第一张SIM卡,使用专用的SIM卡针或一个细小的物体,将其插入SIM卡托盘中的开槽,然后,将第一张SIM卡小心地

铁路12306app怎么用积分兑换火车票 铁路12306app积分兑换火车票的方法 铁路12306app怎么用积分兑换火车票 铁路12306app积分兑换火车票的方法 Mar 12, 2024 pm 04:28 PM

  铁路12306app怎么用积分兑换火车票?铁路12306app是一款可以方便人们生活的非常智能的软件。用这个软件买票是非常方便的,而且还比较迅速,大家都比较喜欢用这个软件来买票,因为用这个软件买票还可以获得一些积分,用户就可以用这些积分来兑换火车票的,很多用户都不知道要怎么用积分来兑换火车票,下面小编整理了用积分兑换火车票的方法供大家参考。铁路12306app积分兑换火车票的方法  1、打开手机上到铁路12306软件,选择乘车地方以及时间后点击“查询车票”。  2、在查询的车票

微信中查看账户小号的简单步骤 微信中查看账户小号的简单步骤 Mar 26, 2024 pm 02:26 PM

1、登陆微信后,在下方选项进入:【我】2、选择【设置】然后找到【账号与安全】打开它。3、然后在新界面的最下方找到选项【微信安全中心】并打开。4、进入新页面后,选择第一项【找回账号和密码】。5、直接使用【申诉找回微信账号密码】进入新界面。6、选择开始申诉!你会看到这个手机登陆过的所有微信账号了。

gateio交易所官方网站入口 芝麻开门gate官网入口 gateio交易所官方网站入口 芝麻开门gate官网入口 Feb 21, 2025 pm 02:48 PM

作为加密货币交易领军者,Gate.io 提供广泛的交易对、衍生品和金融服务。其中文版网站芝麻开门 Gate 方便中国用户使用,提供与 Gate.io 相同的功能,但更适合国人习惯。用户可通过指定网址访问 Gate.io 交易所或芝麻开门 Gate 官网,请务必谨慎保管账户信息,并仅访问官方网站以保障安全。

See all articles