diff --git a/src/main/java/sanmubird/scratch/y210914/Dispatch.java b/src/main/java/sanmubird/scratch/y210914/Dispatch.java index cfe69fcf853ee95c479ab37ab3eb769ca3c25499..b867f63ac9a0dc9919c983e8d223cce413a03255 100644 --- a/src/main/java/sanmubird/scratch/y210914/Dispatch.java +++ b/src/main/java/sanmubird/scratch/y210914/Dispatch.java @@ -12,19 +12,19 @@ import java.util.stream.Collectors; */ public class Dispatch { - private final Set taskSet; + private final Set taskSet; // 所有任务 - private final Set workerSet; + private final Set workerSet; // 所有的待分配任务的人,用于初始化给 - private final Set fullTaskWorkerSet; + private final Set fullTaskWorkerSet; // 已经分配满了的人的数据 - private final Set leakTaskWorkerSet; + private final Set leakTaskWorkerSet; // 实际待分配的池子: 存放没有分配满数据的人员,包含没分配到数据的人 和 分配了一些的数据的人 public Dispatch(Collection taskSet, Collection workerSet) { this.taskSet = Sets.newHashSet(taskSet); - this.workerSet = Sets.newHashSet(workerSet); - this.fullTaskWorkerSet = Sets.newHashSet(); + this.workerSet = Sets.newHashSet(workerSet); // 目前没有实际作用 + this.fullTaskWorkerSet = Sets.newHashSet(); // 初始化空的 this.leakTaskWorkerSet = Sets.newHashSet(workerSet); } @@ -33,12 +33,17 @@ public class Dispatch { if (this.leakTaskWorkerSet.isEmpty()) { return; } - Task.Tag tag = task.getMaxOrderTag(); - Map map = this.leakTaskWorkerSet.stream().collect(Collectors.toMap(p -> p.getMaxPriorityPreference().getType(), Function.identity(), (p1, p2) -> p1)); + Task.Tag tag = task.getMaxOrderTag(); // 获取任务数据标签权重最大的tag + // key: 附件类型, value : 对key类型附件感兴趣的人员 + Map map = this.leakTaskWorkerSet.stream().collect(Collectors.toMap(p -> p.getMaxPriorityPreference().getType(), + Function.identity(), (p1, p2) -> p1)); + + // 根据传进来的任务,来获取到最适合分配的人员 Person person = map.computeIfAbsent( tag.getType() , typeEnum -> this.leakTaskWorkerSet.iterator().next() ); + person.getTodoList().add(task); if (person.isFullTsk()) { this.fullTaskWorkerSet.add(person); @@ -51,7 +56,7 @@ public class Dispatch { Queue taskQueue = new LinkedList<>(this.taskSet); // 任务全分配了 或 人都分配满活了 while (taskQueue.size() > 0 && this.leakTaskWorkerSet.size() > 0) { - Task task = taskQueue.poll(); + Task task = taskQueue.poll(); // 取队列中第一数据 if (Objects.nonNull(task)) { assign(task); } diff --git a/src/main/java/sanmubird/scratch/y210914/Person.java b/src/main/java/sanmubird/scratch/y210914/Person.java index c9419f3d331f01b59ace4d19390a34f01260531b..0ade9c1785a96bb2c3703d39eddb4337a88de3fd 100644 --- a/src/main/java/sanmubird/scratch/y210914/Person.java +++ b/src/main/java/sanmubird/scratch/y210914/Person.java @@ -20,16 +20,16 @@ import java.util.List; @EqualsAndHashCode(of = "personId") public class Person { - private static final int TAK_ASSIGN_MAX = 2; + private static final int TAK_ASSIGN_MAX = 2; // 最大上线 private Long personId; /** * 有 优先级的 兴趣爱好; 越靠前的优先级越高 */ - private List preferenceList; + private List preferenceList; - private List todoList; + private List todoList; // 存放分配后的数据 @Getter diff --git a/src/main/java/sanmubird/scratch/y210914/Task.java b/src/main/java/sanmubird/scratch/y210914/Task.java index c0eee3bb2132d9668b470e8cb2b1392b35b2ebbd..8d91dce02dffc36cac4a1f66b230813cdefbb75b 100644 --- a/src/main/java/sanmubird/scratch/y210914/Task.java +++ b/src/main/java/sanmubird/scratch/y210914/Task.java @@ -22,7 +22,7 @@ public class Task { private Long taskId; - private List tagList; + private List tagList; // 任务标签标识:哪种附件类型的任务 @Getter