From 74fb7ead71134552367455f9080af31373fd1c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=92=E6=9D=BE?= <1247528263@qq.com> Date: Wed, 22 Sep 2021 14:59:34 +0000 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sanmubird/scratch/y210914/Dispatch.java | 23 +++++++++++-------- .../sanmubird/scratch/y210914/Person.java | 6 ++--- .../java/sanmubird/scratch/y210914/Task.java | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/sanmubird/scratch/y210914/Dispatch.java b/src/main/java/sanmubird/scratch/y210914/Dispatch.java index cfe69fc..b867f63 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 c9419f3..0ade9c1 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 c0eee3b..8d91dce 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 -- Gitee