package com.dongni.collisionavoidance.rule.service; import com.dongni.collisionavoidance.rule.model.entity.SpatialRule; import com.dongni.collisionavoidance.rule.model.enums.RuleCategory; import com.dongni.collisionavoidance.rule.model.enums.RuleStatus; import com.dongni.collisionavoidance.rule.service.SpatialRuleService.RuleValidationResult; import java.time.LocalDateTime; import java.util.List; import java.util.Map; /** * 规则配置服务接口 * 提供基本的规则配置管理功能 * * @author AI Assistant * @version 1.0 * @since 2025-01-17 */ public interface RuleConfigurationService { // ==================== 基础配置功能 ==================== /** * 创建规则配置模板 * * @param category 规则类别 * @param name 规则名称 * @param description 规则描述 * @return 创建的规则模板 */ SpatialRule createRuleTemplate(RuleCategory category, String name, String description); /** * 克隆现有规则作为新配置 * * @param sourceRuleId 源规则ID * @param newRuleId 新规则ID * @param newName 新规则名称 * @return 克隆的规则 */ SpatialRule cloneRuleConfiguration(String sourceRuleId, String newRuleId, String newName); /** * 更新规则基本信息 * * @param ruleId 规则ID * @param name 新名称 * @param description 新描述 * @param priority 新优先级 * @return 更新是否成功 */ boolean updateRuleBasicInfo(String ruleId, String name, String description, Integer priority); /** * 配置规则时间窗口 * * @param ruleId 规则ID * @param effectiveStartTime 生效开始时间 * @param effectiveEndTime 生效结束时间 * @param timePattern 时间模式配置(JSON格式) * @return 配置是否成功 */ boolean configureRuleTimeWindow(String ruleId, LocalDateTime effectiveStartTime, LocalDateTime effectiveEndTime, String timePattern); /** * 配置规则空间范围 * * @param ruleId 规则ID * @param spatialObjectType 空间对象类型 * @param relatedObjectId 关联对象ID * @param customGeometryWkt 自定义几何形状(WKT格式) * @return 配置是否成功 */ boolean configureRuleSpatialScope(String ruleId, String spatialObjectType, String relatedObjectId, String customGeometryWkt); /** * 配置规则参数 * * @param ruleId 规则ID * @param parameters 规则参数映射 * @return 配置是否成功 */ boolean configureRuleParameters(String ruleId, Map parameters); // ==================== 配置验证功能 ==================== /** * 验证规则配置的完整性 * * @param ruleId 规则ID * @return 验证结果 */ RuleValidationResult validateRuleConfiguration(String ruleId); /** * 批量验证规则配置 * * @param ruleIds 规则ID列表 * @return 验证结果映射(规则ID -> 验证结果) */ Map batchValidateRuleConfigurations(List ruleIds); /** * 检查规则配置冲突 * * @param ruleId 规则ID * @return 冲突的规则列表 */ List checkConfigurationConflicts(String ruleId); /** * 验证规则参数的有效性 * * @param category 规则类别 * @param parameters 参数映射 * @return 验证结果 */ RuleValidationResult validateRuleParameters(RuleCategory category, Map parameters); // ==================== 配置模板管理 ==================== /** * 获取规则类别的默认配置模板 * * @param category 规则类别 * @return 默认配置模板 */ Map getDefaultConfigurationTemplate(RuleCategory category); /** * 保存配置模板 * * @param templateName 模板名称 * @param category 规则类别 * @param template 模板配置 * @return 保存是否成功 */ boolean saveConfigurationTemplate(String templateName, RuleCategory category, Map template); /** * 获取所有可用的配置模板 * * @param category 规则类别(可选,为null时返回所有类别) * @return 配置模板映射(模板名称 -> 模板配置) */ Map> getAvailableTemplates(RuleCategory category); /** * 应用配置模板到规则 * * @param ruleId 规则ID * @param templateName 模板名称 * @return 应用是否成功 */ boolean applyConfigurationTemplate(String ruleId, String templateName); // ==================== 配置导入导出 ==================== /** * 导出规则配置 * * @param ruleId 规则ID * @return 配置数据(JSON格式) */ String exportRuleConfiguration(String ruleId); /** * 批量导出规则配置 * * @param ruleIds 规则ID列表 * @return 配置数据(JSON格式) */ String exportRuleConfigurations(List ruleIds); /** * 导入规则配置 * * @param configurationJson 配置数据(JSON格式) * @return 导入的规则列表 */ List importRuleConfiguration(String configurationJson); /** * 从文件导入规则配置 * * @param filePath 配置文件路径 * @return 导入的规则数量 */ int importRuleConfigurationFromFile(String filePath); // ==================== 配置历史管理 ==================== /** * 获取规则配置历史 * * @param ruleId 规则ID * @param limit 返回数量限制 * @return 配置历史列表 */ List getRuleConfigurationHistory(String ruleId, int limit); /** * 保存规则配置快照 * * @param ruleId 规则ID * @param changeReason 变更原因 * @param changedBy 变更人 * @return 快照是否保存成功 */ boolean saveConfigurationSnapshot(String ruleId, String changeReason, String changedBy); /** * 恢复规则配置到指定版本 * * @param ruleId 规则ID * @param snapshotId 快照ID * @param restoredBy 恢复操作人 * @return 恢复是否成功 */ boolean restoreConfigurationFromSnapshot(String ruleId, String snapshotId, String restoredBy); // ==================== 配置统计分析 ==================== /** * 获取配置统计信息 * * @return 配置统计数据 */ ConfigurationStatistics getConfigurationStatistics(); /** * 获取最常用的配置参数 * * @param category 规则类别 * @param limit 返回数量限制 * @return 参数使用统计 */ Map getMostUsedConfigurationParameters(RuleCategory category, int limit); /** * 获取配置错误统计 * * @param startTime 统计开始时间 * @param endTime 统计结束时间 * @return 错误统计数据 */ Map getConfigurationErrorStatistics(LocalDateTime startTime, LocalDateTime endTime); // ==================== 内部类定义 ==================== /** * 规则配置历史记录 */ class RuleConfigurationHistory { private final String snapshotId; private final String ruleId; private final LocalDateTime timestamp; private final String changeReason; private final String changedBy; private final String configurationSnapshot; public RuleConfigurationHistory(String snapshotId, String ruleId, LocalDateTime timestamp, String changeReason, String changedBy, String configurationSnapshot) { this.snapshotId = snapshotId; this.ruleId = ruleId; this.timestamp = timestamp; this.changeReason = changeReason; this.changedBy = changedBy; this.configurationSnapshot = configurationSnapshot; } // Getters public String getSnapshotId() { return snapshotId; } public String getRuleId() { return ruleId; } public LocalDateTime getTimestamp() { return timestamp; } public String getChangeReason() { return changeReason; } public String getChangedBy() { return changedBy; } public String getConfigurationSnapshot() { return configurationSnapshot; } } /** * 配置统计信息 */ class ConfigurationStatistics { private final long totalConfigurations; private final long validConfigurations; private final long invalidConfigurations; private final Map configurationsByCategory; private final Map configurationsByStatus; private final double configurationValidityRate; public ConfigurationStatistics(long totalConfigurations, long validConfigurations, long invalidConfigurations, Map configurationsByCategory, Map configurationsByStatus, double configurationValidityRate) { this.totalConfigurations = totalConfigurations; this.validConfigurations = validConfigurations; this.invalidConfigurations = invalidConfigurations; this.configurationsByCategory = configurationsByCategory; this.configurationsByStatus = configurationsByStatus; this.configurationValidityRate = configurationValidityRate; } // Getters public long getTotalConfigurations() { return totalConfigurations; } public long getValidConfigurations() { return validConfigurations; } public long getInvalidConfigurations() { return invalidConfigurations; } public Map getConfigurationsByCategory() { return configurationsByCategory; } public Map getConfigurationsByStatus() { return configurationsByStatus; } public double getConfigurationValidityRate() { return configurationValidityRate; } } }