plan_execute_t1/include/app.hpp

396 lines
17 KiB
C++
Raw Permalink Normal View History

2026-05-06 14:04:42 +00:00
#ifndef CMS_APP_HPP
#define CMS_APP_HPP
#include <cstdint>
#include <string>
#include <vector>
#include <chrono>
#include <unordered_map>
#include <functional>
// ══════════════════════════════════════════════════════════════════════════════
// Core Data Structures
// ══════════════════════════════════════════════════════════════════════════════
/**
* @brief
*
*
*/
enum class RunMode : uint8_t {
Idle = 0, ///< 空闲模式
HumanLoop = 1, ///< 人在环模式(人工干预)
AutoExec = 2, ///< 自主执行模式
Degraded = 3 ///< 降级维护模式
};
/**
* @brief
*/
enum class PlanType : uint8_t {
Centralized = 0, ///< 集中式方案
Distributed = 1 ///< 分布式方案
};
/**
* @brief
*/
enum class PlanStatus : uint8_t {
Drafting = 0, ///< 草稿中
Confirmed = 1, ///< 已确认
Dispatching = 2, ///< 分发中
Executing = 3, ///< 执行中
Completed = 4, ///< 已完成
Aborted = 5 ///< 已中止
};
/**
* @brief
*/
enum class EventStatus : uint8_t {
Pending = 0, ///< 待处理
Rejected = 1, ///< 已拒绝
Generated = 2 ///< 已生成任务
};
/**
* @brief
*/
enum class NotificationType : uint8_t {
Alert = 0, ///< 告警
Hint = 1, ///< 提示
Confirm = 2 ///< 确认
};
/**
* @brief TaskPlan
*
* ID/
*
*/
struct TaskPlan {
std::string id; ///< 任务唯一标识
std::string name; ///< 任务名称
PlanType type; ///< 方案类型
PlanStatus status; ///< 当前状态
std::chrono::system_clock::time_point createTime; ///< 创建时间戳
std::string relatedEventId; ///< 关联事件 ID
std::vector<std::string> topologyNodes; ///< 拓扑节点列表
double resourceQuota; ///< 资源配额(归一化 0.0 ~ 1.0
std::string constraints; ///< 执行约束描述
};
/**
* @brief EventRecord
*
* ID
*
*/
struct EventRecord {
std::string id; ///< 事件唯一标识
std::string typeTag; ///< 类型标识
double latitude; ///< 纬度
double longitude; ///< 经度
double altitude; ///< 高度(米)
std::string payload; ///< 载荷数据
uint32_t priority; ///< 优先级0-255越大越紧急
uint32_t threatLevel; ///< 威胁等级1-5
std::chrono::system_clock::time_point receiveTime; ///< 接收时间
EventStatus status; ///< 处理状态
};
/**
* @brief TemplateInstance
*
* ID
*/
struct TemplateInstance {
std::string id; ///< 模板唯一标识
std::string scenario; ///< 适用场景描述
double complexity; ///< 复杂度0.0 ~ 1.0
std::string version; ///< 版本号
std::vector<std::string> subTaskTree; ///< 子任务需求树
std::vector<std::string> dependencies; ///< 前置依赖关系
double confidence; ///< 生成置信度0.0 ~ 1.0
};
/**
* @brief ExecutionStatus
*
* ID
*/
struct ExecutionStatus {
std::string nodeId; ///< 节点唯一标识
double progress; ///< 任务进度0.0 ~ 1.0
double healthIndex; ///< 健康指标0.0 ~ 1.0
double resourceUsage; ///< 资源消耗0.0 ~ 1.0
uint64_t heartbeatSignal; ///< 心跳信号计数
uint32_t errorCode; ///< 异常码0 表示正常)
std::chrono::system_clock::time_point lastReport; ///< 最后上报时间
};
/**
* @brief UserSession
*
* ID访 IP
*/
struct UserSession {
std::string userId; ///< 用户唯一标识
std::string roleCode; ///< 角色编码
uint64_t permissionBitmap; ///< 权限位图
std::string accessToken; ///< 访问令牌(内存中隔离保护)
std::chrono::system_clock::time_point expireTime; ///< 会话有效期
std::string clientIp; ///< 登录终端 IP
};
/**
* @brief NotificationMessage
*
* ID//
*/
struct NotificationMessage {
std::string id; ///< 消息唯一标识
uint32_t priority; ///< 优先级
NotificationType type; ///< 消息类型
std::string summary; ///< 内容摘要
std::chrono::system_clock::time_point triggerTime; ///< 触发时间
bool isRead; ///< 是否已读
};
/**
* @brief SystemStateContext
*
* ///
*/
struct SystemStateContext {
RunMode currentMode; ///< 当前运行模式
std::string contextSnapshot; ///< 上下文快照JSON 序列化)
uint64_t consistencyMark; ///< 状态一致性标记
std::chrono::system_clock::time_point switchTime; ///< 切换时间戳
};
// ══════════════════════════════════════════════════════════════════════════════
// CmsEngine — 核心引擎类
// ══════════════════════════════════════════════════════════════════════════════
/**
* @brief CMS
*
*
*
*/
class CmsEngine {
public:
/// @brief 默认构造函数
CmsEngine();
/// @brief 虚析构函数
virtual ~CmsEngine() = default;
// ── 删除拷贝语义 ────────────────────────────────────────────────────────
CmsEngine(const CmsEngine&) = delete;
CmsEngine& operator=(const CmsEngine&) = delete;
// ══════════════════════════════════════════════════════════════════════════
// 事件处理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
* 线
*
* @param event
* @return true
* @return false
*/
bool ingestEvent(const EventRecord& event);
/**
* @brief
*
* Pending
*
* @return size_t
*/
size_t processPendingEvents();
/**
* @brief ID
*
* @param eventId
* @return const EventRecord* nullptr
*/
const EventRecord* findEventById(const std::string& eventId) const;
// ══════════════════════════════════════════════════════════════════════════
// 任务方案管理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
*
*
* @param plan id
* @return true
* @return false
*/
bool createTaskPlan(TaskPlan& plan);
/**
* @brief
*
* @return const std::vector<TaskPlan>&
*/
const std::vector<TaskPlan>& getAllPlans() const;
/**
* @brief ID
*
* @param planId
* @return const TaskPlan* nullptr
*/
const TaskPlan* findPlanById(const std::string& planId) const;
/**
* @brief
*
* @param planId
* @param newStatus
* @return true
* @return false
*/
bool updatePlanStatus(const std::string& planId, PlanStatus newStatus);
// ══════════════════════════════════════════════════════════════════════════
// 模板管理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
* @param tmpl
*/
void registerTemplate(const TemplateInstance& tmpl);
/**
* @brief
*
*
*
* @param scenario
* @return const TemplateInstance* nullptr
*/
const TemplateInstance* matchTemplate(const std::string& scenario) const;
// ══════════════════════════════════════════════════════════════════════════
// 执行监控
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
*
*
* @param status
*/
void reportExecutionStatus(const ExecutionStatus& status);
/**
* @brief
*
* < 0.5 != 0 > 30
*
* @return std::vector<ExecutionStatus>
*/
std::vector<ExecutionStatus> checkHealth() const;
// ══════════════════════════════════════════════════════════════════════════
// 用户会话管理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
* @param session
* @return true
* @return false
*/
bool createSession(const UserSession& session);
/**
* @brief
*
* @param userId ID
* @param permissionMask
* @return true
* @return false
*/
bool checkPermission(const std::string& userId, uint64_t permissionMask) const;
// ══════════════════════════════════════════════════════════════════════════
// 通知管理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
* @param msg
*/
void pushNotification(const NotificationMessage& msg);
/**
* @brief
*
* @return std::vector<NotificationMessage>
*/
std::vector<NotificationMessage> getUnreadNotifications() const;
// ══════════════════════════════════════════════════════════════════════════
// 系统状态管理
// ══════════════════════════════════════════════════════════════════════════
/**
* @brief
*
* @param newMode
* @return true
* @return false
*/
bool switchMode(RunMode newMode);
/**
* @brief
*
* @return const SystemStateContext&
*/
const SystemStateContext& getSystemContext() const;
/**
* @brief
*
* @return std::string
*/
std::string getSummary() const;
private:
std::vector<TaskPlan> plans_; ///< 任务方案库
std::vector<EventRecord> events_; ///< 事件库
std::vector<TemplateInstance> templates_; ///< 模板库
std::unordered_map<std::string, ExecutionStatus> nodeStatus_; ///< 节点执行状态表
std::unordered_map<std::string, UserSession> sessions_; ///< 用户会话表
std::vector<NotificationMessage> notifications_; ///< 通知消息队列
SystemStateContext systemContext_; ///< 系统状态上下文
uint64_t nextId_; ///< 自增 ID 计数器
/**
* @brief
*
* @return std::string "ID-xxxxx"
*/
std::string generateNextId();
};
#endif // CMS_APP_HPP