抢单模式的研究

最近在做关于公司的一个社区的项目,在其中用到了一些业务模式,对这些模式的应用做一个简单的总结。

这是一个类似滴滴的抢单模式的项目, 对于抢单模式的实现做一个小小的总结。

主要用到了三个表,问题表q,问题流转表q_flow,答案表a。

q表

question_id user_id status time_out
5 100393 0 2018-02-02




其中对q表的字段介绍,user_id标识是否需要分配给指定的回答者,status有两个状态,0:未分配状态,1:已分配状态

还有一个字段time_out用来记录超时时间。如果需要指定给人抢单,则多出一个字段assign_user_id。

q_flow表

question_id question_user_id answer_user_id flow_stasus
5 100393 10001 0
5 100393 10002 0
5 100393 10003 0







表q_flow也有几个字段,对这几个字段的值说明一下,question_id为问题ID,question_user_id为提问用户ID,answer_user_id为流转用户ID,flow_status有几种状态,0:待抢答,1:已被抢答,2:已抢未答,3:放弃,4:超时,9:已回答

a表的字段

answer_id question_id question_user_id answer_user_id content
1 5 100393 10002 哈哈哈哈



抢单的简要流程为:

1.提单,用户向系统提交问题,系统将用户的问题设置为待抢答状态,q表的status状态为0,q_flow表中没有记录

2.发单,系统通过指定的分配策略,将用户提交的问题分发给若干个回答者,每个回答者在flow_status中对应一条记录,这时候

每条记录的flow_status的状态都为0

3.抢单,回答者(假定为10002)点击抢单操作触发抢单,抢单后q表中国的status状态置为1,q_flow表中对应抢单者10002的那条记录的flow_status状态置为2(已抢未答),其他的同一批次的10001,10003记录的flow_status的状态置为1(已被抢答),同一批次中只能有一条记录的状态为2

4.回答,回答者10002抢单以后可以有三种操作:放弃,回答,一直等待到超时

正常为回答,抢单者回答以后,其对应的10002的记录的flow_status的状态置为9,同时答案表中插入一条记录。

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/79238062
今日推荐