上篇对抢单模式进行了简单的总结,这篇对其中具体的流程进行进一步的说明
1.提单 100393用户提出一个问题
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 0 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
往问题表中插入一条记录,这时的status状态为0,q_flow流转表中没有记录
2.发单,系统按照指定的分发策略将单分配到若干个回答者手中,问题表中的记录status状态不变,流转表中每个分配到的用户会插入一条记录,流转状态flow_status为0
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 0 | 0000-00-00 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 0 |
5 | 100393 | 10002 | 0 |
5 | 100393 | 10003 | 0 |
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 1 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 1 |
5 | 100393 | 10002 | 2 |
5 | 100393 | 10003 | 1 |
1)回复,若抢单者抢单后正常回答,则流转中其对应状态变为9,其他记录的状态不变,q表中的状态也不变
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 1 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 1 |
5 | 100393 | 10002 | 9 |
5 | 100393 | 10003 | 1 |
2)放弃作答,这种情况为用户通过点击放弃按钮主动触发,不需要系统来触发
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 0 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 1 |
5 | 100393 | 10002 | 3 |
5 | 100393 | 10003 | 1 |
在抢单动作被触发后,q表中会有一个超时时间,此时q表中对应的记录的status为1,超时时间为预先设置的超时时间,系统后台会有一个线程实时扫描这类status为1,超时时间小于当前时间的超时记录,扫描到后会将q表中的记录状态置为0,q_flow表中的对应记录的状态置为4,即也回到待发单状态
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 0 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 1 |
5 | 100393 | 10002 | 4 |
5 | 100393 | 10003 | 1 |
关于超时,超时在这里指的有人抢单以后,抢单者一直不回答会出现超时,即问题处于已经被抢单状态以后才会出现超时,如果一个问题提出分配进入待抢单状态,这时有两种选择,一是不超时,不触发系统重新分配,问题会一直等待第一批分配者中的某个人抢单;二是超时,系统将这个问题再次分配给第二批人,第二批人和第一批的人都可以抢单,即增加抢单的人数。目前这里设置为不超时,超时仅指问题被抢单以后抢单者一直不回答导致的超时。
再次分发
如果抢单者抢到单以后,放弃或者超时,触发进入待发单状态后,系统会自动将问题再次分发,为待抢单状态,问题会被分配给下一批回答者来抢单,q表中的status状态仍为0,flow表中也会插入下一批分配到的回答者的记录
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 0 | 2018-02-04 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 10001 | 1 |
5 | 100393 | 10002 | 4 |
5 | 100393 | 10003 | 1 |
5 | 100393 | 10111 | 0 |
5 | 100393 | 10222 | 0 |
5 | 100393 | 10333 | 0 |
二。除了按照以上的流程通过抢单方式来进行问答以为,还可以向指定的回答者提问,即不通过抢单,直接专人回答的方式,这种情况表的变动如下。
1.提问,指定专人的提问环节相当于抢单模式的提单,发单,抢单三个步骤的合并,其中第三个抢单环节只有一个抢单者。q表中的status状态置为1,同时超时时间设置为永不过期,流转表中只插入一条记录,相当于只有一个抢单者,状态置为2
q表
quesiton_id | user_id | assign_user_id | status | time_out |
5 | 100393 | 20001 | 1 | 9999-12-30 |
question_id | question_user_id | answer_user_id | flow_status |
5 | 100393 | 20001 | 2 |
后面的流程和抢单模式下的流程是一致的,只是正常设置为回答者不可以放弃。也不会超时。