前一段给客户做了一个,客户管理系统,系统里设计到了用户的积分问题。
积分要求是:
1、用户每消费一元,积分自动加1
2、从用户注册日开始,每过 一天,用户的积分自动加1。
3、有特殊原因,管理员可以通过后台给用户加分或减分。
4、积分可以用来兑奖,兑奖后,自动减去相应的积分。
涉及到4个表:
1、clubuser用户表,2、consumelog记录用户的消费日志,3、scoreadd管理员为用户加的分。4、prizelog用户兑换过的奖品。
原来的系统实现是:
要求1:
他们的消费记录通常是导入的,每次导入后,需要重新计算一下所有用户的积分。
要求2:
用APPLICATION保存最后更新用户积分的时间,然后和当天判断,如果是不是当天,就给用户加分,设置APPLICATION为当天,如果是,就不进行操作。
要求3:
管理员为某个用户加过分以后,重新计算一下这个用户的积分。
要求4:
用户兑奖后,要重新计算一下他的积分。
感觉不是他合理:
1、导入后计算所有用户的积分不合理,因为,计算积分是很麻烦的,要把用户的消费积分,在网积分,管理员加的积分全部加起来,然后减去消费积分得出来,写入用户表。如果用户多了,消费记录多了,算起来要好几分钟。
2、每次都要判断APPLCATION的状态,感觉不合理。
3,4也不是太合理,都要重新计算用户的积分,感觉不合理。
所以做了调整。
1、3、4分别在表,consumelog,scoreadd,prizelog表中写触发器
2、建立一个作业,在每天0:00:00的时候为所有用户加1分。
实现细节:
1、表 consumelog 触发器
添加记录
CREATE TRIGGER addscore ON [dbo].[consumelog]
FOR INSERT
AS
declare @num as int
declare @uid as int
select @num=cmoney,@uid=userid from [inserted]
update clubuser set score=score+@num/2 where id=@uid
删除记录
CREATE TRIGGER decscore ON [dbo].[consumelog]
FOR DELETE
AS
declare @num as int
declare @uid as int
select @num=cmoney,@uid=userid from [deleteed]
update clubuser set score=score-@num where id=@uid
3、scoreadd触发器
添加记录
CREATE TRIGGER otheraddscore ON [dbo].[scoreadd]
FOR INSERT
AS
declare @num int
declare @uid int
select @num=score,@uid=userid from [inserted]
update clubuser set score=score+@num where id=@uid
(这个表不存在删除)
4、prizelog触发器
添加记录
CREATE TRIGGER prizedecscore ON [dbo].[prizelog]
FOR INSERT
AS
declare @num int
declare @uid int
declare @prid int
select @prid=prizeid,@uid=userid from [inserted]
select @num=Score from prize where id=@prid
update clubuser set score=score-@num where id=@uid
删除记录
CREATE TRIGGER prizeaddscore ON [dbo].[prizelog]
FOR Delete
AS
declare @num int
declare @uid int
declare @prid int
select @prid=prizeid,@uid=userid from [deleted]
if @@rowcount>0
begin
select @num=score from prize where id=@prid
update clubuser set score=score+@num where id=@uid
end
2、作业的建立
SQL SERVER--》管理--》SQL SERVER代理--》作业--》新建作业
常规 --名称:”每天添加金色俱乐部会员积分“
步骤--》新建...--》名称 ”添加分数"--》类型:TSQL--》数据库:你要操作的数据库--》命令:
update clubuser set score=score+1
调度 --》名称--》调度类型--》反复出现--》每天1次-->时间:0:00:00
点 确定保存。
在 作业列表中就有一个 作业,名称是 每天添加金色俱乐部会员积分
启动该作业前要先启动SQL SERVERAGENT,并设置为随系统启动,OK了。
这样做以后,只需要添加消费记录,加分记录,领取奖品的记录就可以了,不用每次操作都要考虑分数了。