实现3天订单自动取消
来源:互联网 发布:bulkrequest java 编辑:程序博客网 时间:2024/04/29 20:32
采用2种方式混合来处理,保证结果的完全准确性。
1、采用主动触发的方式来取消订单。
订单的表里面,再加入有效时间字段,如果查询的时候,如果订单为已下单未处理状态,查询有效字段,如果该字段的值少于当前时间,说明订单是有效的,可以对订单进行下一步的操作,如果该字段的值大于当前时间,直接更新订单状态为取消。 (不需要清理,在数据新增的时候设置一个过期时间,用户付款的时候检查该订单是否在有效期之内就可以了。)
2、每天凌晨定时处理(一条sql语句搞定),订单有效时间截止昨天晚上23:59:59秒的非已下单未处理订单,批量状态改成无效。
混合处理的好处:
1、节省资源
2、显示结果的准确性。
1.quartz,每几分钟执行一次(根据订单处理速度,和订单生成情况)。
2.没次指定其中的更新条数,例如前1000条。
3.这种方式的确会影响性能,所以要是系统订单比较多,推荐独立的定时服务器。
1、可以创建一个queue(LinkedBlockingQueue),当有新的订单时将该订单放入queue,(这里可以保证该queue是按照过期时间顺序排列的,较后的对象会更晚过期)。
2、另起一个线程A,对该queue读,读到一个尚未过期且未完成的订单则计算离过期的时间xx毫秒,然后将线程A进行sleep(xx),或者wait(xx);随你喜欢了。读到已完成的订单则直接poll(),读到未完成的订单就让它过期掉就好了。
3、可能出现的问题:一些已预订并且已完成的订单可能在3天之内一直存在于该queue中,对内存造成不必要的负担。如果希望能及时清理掉的话,可能需要自己实现该queue,毕竟队列里的内容都是有序的,根据需要移除订单的生成时间,用一个二分法查找是可以很快定位到该对象的。基于链表实现的queue需要移除该链表的一个元素对楼主肯定不会有什么问题吧。
参考自:
http://www.iteye.com/problems/102038
http://bbs.csdn.net/topics/390213669
- 实现3天订单自动取消
- 7天自动收货,30分钟不支付订单自动取消是如何实现的?
- 7天自动收货,30分钟不支付订单自动取消是如何实现的?
- 如何实现下订单后一个小时后未付款的订单自动取消
- 自动取消失效订单(监听器 + quartz)
- DelayQueue实现订单的定时取消
- 自动取消失效订单(spring整合quartz)
- 利用spring实现特定时间后取消订单
- SAP中实现生产订单自动关闭
- 订单取消插件@!
- 取消生产订单下达
- 取消发货订单
- BAPI_PO_RESET_RELEASE---取消采购订单审批
- JavaEE结合quartz实现订单自动失效功能
- 如何实现软件的自动启动和取消自动启动
- 实现软件的自动启动和取消自动启动
- 订单编号自动编写
- 自动创建采购订单
- 如何跟大焕学城市化和房地产
- hdu 4119 Isabella's Message【字符串模拟】
- 腾讯ios,Android宕机日志收集
- “背景建模/背景减法/前景检测”测试视频库
- wsdl学习
- 实现3天订单自动取消
- 使用Python实现OAuth2.0认证服务器
- 《算法导论》5、冒泡排序实现(C++)
- 解决oracle乱码问题。
- centos升级python
- lost in the city(超时了...)
- 枚举类型应用(一)
- 黑马程序员——java学习笔记--网络编程
- C和C++实现方式