搜尋
首頁資料庫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
使用math.Max函数获取一组数中的最大值使用math.Max函数获取一组数中的最大值Jul 24, 2023 pm 01:24 PM

使用math.Max函数获取一组数中的最大值在数学和编程中,经常需要找出一组数中的最大值。在Go语言中,我们可以使用math包中的Max函数来实现这个功能。本文将介绍如何使用math.Max函数来获取一组数中的最大值,并提供相应的代码示例。首先,我们需要导入math包。在Go语言中,导入包可以使用import关键字,如下所示:import&quot;mat

如何在Java中获取LinkedHashSet的最后一个元素?如何在Java中获取LinkedHashSet的最后一个元素?Aug 27, 2023 pm 08:45 PM

从Java中的LinkedHashSet中检索最后一个元素意味着检索其集合中的最后一个元素。尽管Java没有内置方法来帮助检索LinkedHashSets中的最后一个项,但存在多种有效的技术,可以提供灵活性和便利性,有效地检索此最后一个元素而不破坏插入顺序-这是Java开发人员必须在其应用程序中有效处理的问题。通过将这些策略有效地应用于他们的软件项目中,他们可以实现满足此要求的最佳解决方案LinkedHashSetLinkedHashSet是Java中的一种高效数据结构,它结合了HashSet和

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、海量在线

天猫积分怎么兑换天猫积分怎么兑换Feb 23, 2024 pm 03:40 PM

天猫积分怎么兑换?在软件天猫中,我们每次消费会获得对应的积分。有些用户想要知道天猫怎么兑换物品。可以在会员中心的天猫积分中兑换。接下来就是小编为用户带来的有关积分兑换方式的介绍,感兴趣的用户快来一起看看吧!天猫积分怎么兑换答:在会员中心的天猫积分中兑换详情介绍:1、进入淘宝,点击右下方【我的淘宝】。2、点击进入【会员中心】。3、即可看到自己的【天猫积分】,点击进入。4、可以看到兑换物品。选择想要的物品进行【兑换】。5、使用天猫积分兑换即可。

支付宝会员积分在哪看支付宝会员积分在哪看Feb 23, 2024 pm 02:10 PM

支付宝会员积分在哪看?支付宝APP是可以积累到超多的积分,但是多数的小伙伴不知道支付宝会员如何的查看积分,接下来就是小编为用户带来的支付宝会员积分查看方法图文教程,感兴趣的用户快来一起看看吧!支付宝使用教程支付宝会员积分在哪看1、首先打开支付宝APP,主页面右下角【我的】专区;2、然后在我的专区中,点击【支付宝会员】服务功能;

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

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

天猫如何查看天猫积分天猫如何查看天猫积分Mar 01, 2024 am 10:10 AM

在天猫中购物后会获得天猫积分,有些朋友想去查看自己的天猫积分数量却找不到该在哪里查看。下面为大家介绍一下操作方法。在手机上打开天猫App后,点击页面右下角的“我”进入个人中心页面,然后再点击右上角的齿轮形状的“设置”图标,即可打开设置选项。2.来到设置页面后,在“个人信息”这一项上面点击进入。3.接下来,在进入的页面里找到“会员等级”,在它的后面点击显示的当前等级进入。4.在会员中心页面里橙色卡片的下方有一个“天猫积分”,在上面显示有自己目前获得有多少天猫积分,点击进入后可以查看到获得积分的相关

电信积分兑换话费怎么操作电信积分兑换话费怎么操作Mar 05, 2024 pm 01:30 PM

日常使用手机获得的电信积分可以用来兑换话费进行抵扣,有些用户还不清楚电信积分兑换话费怎么操作,可以在电信营业厅中的积分兑换中选择积分充话费即可,接下来就是小编为用户带来的积分兑换话费操作方法的介绍,感兴趣的用户快来一起看看吧!电信积分兑换话费怎么操作答:在电信营业厅中的积分兑换中选择积分充话费即可详情介绍:1、进入软件电信营业厅,再点击下方的【积分兑换】。2、进入页面,点击【我可兑换】。3、选择其中的【积分充话费】。4、输入使用积分后,获取验证码并确认即可。

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。