首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于用户消费一订金额等级自动升级

2013-07-16 
关于用户消费一定金额等级自动升级本帖最后由 huangwenquan123 于 2011-03-22 22:30:22 编辑目前做的项目

关于用户消费一定金额等级自动升级
本帖最后由 huangwenquan123 于 2011-03-22 22:30:22 编辑 目前做的项目有个关于用户消费一定金钱的时候等级自动升级
比如:
用户A,目前消费:990,等级:银牌代理商
当消费到1000的时候 升级为金牌代理商,不是人工设置升级。

目前想法:
(1)用存储过程,结帐的时候扣除相应购买商品的库存数,用户金钱数,增加用户消费数量等等,然后根据当前用户等级ID取到该等级ID的上一级等级的消费下限,和该用户消费金额进行判断,大于等于的话就修改用户等级
(2)在业务逻辑中判断,写个相应方法,当结帐完进行判断

问题:
(1)以前没接触过这种类型的项目,像论坛一些用户到达一定积分自动升级用户组是怎么做的?
(2)以上两种方法该选哪种?还有其他方法吗?望各位提供个思路!
[解决办法]
用户的多的话。还是用定时任务来做

每天夜里悄悄地 遍历用户ID 取出积分和上下线 一个个进行更新等级。

比如CSDN 就是每天4点更新整站用户数据。。
[解决办法]
需要及时更新等级的话,还是结账时处理比较好
个人比较赞同存储过程来处理

半夜定时更新数据可以作为一个辅助手段,用来进一步保证数据的正确性(由于可以通过存储过程返回值来判断,所以这个可能没有必要)
[解决办法]
等级应该是实时计算来的吧,准确!
[解决办法]

引用:
考虑了下,这个和积分不同性质,不同代理商代理商品价格不一样,如果消费到一定金额的话没有给它升级的话,
那他这段时间到设置作业的时间,如果有在消费的话就会亏了!

你这个需求是这样的啊。

如果是用夜里的方法的话  那么当然要更新今天的消费记录了。。打折后在返还给用户就是了。

如果访问不大的话 实时更新也可以。。
[解决办法]
这个问题可以用后台的windowsservice服务处理,业务逻辑很清晰,只需要判断用户积分,表全有的,只需要一个后台服务一天跑2次(中午晚上),统计积分,符合条件的就更新等级表
[解决办法]
用户消费记录表,添加信息的时候写个触发器,在触发器中判断总消费金额,如果超过1000, 更新用户状态。

不愿意用触发器就用存储过程是一样的。
[解决办法]
查询的时候 直接 case when then 不就可以了吗 ~
[解决办法]
结账的时候一起处理不是很好吗  结账时反正是需要更新金额的  判断下连等级一起更新不是很好
[解决办法]
如果不是什么大的数据量访问的话 就即时操作
免得造成用户的 一些 误会 或者什么的

如果是大批量数据 就 在晚上  偷偷的 给升级掉


[解决办法]

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           王五       银牌代理商
*/


[解决办法]
触发器啊。

或者在存储过程写入这个业务逻辑也可以啊。
[解决办法]
这个问题完全可以简化得很容易吧。

直接把消费分数档位作为等级换算,无论你显示不显示用户等级,比如用户积分很少,一个牌都混不上,相当于没有等级,你不也得显示分数吗,所以取分数是必然的。根据你的积分等级制度(可以写在一个配置里,或直接在程序里设置),if(积分>1000){等级="金牌";} else if(积分>500){等级="银牌";} else if(积分>100){等级="铜牌";} else {等级="没牌";}

热点排行