插单

parent 31b15e01
...@@ -219,7 +219,7 @@ public class PlanResultService { ...@@ -219,7 +219,7 @@ public class PlanResultService {
.collect(Collectors.toList()); .collect(Collectors.toList());
ApsTimeConfig timeConfig = apsTimeConfigService.getOne(new LambdaQueryWrapper<>()); ApsTimeConfig timeConfig = apsTimeConfigService.getOne(new LambdaQueryWrapper<>());
// 4.5 在排产前标记锁定期工单占用的设备时间段 // 4.5 在排产前标记锁定期工单占用的设备时间段
// lockedOrderProcessorService.markLockedOrdersOccupiedTime(machines, timeConfig.getBaseTime()); lockedOrderProcessorService.markLockedOrdersOccupiedTime(machines, timeConfig.getBaseTime());
// 5. 执行调度算法 // 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials1,materialIds,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler); GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials1,materialIds,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
...@@ -234,7 +234,7 @@ public class PlanResultService { ...@@ -234,7 +234,7 @@ public class PlanResultService {
// 添加锁定期工单到调度结果中 // 添加锁定期工单到调度结果中
// 这里会从 Dispatch 表加载锁定期工单,并添加到 chromosome.result 中 // 这里会从 Dispatch 表加载锁定期工单,并添加到 chromosome.result 中
// lockedOrderProcessorService.addLockedOrdersToResult(chromosome); lockedOrderProcessorService.addLockedOrdersToResult(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId); _sceneService.saveChromosomeToFile(chromosome, SceneId);
...@@ -1443,7 +1443,7 @@ public class PlanResultService { ...@@ -1443,7 +1443,7 @@ public class PlanResultService {
* 插单功能:在指定订单后插入新订单 * 插单功能:在指定订单后插入新订单
* 步骤1:先将新订单数据插入数据库 * 步骤1:先将新订单数据插入数据库
* 步骤2:使用类似复制订单的方式将新订单加入排产 * 步骤2:使用类似复制订单的方式将新订单加入排产
* *
* @param SceneId 场景ID * @param SceneId 场景ID
* @param afterOrderId 插入位置订单ID(新订单将排在此订单后面) * @param afterOrderId 插入位置订单ID(新订单将排在此订单后面)
* @param newOrderData 新订单数据 * @param newOrderData 新订单数据
...@@ -1454,11 +1454,11 @@ public class PlanResultService { ...@@ -1454,11 +1454,11 @@ public class PlanResultService {
String orderCode = (String) newOrderData.get("orderCode"); String orderCode = (String) newOrderData.get("orderCode");
String materialId = (String) newOrderData.get("materialId"); String materialId = (String) newOrderData.get("materialId");
Double quantity = ((Number) newOrderData.get("quantity")).doubleValue(); Double quantity = ((Number) newOrderData.get("quantity")).doubleValue();
LocalDateTime startDate = null; LocalDateTime startDate = null;
LocalDateTime endDate = null; LocalDateTime endDate = null;
Integer priority = 1; Integer priority = 1;
if (newOrderData.containsKey("startDate")) { if (newOrderData.containsKey("startDate")) {
startDate = LocalDateTime.parse((String) newOrderData.get("startDate")); startDate = LocalDateTime.parse((String) newOrderData.get("startDate"));
} }
...@@ -1468,11 +1468,11 @@ public class PlanResultService { ...@@ -1468,11 +1468,11 @@ public class PlanResultService {
if (newOrderData.containsKey("priority")) { if (newOrderData.containsKey("priority")) {
priority = ((Number) newOrderData.get("priority")).intValue(); priority = ((Number) newOrderData.get("priority")).intValue();
} }
// 调用insertOrder插入数据库 // 调用insertOrder插入数据库
R<String> insertResult = lanuchService.insertOrder(SceneId, orderCode, materialId, R<String> insertResult = lanuchService.insertOrder(SceneId, orderCode, materialId,
startDate, endDate, priority, quantity); startDate, endDate, priority, quantity);
// if (!insertResult.isSuccess()) { // if (!insertResult.isSuccess()) {
// throw new RuntimeException("插单失败: " + insertResult.getMsg()); // throw new RuntimeException("插单失败: " + insertResult.getMsg());
// } // }
...@@ -1480,44 +1480,45 @@ public class PlanResultService { ...@@ -1480,44 +1480,45 @@ public class PlanResultService {
// 从返回消息中提取新订单ID // 从返回消息中提取新订单ID
String message = insertResult.getData(); String message = insertResult.getData();
String newOrderId = message.substring(message.indexOf("订单ID: ") + 6); String newOrderId = message.substring(message.indexOf("订单ID: ") + 6);
log.info("新订单已插入数据库,订单ID: {}", newOrderId); log.info("新订单已插入数据库,订单ID: {}", newOrderId);
// 步骤2:使用类似SpiltOrder的方式,将新订单加入排产 // 步骤2:使用类似SpiltOrder的方式,将新订单加入排产
// 这里需要重新加载场景,因为数据库已经有新订单了 // 这里需要重新加载场景,因为数据库已经有新订单了
// 然后使用类似复制的逻辑,将新订单排在afterOrderId后面 // 然后使用类似复制的逻辑,将新订单排在afterOrderId后面
GlobalParam globalParam = new GlobalParam(); GlobalParam globalParam = new GlobalParam();
Chromosome chromosome = _sceneService.loadChromosomeFromFile(SceneId); Chromosome chromosome = _sceneService.loadChromosomeFromFile(SceneId);
// 从数据库加载新插入的订单及其工序 // 从数据库加载新插入的订单及其工序
ProdLaunchOrder newLaunchOrder = _prodLaunchOrderService.lambdaQuery() ProdLaunchOrder newLaunchOrder = _prodLaunchOrderService.lambdaQuery()
.eq(ProdLaunchOrder::getSceneId, SceneId) .eq(ProdLaunchOrder::getSceneId, SceneId)
.eq(ProdLaunchOrder::getOrderId, newOrderId) .eq(ProdLaunchOrder::getOrderId, newOrderId)
.one(); .one();
if (newLaunchOrder == null) { if (newLaunchOrder == null) {
throw new RuntimeException("未找到新插入的订单: " + newOrderId); throw new RuntimeException("未找到新插入的订单: " + newOrderId);
} }
// 加载新订单的工序 // 加载新订单的工序
List<ProdProcessExec> newProcessExecs = _prodProcessExecService.lambdaQuery() List<ProdProcessExec> newProcessExecs = _prodProcessExecService.lambdaQuery()
.eq(ProdProcessExec::getSceneId, SceneId) .eq(ProdProcessExec::getSceneId, SceneId)
.eq(ProdProcessExec::getOrderId, newOrderId) .eq(ProdProcessExec::getOrderId, newOrderId)
.orderBy(true, true, ProdProcessExec::getTaskSeq) .orderBy(true, true, ProdProcessExec::getTaskSeq)
.list(); .list();
if (newProcessExecs.isEmpty()) { if (newProcessExecs.isEmpty()) {
throw new RuntimeException("新订单没有工序: " + newOrderId); throw new RuntimeException("新订单没有工序: " + newOrderId);
} }
log.info("加载新订单: OrderId={}, OrderCode={}, 工序数={}", log.info("加载新订单: OrderId={}, OrderCode={}, 工序数={}",
newOrderId, newLaunchOrder.getOrderCode(), newProcessExecs.size()); newOrderId, newLaunchOrder.getOrderCode(), newProcessExecs.size());
// 调用ScheduleOperationService的方法将新订单加入排产 // 调用ScheduleOperationService的方法将新订单加入排产
// 设备配置将从插入位置的订单复制,不需要单独加载
ScheduleOperationService scheduleOperation = new ScheduleOperationService(materialRequirementService, this); ScheduleOperationService scheduleOperation = new ScheduleOperationService(materialRequirementService, this);
scheduleOperation.InsertOrder(chromosome, afterOrderId, newOrderId, newLaunchOrder, newProcessExecs, globalParam); scheduleOperation.InsertOrder(chromosome, afterOrderId, newOrderId, newLaunchOrder, newProcessExecs, globalParam);
WriteScheduleSummary(chromosome); WriteScheduleSummary(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId); _sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome; return chromosome;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment