一张订单7天后自动收货问题

我纯洁全身都纯洁 2016-03-02 11:16:02
我想做的类似淘宝的功能
比如有一张订单的时间是2016-01-01 12:12:12
那么我要在7天后2016-01-08 12:12:12让它的状态变成已收货
假如现在有1W张订单,每个订单的时间都不一样,都要7天后改变状态,这要怎么实现?

每天0点统一改状态的方式先不考虑
...全文
2331 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2020-04-03
  • 打赏
  • 举报
回复
我是看有人把这个帖子顶起来就回复了,没看提问日期
  • 打赏
  • 举报
回复
引用 56 楼 ggglivw 的回复:
卧槽,我2016和2019年居然都回了这个帖子,你更牛逼,居然还没结贴.
我仔细看了下 已经结果贴了啊。问题是你是怎么把这个帖子挖出来的。
「已注销」 2020-04-03
  • 打赏
  • 举报
回复
卧槽,我2016和2019年居然都回了这个帖子,你更牛逼,居然还没结贴.
  • 打赏
  • 举报
回复
引用 54 楼 ggglivw 的回复:
所有需要自动收货的,放入一个队列,只需要查这个队列即可。工作量瞬间减少.而且能保证时间,找到一个不符合的后面都不看了.
挖坟
「已注销」 2019-10-23
  • 打赏
  • 举报
回复
所有需要自动收货的,放入一个队列,只需要查这个队列即可。工作量瞬间减少.而且能保证时间,找到一个不符合的后面都不看了.
lylclz 2019-01-04
  • 打赏
  • 举报
回复
延迟队列:https://github.com/chenlinzhong/php-delayqueue
qq_34597788 2018-04-16
  • 打赏
  • 举报
回复
这个问题比较简单 当订单量比较小时,crontab每15秒扫描一下订单的redis队列然后变更状态, 当订单量很大时,在高频页面(比如首页)由用户在无感知情况下去异步请求redis队列修改订单状态,因为巨大的订单量意味着有巨大的访问用户,让每个访客处理一个满足条件的订单,不会增加服务器的负载
mateng2460550 2016-03-14
  • 打赏
  • 举报
回复
引用 32 楼 eight_hw 的回复:
取最小的第一条数据第一次执行,第一次执行完后取第二条计算7天的时间,在执行下一个定时器,这样一次只会有一个定时器运行
最好用两个表,一个放超过七天的,一个放没有超过的,然后用上面的方法。
「已注销」 2016-03-12
  • 打赏
  • 举报
回复
引用 36 楼 djy18178 的回复:
上面说的 每个订单起一个任务 看起来是能实现你的需求 但是如果你订单数很大 那么任务起的太多 你的内存会被撑爆吧 我觉得统一处理比较好 你老板说不考虑··· 他懂技术?
你天真了,你敢说不好做,别个马上放大招.XXX不都是这样做的吗?别个不是做到了
  • 打赏
  • 举报
回复
建议统一处理 实在不行只有轮询了, 先 select min(下单时间)+7天 where 订单状态为未确认 然后定时器或计划任务 当到时间之后 处理订单 然后继续循环
wojiaonimabi 2016-03-11
  • 打赏
  • 举报
回复
写个数据库定时器怎么样。
X_TIE 2016-03-11
  • 打赏
  • 举报
回复
直接写个定时器跑就行了,定时器每过几秒扫一次数据库,看录入的时间+7天是否小于当前系统时间,如果是就拿出来循环去改状态就ok了
疯狂熊猫人 2016-03-11
  • 打赏
  • 举报
回复
引用 22 楼 Mr_yyy 的回复:
感觉可以这样设置:有一个定时任务 进行每天跑一次,检测第二天需要自动收货的订单,然后将这些订单信息存到一个表中,再起一个定时任务去每5分钟或10分钟扫描一次这个表,进行自动收货操作。。。感觉这样数据量小了很多
这个方案相对来说是很OK的,并且扫描数据库表也是最保险的一种做法,我再讲一下我的想法。 1、每天需要自动收货的订单量,必然小于7天总的需要自动收货的订单量。 2、可以继续将第二天需要自动收货的订单,按照订单号位数0~9再分到10张表中去,做到均匀分布 3、每个表启动一个定时任务去扫描,如果发现有需要处理的订单,那么把这些订单直接丢到内存队列或者MQ消息队列中 4、根据实际情况,启动一定数量的订单自动收货线程去消费内存队列或者MQ消息队列中的订单信息
skran 2016-03-07
  • 打赏
  • 举报
回复
引用 32 楼 eight_hw 的回复:
取最小的第一条数据第一次执行,第一次执行完后取第二条计算7天的时间,在执行下一个定时器,这样一次只会有一个定时器运行
这方法貌似可行,就是得保证稳定性。
放纵的青春 2016-03-07
  • 打赏
  • 举报
回复
笨办法就是 起个任务 一直在那扫 时间到了的就处理
放纵的青春 2016-03-07
  • 打赏
  • 举报
回复
上面说的 每个订单起一个任务 看起来是能实现你的需求 但是如果你订单数很大 那么任务起的太多 你的内存会被撑爆吧 我觉得统一处理比较好 你老板说不考虑··· 他懂技术?
  • 打赏
  • 举报
回复
获取起一个定时器,频率快点,5分钟一次监测
引用 42 楼 sinat_27650399 的回复:
只能说你们老板比较奇葩,如果一定要这样会比较麻烦 下单成功后,向一个先进先出队列插入订单信息,然后起一个定时器,定时去取队列头,拿出判断是否>7天,
  • 打赏
  • 举报
回复
只能说你们老板比较奇葩,如果一定要这样会比较麻烦 下单成功后,向一个先进先出队列插入订单信息,然后起一个定时器,定时去取队列头,拿出判断是否>7天,
BeautyMyth 2016-03-07
  • 打赏
  • 举报
回复
在数据库里面建个计算字段,公式为 case when(当前时间>=(订单时间+7)) then 1 --已收货 else 0 --未收货 end
gggggame 2016-03-07
  • 打赏
  • 举报
回复
不放内存,必轮循。看处理量,数据量大就分表,每天一个表或每小时一个表,看业务量。
加载更多回复(34)

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧