Rewrite trader service for V4 P0

This commit is contained in:
Codex
2026-06-26 21:53:22 +08:00
parent 2fe4077164
commit 5d210053d0
184 changed files with 2780 additions and 6945 deletions
@@ -1,50 +1,31 @@
package com.quantai.trader.evidence;
import com.quantai.trader.domain.StageDecision;
import com.quantai.trader.domain.TraderDecisionCycle;
import com.quantai.trader.domain.TraderEvidence;
import com.quantai.trader.persistence.TraderEvidenceRepository;
import com.quantai.trader.util.Ids;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
@Component
public class EvidenceAppender {
private static final Logger log = LoggerFactory.getLogger(EvidenceAppender.class);
private final TraderEvidenceRepository repository;
private final CopyOnWriteArrayList<TraderEvidence> evidence = new CopyOnWriteArrayList<>();
public EvidenceAppender(TraderEvidenceRepository repository) {
this.repository = repository;
public TraderEvidence append(String runId, String cycleId, String stage, boolean pass, String reason, String blocker, Map<String, Object> details) {
TraderEvidence item = new TraderEvidence("evidence_" + cycleId + "_" + evidence.size(), runId, cycleId,
stage, pass, reason, blocker, Instant.now(), details);
evidence.add(item);
log.info("event=trader.evidence.appended runId={} cycleId={} stage={} pass={} reason={} blocker={}",
runId, cycleId, stage, pass, reason, blocker);
return item;
}
public TraderEvidence append(TraderDecisionCycle cycle, String stage, StageDecision decision) {
TraderEvidence evidence = new TraderEvidence(
cycle.runId(),
cycle.cycleId(),
Ids.evidenceId(cycle, stage),
stage,
decision.pass(),
decision.reason(),
decision.blocker(),
cycle.cycleTime(),
decision.details()
);
repository.insert(evidence);
log.info(
"event=trader.evidence runId={} cycleId={} symbol={} playbookId={} playbookVersion={} state={} stage={} pass={} reason={} blocker={}",
cycle.runId(),
cycle.cycleId(),
cycle.symbol(),
cycle.playbookId(),
cycle.playbookVersion(),
cycle.state(),
stage,
decision.pass(),
decision.reason(),
decision.blocker()
);
return evidence;
public List<TraderEvidence> all() {
return new ArrayList<>(evidence);
}
}