许多商城 app 中有个功能:在用户下单后,若超时未付款,则订单取消,实现剩余时间显示的最优方案是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
axing
V2EX    问与答

许多商城 app 中有个功能:在用户下单后,若超时未付款,则订单取消,实现剩余时间显示的最优方案是什么?

  •  
  •   axing 2016-05-01 20:32:19 +08:00 5440 次点击
    这是一个创建于 3517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前提:开发的是一个 hybrid app ,使用了 jqmobi 框架 当用户下了一单却未及时付款(两小时之内)时,需要在用户的待付款订单中显示出该条订单,并且显示其距离失效的剩余时间(剩余时间: 01:59:03 )每秒每秒的变化(页面显示上动态变化)。我自己想到的一个实现的笨办法是,在用户产生那条订单时,就为其计算了订单失效时间,存入数据库中,然后写了一个接口专门计算某条订单的当前时间距离其失效的剩余时间,然后前端在请求待付款订单数据的时候,就每秒都去调用计算剩余时间的那个接口,然后虽然这样可以实现剩余时间的显示,但是我发现这样频繁的请求,带来了其他问题,比如待付款订单页面中,每条订单点击后是可以查看其订单详情的,我就发现加了剩余时间请求后,当点击查看详情就一直加载请求数据,半天出不来,感觉要崩溃一样,所以想请教下做过这方面功能的大大们都是采取的什么方案去实现的?

    7 条回复    2016-05-02 13:56:54 +08:00
    dapang1221
        1
    dapang1221  
       2016-05-01 20:37:54 +08:00 via Android   1
    数据库里只记录创建时间,然后剩余时间放在前端来倒计时,不入库。创建订单是算出来失效时间,然后加入执行队列,在那个时间点上把订单失效。如果用户付款成功,则从队列中把这个取消掉。至于这种定时任务,有许多种东西可以实现。。
    rming
        2
    rming  
       2016-05-01 20:39:50 +08:00
    前端显示仅在第一次请求数据,后端 worker 去跑订单失效,另,不建议直接计算失效时间存库,根据下单时间和订单有效期计算就可以吧,为后续策略修改保留可扩展性
    Felldeadbird
        3
    Felldeadbird  
       2016-05-01 22:26:34 +08:00
    直接前端倒计时就可以了,由于受到机能的限制,时间会与服务器存在差异。一般客户不会持续傻傻看着倒计时的。可以做 1 小时请求一个服务器校正。
    kenken
        4
    kenken  
       2016-05-01 22:58:48 +08:00
    延迟消息最好。
    ThreeBody
        5
    ThreeBody  
       2016-05-01 23:32:53 +08:00 via Android
    两个字段,一个创建时间,一个订单状态,如果状态是等待付款,前端计算并显示倒计时。
    godlong
        6
    godlong  
       2016-05-01 23:35:38 +08:00
    楼主你也太傻了吧
    每秒都去请求。。。

    楼上几个说的都对
    axing
        7
    axing  
    OP
       2016-05-02 13:56:54 +08:00
    恩恩,谢谢大家的建议。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5211 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 08:34 PVG 16:34 LAX 00:34 JFK 03:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86