refactor(wms): 重构批次分配逻辑
- 移除了死锁检测相关代码 - 修改了批次分配方案的生成逻辑 - 新增了 BatchGroupVo 类用于表示批次分组 - 优化了代码结构和命名,提高了可读性和可维护性
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user