关于用户消费一定金额等级自动升级
本帖最后由 huangwenquan123 于 2011-03-22 22:30:22 编辑 目前做的项目有个关于用户消费一定金钱的时候等级自动升级
比如:
用户A,目前消费:990,等级:银牌代理商
当消费到1000的时候 升级为金牌代理商,不是人工设置升级。
目前想法:
(1)用存储过程,结帐的时候扣除相应购买商品的库存数,用户金钱数,增加用户消费数量等等,然后根据当前用户等级ID取到该等级ID的上一级等级的消费下限,和该用户消费金额进行判断,大于等于的话就修改用户等级
(2)在业务逻辑中判断,写个相应方法,当结帐完进行判断
问题:
(1)以前没接触过这种类型的项目,像论坛一些用户到达一定积分自动升级用户组是怎么做的?
(2)以上两种方法该选哪种?还有其他方法吗?望各位提供个思路!
[解决办法]
用户的多的话。还是用定时任务来做
每天夜里悄悄地 遍历用户ID 取出积分和上下线 一个个进行更新等级。
比如CSDN 就是每天4点更新整站用户数据。。
[解决办法]
需要及时更新等级的话,还是结账时处理比较好
个人比较赞同存储过程来处理
半夜定时更新数据可以作为一个辅助手段,用来进一步保证数据的正确性(由于可以通过存储过程返回值来判断,所以这个可能没有必要)
[解决办法]
等级应该是实时计算来的吧,准确!
[解决办法]
go
--创建用户表
create table 用户表(id int identity,username varchar(6),userstate varchar(20))
insert into 用户表(username,userstate)
select '张三','银牌代理商' union all
select '李四','银牌代理商' union all
select '王五','银牌代理商'
go
--创建消费表
create table 消费表(id int identity,消费金额 int,消费用户id int)
insert into 消费表
select 499,1 union all
select 200,2 union all
select 200,3 union all
select 500,2
go
--创建添加消费的存储过程
alter proc addfy(@userid int,@fvalue float)
as
begin
--插入数据
insert into 消费表 select @fvalue,@userid
--判断是不是银牌代理商
if((select userstate from 用户表 where id=1)='银牌代理商')
begin
--得到消费总额
declare @i float
select @i=sum(@fvalue) from 消费表 where 消费用户id=@userid
--判断是否可以升级了
if @i>1000
update 用户表 set userstate='金牌代理商' where id=@userid
end
end
go
--1号消费300
exec addfy 1,300
--查看未升级
select * from 用户表
/*
id username userstate
----------- -------- --------------------
1 张三 银牌代理商
2 李四 银牌代理商
3 王五 银牌代理商
*/
--1号再消费300
exec addfy 1,300
--查看已升级
select * from 用户表
/*
id username userstate
----------- -------- --------------------
1 张三 金牌代理商
2 李四 银牌代理商
3 王五 银牌代理商
*/