问题: 同一张报表,表中的数据需要大量人工去审核正确与否,有一个问题是给系统中不同的审核员展示不同的数据。 例:有一张淘宝订单表,有 5 个审核。这个 5 个人同时审核所有订单,如果给这 5 个审核展示不同的订单。或者 5 个人里只有 3 个人登录系统去审核的时候,给他们展示不同的订单。
大家有啥思路吗?
1
wawzw123 2019-07-12 16:58:58 +08:00 1
参考分单派单系统设计
|
2
sss15 2019-07-12 16:58:58 +08:00
如果你能知道当前在线审核人数的话,可以直接求余,每个人就分开了
|
3
kyuuseiryuu 2019-07-12 17:02:29 +08:00 via iPhone 1
创建一个队列,把单子 id 丢进队列里面去消费。
|
4
TypeErrorNone 2019-07-12 17:02:33 +08:00
取数据得时候加锁,改状态
|
5
JQZhang 2019-07-12 17:03:53 +08:00 1
没看明白需求,你举的那个例子是 5 个审核是 5 个人每个人审核一行数据里不同类型的数据,比如一个审数量,另一个审价格......,还是 5 个人审不同行的数据就行
|
6
lihongjie0209 2019-07-12 17:05:33 +08:00
这个需求还是不明确
如果现在系统有三个人在审核, 所有的单都派发给这三个人, 如果第四个人进入系统, 第四个人是没有单呢还是要从其他审核员的订单窃取呢? |
7
lhx2008 2019-07-12 17:10:01 +08:00 via Android
把以前没有审核的单搞到消息队列里面,新单也是存了数据库后发到消息队列,审核客户端这边一次拉 n 个 id,然后去数据库读这条信息,审核完点下一批在去消息队列拉。
至于用什么消息队列,最简单的就是 redis 的 list |
8
yaerda 2019-07-12 17:11:46 +08:00
跟 3 楼所说一样,创建一个队列,每人每次取 1 或 n 个,长时间未消费回退到队列中,再支持手动指定取出就可以了
|
9
annielong 2019-07-12 17:28:22 +08:00
无序数据队列轮取,有序的就取余
|
10
capljf OP @kyuuseiryuu 感谢,你的回答给了我一个思路。用两个队列,先把所有未审核订单 id 取出来放第一个队列(未审核),然后每次每个人来请求的时候取出部分 id 放 第二个队列(正在审核),并把这些 id 从第一个队列删除。如果审核完成就更新表里数据状态,如果没有审核完成或者取出后超时未审核就把这些 id 从第二个队列删除放回第一个队列。
|
11
capljf OP @TypeErrorNone 我的第一思路也是这样,但是加锁如何解锁呢,如果一个审核取了 1-10 条数据来审核,就对这些数据加上了排它锁,但是审核突然去做别的事儿了或者把浏览器关了,那么这些数据就一直锁着。个人对锁不是很了解,请问能详细解释一下怎么使用吗?
|
12
capljf OP @lihongjie0209 抱歉,是我没有考虑到这些情况。你提的也很对,我想需求应该是如果第四个人进入,如果系统还有未分发的单就给第四个人派单
|
13
capljf OP @wawzw123 好的好的,之前没有做过类似需求。刚刚搜索的时候都想不出什么好的关键词,派单这个太对了,应该是完美契合
|
15
NotNil1 2019-07-12 17:44:07 +08:00
乐观锁,查询之后加标记
|
16
capljf OP @ljtletters 你好,请问如何加标记呢。我只是查询数据,一次查询,一次更新,如果在保证两次请求用的一个事务呢
|
17
wenzhoou 2019-07-13 08:13:23 +08:00 via Android
用户 a 点审核开始,就把数据库改为 状态:审核中,担当者 a。这个任务就给 a 了。一直到 a 用户点审核结束,或者取消。你得要画一个状态迁移图。
|