Browse Source

feat:业务支持删除重复任务 temp2

shc 6 months ago
parent
commit
98da946176

+ 86 - 40
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/InitController.java

@@ -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());
 
     }