refactor(wms): 重构批次分配逻辑

- 移除了死锁检测相关代码
- 修改了批次分配方案的生成逻辑
- 新增了 BatchGroupVo 类用于表示批次分组
- 优化了代码结构和命名,提高了可读性和可维护性
This commit is contained in:
2025-08-14 17:33:42 +08:00
parent 0b8a5cdc05
commit 96da503d0a
4 changed files with 156 additions and 156 deletions

View File

@@ -4,6 +4,7 @@ import java.util.List;
import java.util.Arrays;
import java.util.Map;
import com.klp.domain.vo.BatchGroupVo;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
@@ -99,27 +100,45 @@ public class WmsBatchController extends BaseController {
}
/**
* 检测任务执行是否会产生死锁
*
* @param rows 任务执行顺序数组
* @return 是否存在死锁
*/
@PostMapping("/check")
public R<Boolean> checkDeadlock(@RequestBody List<List<Map<String, Object>>> rows) {
boolean hasDeadlock = iWmsBatchService.checkDeadlock(rows);
return R.ok(hasDeadlock);
}
/**
* 生成不会产生死锁的批次分配方案
* 相同processId的任务会合并到一个批次组中
* 不同processId的任务会放在不同的批次组中
*
* @param rows 任务执行顺序数组
* @return 批次分配方案
*/
@PostMapping("/generate")
public R<List<String>> generateNonDeadlockBatches(@RequestBody List<List<Map<String, Object>>> rows) {
List<String> batches = iWmsBatchService.generateNonDeadlockBatches(rows);
return R.ok(batches);
public R<List<BatchGroupVo>> generateNonDeadlockBatches(@RequestBody List<List<Map<String, Object>>> rows) {
// 先获取原始的批次分配方案
List<BatchGroupVo> originalBatches = iWmsBatchService.generateNonDeadlockBatches(rows);
// 使用Java 8 Stream API按processId分组并合并任务
Map<String, List<BatchGroupVo>> groupedByProcessId = originalBatches.stream()
.collect(java.util.stream.Collectors.groupingBy(BatchGroupVo::getProcessId));
// 合并相同processId的批次组
List<BatchGroupVo> mergedBatches = new java.util.ArrayList<>();
java.util.concurrent.atomic.AtomicInteger groupCounter = new java.util.concurrent.atomic.AtomicInteger(1);
groupedByProcessId.forEach((processId, groups) -> {
// 创建一个新的合并后的批次组
BatchGroupVo mergedGroup = new BatchGroupVo();
mergedGroup.setGroupId("Merged-Group-" + groupCounter.getAndIncrement());
mergedGroup.setProcessId(processId);
// 合并所有taskIds
List<String> allTaskIds = groups.stream()
.flatMap(group -> group.getTaskIds().stream())
.collect(java.util.stream.Collectors.toList());
mergedGroup.setTaskIds(allTaskIds);
mergedBatches.add(mergedGroup);
});
return R.ok(mergedBatches);
}
}