Commit 31b15e01 authored by DESKTOP-VKRD9QF\Administration's avatar DESKTOP-VKRD9QF\Administration

Merge branch 'master' of http://39.100.78.207:1213/tongli/hyh.apsj

# Conflicts:
#	src/main/java/com/aps/service/impl/LanuchServiceImpl.java
parents 72cd676d cd6344ed
......@@ -400,11 +400,23 @@ public class ResourceGanttController {
return R.ok("复制成功");
}
@PostMapping("/orderInsert")
@Operation(summary = "订单插单", description = "在指定订单后插入新订单")
public R<String> insertOrder(@RequestBody Map<String, Object> params) {
log.info("insertOrder 请求参数: {}", params);
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
String afterOrderId = ParamValidator.getString(params, "afterOrderId", "插入位置订单ID");
// 获取新订单信息
@SuppressWarnings("unchecked")
Map<String, Object> newOrderData = (Map<String, Object>) params.get("newOrder");
ParamValidator.validateSceneExists(sceneService, sceneId);
Chromosome result = planResultService.InsertOrder(sceneId, afterOrderId, newOrderData);
return R.ok("插单成功");
}
@PostMapping("/ordermerge")
@Operation(summary = "订单合并", description = "订单合并")
......
......@@ -98,6 +98,8 @@ public class PlanResultService {
@Autowired
private OrderSortService orderSortService;
@Autowired
private LanuchService lanuchService;
@Autowired
private MaterialInfoMapper materialInfoMapper;
......@@ -231,6 +233,7 @@ public class PlanResultService {
kpiCalculator.calculatekpi();
// 添加锁定期工单到调度结果中
// 这里会从 Dispatch 表加载锁定期工单,并添加到 chromosome.result 中
// lockedOrderProcessorService.addLockedOrdersToResult(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId);
......@@ -1240,6 +1243,17 @@ public class PlanResultService {
entry.setPriority(order.getActualPriority());
});
}
// 更新调度结果中的数量(关键:处理锁定期工单)
List<GAScheduleResult> results = chromosome.getResult();
if (results != null) {
results.stream()
.filter(result -> result.getOrderId() != null && result.getOrderId().equals(order.getOrderId()))
.forEach(result -> {
result.setQuantity(order.getQuantity());
log.info("更新调度结果中的订单数量: OrderId={}, 新数量={}", order.getOrderId(), order.getQuantity());
});
}
}
/**
......@@ -1424,6 +1438,91 @@ public class PlanResultService {
_sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome;
}
/**
* 插单功能:在指定订单后插入新订单
* 步骤1:先将新订单数据插入数据库
* 步骤2:使用类似复制订单的方式将新订单加入排产
*
* @param SceneId 场景ID
* @param afterOrderId 插入位置订单ID(新订单将排在此订单后面)
* @param newOrderData 新订单数据
* @return 更新后的Chromosome
*/
public Chromosome InsertOrder(String SceneId, String afterOrderId, Map<String, Object> newOrderData) {
// 步骤1:调用LanuchService的insertOrder方法,将新订单插入数据库
String orderCode = (String) newOrderData.get("orderCode");
String materialId = (String) newOrderData.get("materialId");
Double quantity = ((Number) newOrderData.get("quantity")).doubleValue();
LocalDateTime startDate = null;
LocalDateTime endDate = null;
Integer priority = 1;
if (newOrderData.containsKey("startDate")) {
startDate = LocalDateTime.parse((String) newOrderData.get("startDate"));
}
if (newOrderData.containsKey("endDate")) {
endDate = LocalDateTime.parse((String) newOrderData.get("endDate"));
}
if (newOrderData.containsKey("priority")) {
priority = ((Number) newOrderData.get("priority")).intValue();
}
// 调用insertOrder插入数据库
R<String> insertResult = lanuchService.insertOrder(SceneId, orderCode, materialId,
startDate, endDate, priority, quantity);
// if (!insertResult.isSuccess()) {
// throw new RuntimeException("插单失败: " + insertResult.getMsg());
// }
//
// 从返回消息中提取新订单ID
String message = insertResult.getData();
String newOrderId = message.substring(message.indexOf("订单ID: ") + 6);
log.info("新订单已插入数据库,订单ID: {}", newOrderId);
// 步骤2:使用类似SpiltOrder的方式,将新订单加入排产
// 这里需要重新加载场景,因为数据库已经有新订单了
// 然后使用类似复制的逻辑,将新订单排在afterOrderId后面
GlobalParam globalParam = new GlobalParam();
Chromosome chromosome = _sceneService.loadChromosomeFromFile(SceneId);
// 从数据库加载新插入的订单及其工序
ProdLaunchOrder newLaunchOrder = _prodLaunchOrderService.lambdaQuery()
.eq(ProdLaunchOrder::getSceneId, SceneId)
.eq(ProdLaunchOrder::getOrderId, newOrderId)
.one();
if (newLaunchOrder == null) {
throw new RuntimeException("未找到新插入的订单: " + newOrderId);
}
// 加载新订单的工序
List<ProdProcessExec> newProcessExecs = _prodProcessExecService.lambdaQuery()
.eq(ProdProcessExec::getSceneId, SceneId)
.eq(ProdProcessExec::getOrderId, newOrderId)
.orderBy(true, true, ProdProcessExec::getTaskSeq)
.list();
if (newProcessExecs.isEmpty()) {
throw new RuntimeException("新订单没有工序: " + newOrderId);
}
log.info("加载新订单: OrderId={}, OrderCode={}, 工序数={}",
newOrderId, newLaunchOrder.getOrderCode(), newProcessExecs.size());
// 调用ScheduleOperationService的方法将新订单加入排产
ScheduleOperationService scheduleOperation = new ScheduleOperationService(materialRequirementService, this);
scheduleOperation.InsertOrder(chromosome, afterOrderId, newOrderId, newLaunchOrder, newProcessExecs, globalParam);
WriteScheduleSummary(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome;
}
public Chromosome MergeOrder(String SceneId,String sourceorderId,String targetorderId) {
......
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