如何判断订单状态
我现有的订单状态是:
全部,列出所有订单,并且要各自标注清楚情况
已完成,use_status = 5 && paid_at != null
待支付,use_status = 0 && padi_at == null && close = 0
待使用,use_status = 0 && padi_at != null
已退款,这和比较复杂,因为有一次下单多个,但是退款部分的情况,目前是order主表,关联多个order_item附表
已取消,use_status = 0 && padi_at != null && close = 1
我现在是在后台分情况各种where查,但是感觉逻辑很混乱,另外退款又是单独查的order_item表,还有就是不排除以后又会加新条件,我想把代码理顺,这样后面维护成本也低,不然过一断时间再去看,简直是噩梦
请教用啥呢,责任链吗?还是有什么别的方法
本作品采用《CC 协议》,转载必须注明作者和本文链接
scope
你的单词写错了,应该是paid_at 支付时间,数据表设计可以参考,订单状态机
可以单独维护一个你自己用的字段
github.com/tucker-eric/eloquentfil...
我是用管道模式,有点像责任链模式来逻辑切割
每个类中加你所写的逻辑,比较清晰,返回的格式是统一的 [status:1,note:'待支付']
后续加更多的状态,我只需要再加一个类就好了
其实最好分开不同的状态字段,这样维护起来比较好维护和管理
我用的枚举
个人建议将并列的状态分成不同的枚举属性。我通过楼主的描述粗略猜测应该有至少三个并列的的状态:交易状态、支付状态 和 退款状态。这里尽量不要用时间来代替枚举值,因为时间仅能做布尔值判断,而布尔值不如枚举方便扩展。要记录各个状态的时间可以再单独增加相应的时间字段,按应用场景来看,订单应该记录的时间字段应该大致等于所有并列状态的所有枚举值,以便于之后的跟踪筛选。如:支付单创建时间、支付完成时间、订单创建时间、订单使用时间、订单完成时间、订单取消时间。
查询条件是应用场景定义的,用本地作用域来进行封装是最简单的实现方案。
状态流转不要刻意的采用状态机之类的模式(我个人觉得比较鸡肋)。按照最小职责原则将业务拆分封装做好判断就好,毕竟状态流转只是订单处理流程中很小的一块逻辑。