php怎么根据不同用户定时执行程序

毅拉罐 2016-07-11 05:38:40
这是一个订单系统,用户下单之后,经过一段时间没有付款就自动取消订单,这个应该怎么做?怎么能在一段时间之后自动改变订单状态?
...全文
254 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用户登陆的时候,在数据库里查询对应id的订单 让后用使用timediff()函数判断时间是不是超过30分钟,超过就删除。之后再把数据读取出来就好了
justS0 2016-07-14
  • 打赏
  • 举报
回复
引用 14 楼 xcxizz 的回复:
引用 5 楼 justS0 的回复:
用一个脚本就解决了 当前时间-订单生成时间>30分钟 更新订单状态
这个脚本怎么写,多长时间执行一次,数据库能支撑么
可以让用户主动触发啊 每次查看订单的时候 当前时间-订单生成时间>30分钟 改变订单状态 展示给用户
xuzuning 2016-07-13
  • 打赏
  • 举报
回复
通知谁? 他都放弃订单了,还在你网站闲逛?
毅拉罐 2016-07-13
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
那有什么区别? 如果没有人访问,那么做了给谁看? 对一个用户都打算放弃的订单,你还要去发短信称订单失效了? 既然是定单系统,那你也总得有人去处理有效订单吧? 既然有管理人员去访问系统,那么事情不就已经顺带做了吗?
也得有站内信通知吧
xuzuning 2016-07-13
  • 打赏
  • 举报
回复
那有什么区别? 如果没有人访问,那么做了给谁看? 对一个用户都打算放弃的订单,你还要去发短信称订单失效了? 既然是定单系统,那你也总得有人去处理有效订单吧? 既然有管理人员去访问系统,那么事情不就已经顺带做了吗?
毅拉罐 2016-07-13
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
HTTP协议协议是无状态的,所以与之配合的 php 是被动运行的 这就决定了 php 不能主动的去做什么事情,也就是你一开始就搞错了方向 php 只能在有访问需求时,附带完成你期望的工作 昨天对某商品下的单,到明天才有人去光顾该商品。 那么,那个订单的有效性是在下单后一小时本更改,还是在再次访问时被更改,就那么重要吗?
其实不光是订单的有效性,后续的功能还会有短信通知用户的功能,也要根据不同的用户去判断
xczizz 2016-07-13
  • 打赏
  • 举报
回复
引用 5 楼 justS0 的回复:
用一个脚本就解决了 当前时间-订单生成时间>30分钟 更新订单状态
这个脚本怎么写,多长时间执行一次,数据库能支撑么
毅拉罐 2016-07-13
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
你说的这些都是即时任务,而不是定时任务 再说假定你的定时任务是一小时一次(比如整点),那么在整点〇一分时有业务发生,按你的计划任务设置不是要到59分钟之后才去处理吗?显然是不合理的
是的,所以这块不知道该如何去做
xuzuning 2016-07-13
  • 打赏
  • 举报
回复
你说的这些都是即时任务,而不是定时任务 再说假定你的定时任务是一小时一次(比如整点),那么在整点〇一分时有业务发生,按你的计划任务设置不是要到59分钟之后才去处理吗?显然是不合理的
毅拉罐 2016-07-13
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
通知谁? 他都放弃订单了,还在你网站闲逛?
不只是没付款,还有付款后通知已发货,到货后通知用户确认收货等
傲雪星枫 2016-07-13
  • 打赏
  • 举报
回复
每分钟执行一次,把下单时间超过xxx分钟没有支付的订单,改变状态就可以了 不需要分用户。 可以使用crontab 定期执行一个php实现。
justS0 2016-07-12
  • 打赏
  • 举报
回复
用一个脚本就解决了 当前时间-订单生成时间>30分钟 更新订单状态
青鬆下的坚躯 2016-07-12
  • 打赏
  • 举报
回复
“经过一段时间没有付款就自动取消订单”,,其实跟用户没什么关系,至判断时间过期后取消就行~
xuzuning 2016-07-11
  • 打赏
  • 举报
回复
HTTP协议协议是无状态的,所以与之配合的 php 是被动运行的 这就决定了 php 不能主动的去做什么事情,也就是你一开始就搞错了方向 php 只能在有访问需求时,附带完成你期望的工作 昨天对某商品下的单,到明天才有人去光顾该商品。 那么,那个订单的有效性是在下单后一小时本更改,还是在再次访问时被更改,就那么重要吗?
毅拉罐 2016-07-11
  • 打赏
  • 举报
回复
引用 1 楼 zhangsheng_1992 的回复:
最简单的 订单在数据库里面存着 比如30分钟失效 写个进程每30分钟去遍历一次数据库 验证订单是否过期 过期就把订单取消 缺点 效率低 数据库压力高 再稍微高效点的 弄个缓存 待支付的订单写入缓存里面 失效30分钟 支付成功了的从缓存里面删除这个订单 30分钟以后没有支付的就自动过期了 查看订单的时候 如果没支付 先去缓存里面找一下这个订单 如果有这个订单 说明还没过期 没有的话 说明这个订单已经过期了 把数据库里面订单状态改为取消 缺点 缓存服务器挂掉会导致所有在缓存中未支付的订单完蛋 还有其他方式比如用队列 用socket.io的 但太过复杂 我就不说了
第一个方法有点问题,因为这个是根据下单时间来判断的,比如是18:05下的单,那就是18:35失效,另一个用户是18:06下单,就是18:36失效。所以得根据下单时间往后推半小时,不能固定每半小时。第二个方法的话在我这边程序行不通。
zhangsheng_1992 2016-07-11
  • 打赏
  • 举报
回复
最简单的 订单在数据库里面存着 比如30分钟失效 写个进程每30分钟去遍历一次数据库 验证订单是否过期 过期就把订单取消 缺点 效率低 数据库压力高 再稍微高效点的 弄个缓存 待支付的订单写入缓存里面 失效30分钟 支付成功了的从缓存里面删除这个订单 30分钟以后没有支付的就自动过期了 查看订单的时候 如果没支付 先去缓存里面找一下这个订单 如果有这个订单 说明还没过期 没有的话 说明这个订单已经过期了 把数据库里面订单状态改为取消 缺点 缓存服务器挂掉会导致所有在缓存中未支付的订单完蛋 还有其他方式比如用队列 用socket.io的 但太过复杂 我就不说了

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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