您当前的位置: 首页 > 数据库教程 > MySQL教程 > 积分获取和消费的存储过程学习示例

积分获取和消费的存储过程学习示例

作者:不详 来源:网络 发布时间: 2014-07-17 12:25 点击:
这篇文章主要介绍了积分获取和消费的存储过程学习示例,这个只是学习一下存储过程的使用方法,需要的朋友可以参考下 1.GM_JF客户账户积分表 2. GM_JF_DETAIL客户账户积分消费记录 3. GM_JF_ACTION _RULES积分动作规则表 4.GM_JF_GOODS _RULES积分商品规则表 -- ========

积分获取和消费的存储过程学习示例

  这篇文章主要介绍了积分获取和消费的存储过程学习示例,这个只是学习一下存储过程的使用方法,需要的朋友可以参考下

  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
分享到:
本文"积分获取和消费的存储过程学习示例"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4