首页 新闻 会员 周边

求一程序设计方案

0
悬赏园豆:10 [已关闭问题] 关闭于 2010-12-26 16:24

现在我们平台,手机充值功能处,可以给指定手机号码进行充值
充值时平台会在后台写一张订单进数据库
订单主要由订单号,创建时间,手机号码,充值人,充值金额...组成
现手机充值第三方,我们只需要提交给他们手机充值号码和金额,他们帮我们充值
他们那边增加了一个策略限制
在五分钟之类不能对同一手机进行二次充值.
提出一种设计方案,合理进行顺序通知订单.
要求:同一个人的订单必须按创建时间进行有序通知.
      
方案可以修改数据库字段,

需要一个后台设计通知方案.

我已经想到了一个.看大家能不能提出一种更好的,

或者我想的这种方法有什么bug或者什么优化的地方

订单数据表设计
订单号 充值人 充值金额 充值号码 充值状态 通知时间(增加) ...
在插入订单时,进行判断select 通知时间 from 订单表
where 手机号码='xxx' and 充值状态=未充值 得出该笔订单的充值时间
如果拿到了数据,代表该手机号码有需要充值的订单正在序列中.
这样,我们可以把通知时间在查到的充值时间的基础上加上5分钟.(最好是比5分钟多.这里暂时订为5分钟)
如果没拿到数据,我们可以把通知时间插入当前时间

再后台通知程序运行的时候,我们只需要判断手机号码,充值状态,通知时间.
为了防止后台等待时间时,我们插入订单,这样在通知时间上可能会有点bug,我们需要在后台增加一步操作

初步程序设计,
程序首先拿出通知时间小于或等于当前时间的订单,按照主键进行排序通知,队列通知完成后,线程等待5分钟(为什么等待5分钟,后面解释),然后继续进行拿需要通知订单序列,通知,如此循环.

1.为什么需要等待5分钟???
答:因为如果不等待5分钟,首先对系统资源肯定是有无辜消耗.

2.程序初步设计有问题吗?
答:具个人思考,还是有个问题的.
比如说,当一个队列通知队列较长,消耗时间太多,比如说消耗时间5分钟,有可能是5分钟
+
然后等待5分钟,这样在重新拿队列的时候有可能会一次拿出两笔同一手机号的订单.
所以我们需要在通知对列里面进行判断处理.
如果队列里面有几条需要通知的同一手机号码订单,只取最前面一条,这里具体实现应该可以,关键是优化算法
这样就可以达到我们想要的了

 

问题补充: 下面的朋友的答案感觉好像不行 如果遵循第三方策略 我们这边上面是不会同意的. 充值肯定让它冲,只是个到账时间问题. 怎么能不让人充值呢??? 流程不能变,用户充值,ok 我们通知,跑我们的流程,策略什么的在我们这边后台通知程序里面跑.
graymaster的主页 graymaster | 初学一级 | 园豆:7
提问于:2010-10-16 08:33
< >
分享
所有回答(1)
0

个人感觉,是不是简单点好些,遵循第三方策略,将订单放入队列,加入队列前对订单进行核对,若已存在则返回提示信息,提示当前号码已存在充值订单,请5-n分钟后进行操作。订单移出队列操作完成后,将订单信息保存到数据库,返回操作信息

wgz | 园豆:1254 (小虾三级) | 2010-10-16 16:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册