diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java index 8bbb678a..1bf025f7 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java @@ -229,13 +229,20 @@ public class ActionCore implements StateSerializable { } /** - * 在未进入执行阶段的行动单元组新增新的行动 + * 在指定阶段之后追加新的行动单元组 */ private void handleAppend(ExecutableAction executableAction, int order, List actions) { - if (order <= executableAction.getExecutingStage()) - return; + Map> actionChain = executableAction.getActionChain(); + int targetOrder = nextAvailableOrder(actionChain, order + 1); + actionChain.put(targetOrder, actions); + } - executableAction.getActionChain().put(order, actions); + private int nextAvailableOrder(Map> actionChain, int startOrder) { + int order = startOrder; + while (actionChain.containsKey(order)) { + order++; + } + return order; } /** diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionCorrector.java b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionCorrector.java index b8892c8f..11c1bd7d 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionCorrector.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionCorrector.java @@ -31,7 +31,7 @@ public class ActionCorrector extends AbstractAgentModule.Sub { appendTextElement(document, metaActionElement, "action_key", metaActionData.getActionKey()); appendTextElement(document, metaActionElement, "description", metaActionData.getDescription()); + if (metaActionData.getStageDescription() != null && !metaActionData.getStageDescription().isBlank()) { + appendTextElement(document, metaActionElement, "stage_description", metaActionData.getStageDescription()); + } appendTextElement(document, metaActionElement, "status", metaActionData.getStatus()); appendTextElement(document, metaActionElement, "result", metaActionData.getResult()); return Unit.INSTANCE; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionExecutor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionExecutor.java index e9518fb8..63e738d0 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionExecutor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/ActionExecutor.java @@ -155,7 +155,6 @@ public class ActionExecutor extends AbstractAgentModule.Standalone { actionCapability.putAction(executableAction); val actionChain = executableAction.getActionChain(); - val phaser = new Phaser(); if (!prepareExecutableAction(executableAction, actionChain)) { return; } @@ -172,7 +171,7 @@ public class ActionExecutor extends AbstractAgentModule.Standalone { if (stageSelection.shouldStop()) { break; } - val stageExecution = runCurrentStage(executableAction, phaser, stageCursor, stageSelection.metaActions()); + val stageExecution = runCurrentStage(executableAction, stageCursor, stageSelection.metaActions()); if (stageExecution.closed()) { return; } @@ -225,10 +224,10 @@ public class ActionExecutor extends AbstractAgentModule.Standalone { private StageExecution runCurrentStage( ExecutableAction executableAction, - Phaser phaser, StageCursor stageCursor, List metaActions ) { + Phaser phaser = new Phaser(); val recognizerRecord = startRecognizerIfNeeded(executableAction, phaser); val listeningRecord = executeAndListening(metaActions, phaser, executableAction); phaser.awaitAdvance(listeningRecord.phase()); @@ -775,6 +774,7 @@ public class ActionExecutor extends AbstractAgentModule.Standalone { .map(metaAction -> new CorrectorInput.ActionChainItem( metaAction.getKey(), resolveHistoryDescription(metaAction.getKey()), + executableAction.getStageDescriptions().get(stage), metaAction.getResult().getStatus().name().toLowerCase(Locale.ROOT), metaAction.getResult().getData() )) diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/entity/CorrectorInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/entity/CorrectorInput.java index 23b67c41..8eee3c00 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/entity/CorrectorInput.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/action/executor/entity/CorrectorInput.java @@ -29,6 +29,7 @@ public class CorrectorInput { public static class ActionChainItem { private String actionKey; private String description; + private String stageDescription; private String status; private String result; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java b/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java index 9687e166..9933181c 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java @@ -279,7 +279,7 @@ public class ActionPlanner extends AbstractAgentModule.Running new SchedulableExecutableAction( evaluatorResult.getTendency(), actionChain, @@ -297,6 +297,27 @@ public class ActionPlanner extends AbstractAgentModule.Running getStageDescriptions(EvaluatorResult evaluatorResult) { + Map descriptions = new HashMap<>(); + List primaryActionChain = evaluatorResult.getPrimaryActionChain(); + if (primaryActionChain == null || primaryActionChain.isEmpty()) { + return descriptions; + } + List orderedChain = new ArrayList<>(primaryActionChain); + orderedChain.sort(Comparator.comparing(EvaluatorResult.ChainElement::getOrder, Comparator.nullsLast(Integer::compareTo))); + int fixedOrder = 1; + for (EvaluatorResult.ChainElement chainElement : orderedChain) { + String description = chainElement.getDescription(); + if (description != null && !description.isBlank()) { + descriptions.put(fixedOrder, description); + } + fixedOrder++; + } + return descriptions; } private Map> getActionChain(EvaluatorResult evaluatorResult) {