#ifndef ODF_MANAGER_APP_HPP #define ODF_MANAGER_APP_HPP #include #include #include #include #include #include #include #include // ========================================================================= // ODF 光纤配线单元管理系统 —— 核心数据类型与接口 // ========================================================================= /// @brief 连接器端面类型(UPC / APC) enum class PolishType : uint8_t { UPC, ///< 超物理接触端面,回波损耗 ≥ 50dB APC ///< 斜角度物理接触端面,回波损耗 ≥ 60dB }; /// @brief 连接器等级(按标准光纤分类) enum class FiberGrade : uint8_t { OM1, ///< 多模 OM1 (62.5/125μm) OM2, ///< 多模 OM2 (50/125μm) OM3, ///< 多模 OM3 (50/125μm, 激光优化) OM4, ///< 多模 OM4 (50/125μm, 高带宽) OM5, ///< 多模 OM5 (50/125μm, 宽带) OS2 ///< 单模 OS2 (9/125μm) }; /// @brief 光接口类型(连接器形式) enum class ConnectorType : uint8_t { LC, ///< LC 连接器(1.25mm 插芯) SC, ///< SC 连接器(2.5mm 插芯) MPO ///< MPO 多芯连接器 }; /// @brief 适配器安装方向 enum class MountDirection : uint8_t { Front, ///< 前面板接入 Rear, ///< 后面板接入 Both ///< 前后均可接入 }; // ========================================================================= // 数据结构定义 // ========================================================================= /** * @brief 适配器接口规格表 * * 描述单个适配器端口的光学与机械规格。 */ struct AdapterSpec { ConnectorType interface_type; ///< 接口类型(LC/SC/MPO) FiberGrade connector_grade; ///< 连接器等级(OM1-OS2) PolishType polish_type; ///< 端面类型(UPC/APC) double max_insertion_loss_dB; ///< 最大插入损耗 (dB) double min_return_loss_dB; ///< 最小回波损耗 (dB) int port_count; ///< 该面板上安装的适配器数量 MountDirection mount_direction; ///< 安装方向 }; /** * @brief ODF 单元信息 * * 标识一个物理 ODF 子框/模块的全部关键信息。 */ struct ODFUnitInfo { std::string unit_id; ///< 单元全局唯一标识 std::string model_name; ///< 产品型号 std::string location; ///< 安装位置,格式 "机房-机柜-高度U数" std::string manufacturer; ///< 制造商 std::string production_date; ///< 生产日期 (YYYY-MM-DD) int max_capacity_cores; ///< 最大支持光纤芯数(≤ 288) std::vector adapters; ///< 已安装的适配器列表 }; /** * @brief 典型配置方案 * * 预置的标准场景配置模板。 */ struct TypicalConfig { std::string scene_name; ///< 场景名称,如 "数据中心LC单模预端接" std::string environment; ///< 应用环境:数据中心 / 园区网 / 接入网 std::string fiber_type; ///< 光纤类型:单模/多模 std::string connector_type; ///< 连接器类型描述 int preterminated_len_m; ///< 预端接长度 (米) int port_density_per_u; ///< 每 U 端口密度 double redundancy_ratio; ///< 冗余比例 (如 0.25 表示 25%) std::vector accessories; ///< 配套附件列表 }; /** * @brief 项目里程碑计划条目 */ struct Milestone { std::string phase_name; ///< 阶段名称 std::string start_date; ///< 开始日期 (YYYY-MM-DD) std::string end_date; ///< 结束日期 (YYYY-MM-DD) std::string owner; ///< 负责人 std::string deliverable; ///< 交付物描述 bool is_completed; ///< 完成状态 }; // ========================================================================= // ODF 管理器 —— 核心业务接口 // ========================================================================= /** * @brief ODF 光纤配线单元管理器 * * 提供 ODF 单元管理、编码生成、配置查询、兼容性校验等功能。 */ class ODFManager { public: ODFManager() = default; // ---- 单元管理 ---- /// @brief 注册一个新的 ODF 单元到管理器 void register_unit(const ODFUnitInfo& unit); /// @brief 按 unit_id 查询已注册的 ODF 单元 /// @return 指向 ODFUnitInfo 的指针,若不存在返回 nullptr const ODFUnitInfo* find_unit(const std::string& unit_id) const; /// @brief 返回所有已注册的 ODF 单元列表 const std::vector& all_units() const; // ---- 编码生成 ---- /** * @brief 根据站点-机柜-槽位生成唯一命名编码 * * 编码格式:`[site]-[cabinet]-[slot]`,全局唯一且长度 ≤ 64 字符。 * * @param site 站点代码(如 DC01) * @param cabinet 机柜号(如 RF02) * @param slot 槽位号(如 SL05) * @return 生成的唯一编码字符串 */ std::string generate_naming_code(const std::string& site, const std::string& cabinet, const std::string& slot) const; // ---- 典型配置 ---- /** * @brief 获取指定场景名称的典型配置方案 * @param scene_type 场景名称关键字 * @return TypicalConfig 结构,若未找到则返回空场景 */ TypicalConfig get_typical_config(const std::string& scene_type) const; /// @brief 注册一个典型配置方案 void register_typical_config(const TypicalConfig& cfg); // ---- 兼容性校验 ---- /** * @brief 检查两个连接器是否可物理对接 * * 检查规则: * - 接口类型必须相同(LC ↔ LC,SC ↔ SC,MPO ↔ MPO) * - 端面类型允许混合(UPC ↔ APC 可以对接,但回波损耗受限) * * @param a 连接器 A 的规格描述 * @param b 连接器 B 的规格描述 * @return true 表示可对接,false 表示不兼容 */ bool validate_adapter_compatibility(const AdapterSpec& a, const AdapterSpec& b) const; // ---- 报告与标签 ---- /** * @brief 导出里程碑排期甘特图数据(返回文本表格形式) * @return 格式化的排期字符串 */ std::string export_milestone_schedule() const; /// @brief 添加一个里程碑 void add_milestone(const Milestone& ms); /// @brief 返回所有里程碑 const std::vector& milestones() const; /** * @brief 生成可用于打印的标签内容(含文本与二维码示意) * @param unit_id ODF 单元 ID * @return 标签文本,包含单元信息及 [QR] 占位符 */ std::string print_label(const std::string& unit_id) const; private: std::vector units_; std::vector configs_; std::vector milestones_; /// @brief 内部辅助:将 ConnectorType 转为字符串 static std::string connector_type_str(ConnectorType t); /// @brief 内部辅助:将 PolishType 转为字符串 static std::string polish_type_str(PolishType p); }; #endif // ODF_MANAGER_APP_HPP