|
@@ -7,6 +7,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.pig4cloud.plugin.excel.annotation.RequestExcel;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.enums.DelEnum;
|
|
@@ -56,9 +57,12 @@ import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.Collections;
|
|
|
import java.util.Comparator;
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.Iterator;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -531,62 +535,104 @@ public class InitController {
|
|
|
@Inner(value = false)
|
|
|
@PostMapping(value = "/cnbg/del/dup/task")
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public R<Map<String, List<WmTaskContent>>> delDupTaskContent(@RequestExcel(ignoreEmptyRow = true) List<WmTaskDupModel> dup) {
|
|
|
-
|
|
|
- List<String> tIds = new LinkedList<>();
|
|
|
- List<String> tcIds = new LinkedList<>();
|
|
|
+ public R<Map<String, Collection<String>>> delDupTaskContent(@RequestExcel(ignoreEmptyRow = true) List<WmTaskDupModel> dup) {
|
|
|
|
|
|
|
|
|
if (CollUtil.isEmpty(dup)) {
|
|
|
return R.ok(Collections.EMPTY_MAP, "重复数据集为空");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ List<WmTask> targetTasks = new LinkedList<>();
|
|
|
+
|
|
|
// 排序去重 && 获取重复的任务记录
|
|
|
List<String> taskNumbers = dup.stream().map(WmTaskDupModel::getTaskNumber).distinct().sorted().collect(Collectors.toList());
|
|
|
- List<WmTask> targetTasks = taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getTaskNumber, taskNumbers));
|
|
|
+
|
|
|
+ List<List<String>> partition = Lists.partition(taskNumbers, 100);
|
|
|
+
|
|
|
+ for (List<String> numberList : partition) {
|
|
|
+
|
|
|
+ List<WmTask> temp = taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getTaskNumber, numberList));
|
|
|
+ targetTasks.addAll(temp);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, WmTask> tcIds2TaskMap = targetTasks.stream().collect(Collectors.toMap(WmTask::getTaskContentId, Function.identity()));
|
|
|
+ Map<String, WmTask> tIds2TaskMap = targetTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
|
|
|
|
|
|
// 获取重复任务的任务内容
|
|
|
- List<String> taskContentIds = targetTasks.stream().map(WmTask::getTaskContentId).sorted().distinct().collect(Collectors.toList());
|
|
|
- List<WmTaskContent> taskContents = taskContentService.listByIds(taskContentIds);
|
|
|
- Map<Integer, WmTaskContent> tcId2EntityMap = taskContents.stream().collect(Collectors.toMap(WmTaskContent::getId, Function.identity()));
|
|
|
+ List<WmTaskContent> taskContents = new LinkedList<>();
|
|
|
+
|
|
|
+ List<List<String>> partition1 = Lists.partition(new ArrayList<>(tcIds2TaskMap.keySet()), 100);
|
|
|
+
|
|
|
+ for (List<String> numberList : partition1) {
|
|
|
+ List<WmTaskContent> byId = taskContentService.listByIds(numberList);
|
|
|
+ taskContents.addAll(byId);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
Map<String, List<WmTaskContent>> collect = taskContents.stream().collect(Collectors.groupingBy(this::getContentStr));
|
|
|
|
|
|
+ // 要保留的数据
|
|
|
+ Set<String> tIds = new HashSet<>();
|
|
|
+ Set<String> tcIds = new HashSet<>();
|
|
|
+ for (Map.Entry<String, List<WmTaskContent>> entry : collect.entrySet()) {
|
|
|
+ List<WmTaskContent> value = entry.getValue();
|
|
|
+
|
|
|
+ if (value.size() < 2) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<WmTask> tempTasks = new LinkedList<>();
|
|
|
+ for (WmTaskContent taskContent : value) {
|
|
|
+
|
|
|
+ String tcId = taskContent.getId().toString();
|
|
|
+ WmTask task = tcIds2TaskMap.get(tcId);
|
|
|
+
|
|
|
+ tempTasks.add(task);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Boolean, List<WmTask>> statusMap = tempTasks.stream().collect(Collectors.partitioningBy(t -> UpmsState.TaskState.REJECTED.getState().equals(t.getTaskStatus())));
|
|
|
+ List<WmTask> rejected = statusMap.get(true);
|
|
|
+ List<WmTask> others = statusMap.get(false);
|
|
|
+ // 如果全是拒绝的
|
|
|
+ if (CollUtil.isEmpty(others)) {
|
|
|
+ tIds.add(rejected.get(0).getId());
|
|
|
+ tcIds.add(rejected.get(0).getTaskContentId());
|
|
|
+ }
|
|
|
+ // 部分拒绝的
|
|
|
+ else {
|
|
|
+ Map<Boolean, List<WmTask>> passedAndPending = others.stream().collect(Collectors.partitioningBy(t -> UpmsState.TaskState.PASSED.getState().equals(t.getTaskStatus())));
|
|
|
+ List<WmTask> passed = passedAndPending.get(true);
|
|
|
+ List<WmTask> pending = passedAndPending.get(false);
|
|
|
+ if (CollUtil.isNotEmpty(passed)) {
|
|
|
+ tIds.add(passed.get(0).getId());
|
|
|
+ tcIds.add(passed.get(0).getTaskContentId());
|
|
|
+ } else {
|
|
|
+ if (CollUtil.isNotEmpty(pending)) {
|
|
|
+ tIds.add(pending.get(0).getId());
|
|
|
+ tcIds.add(pending.get(0).getTaskContentId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Collection<String> disForTask = CollUtil.disjunction(tIds, tIds2TaskMap.keySet());
|
|
|
+ Collection<String> disForTaskContent = CollUtil.disjunction(tcIds, tcIds2TaskMap.keySet());
|
|
|
+
|
|
|
+ Map<String, Collection<String>> rest = new LinkedHashMap<>(4);
|
|
|
+
|
|
|
+ rest.put("disForTask", disForTask);
|
|
|
+ rest.put("availForTask", tIds);
|
|
|
+ rest.put("availForTaskContent", tcIds);
|
|
|
+ rest.put("disForTaskContent", disForTaskContent);
|
|
|
|
|
|
- // Iterator<WmTask> iterator = targetTasks.iterator();
|
|
|
- //
|
|
|
- // while (iterator.hasNext()) {
|
|
|
- //
|
|
|
- // WmTask task = iterator.next();
|
|
|
- //
|
|
|
- // // 当前任务的信息
|
|
|
- // String taskId = task.getId();
|
|
|
- // String taskContentId = task.getTaskContentId();
|
|
|
- // WmTaskContent taskContent = tcId2EntityMap.get(taskContentId);
|
|
|
- // String cur = getContentStr(taskContent);
|
|
|
- //
|
|
|
- //
|
|
|
- // for (WmTask task1 : targetTasks) {
|
|
|
- // if (StrUtil.equals(taskId, task1.getId())) {
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- //
|
|
|
- // WmTaskContent taskContent1 = tcId2EntityMap.get(task1.getTaskContentId());
|
|
|
- // String compared = getContentStr(taskContent1);
|
|
|
- //
|
|
|
- // if (StrUtil.equals(cur, compared)){
|
|
|
- // tIds.add(task1.getId());
|
|
|
- // tcIds.add(task1.getTaskContentId());
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- // iterator.remove();
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
- return R.ok(collect, Boolean.TRUE.toString());
|
|
|
+ return R.ok(rest, Boolean.TRUE.toString());
|
|
|
|
|
|
}
|
|
|
|