|
|
@@ -526,6 +526,55 @@ public class UnifiedKnowledgeBaseService {
|
|
|
return sectionMap.get(MODULE_LOW_SIDE_PATCH);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 低侧判读补丁块查询(契约 guhe.kb.queryLowSidePatch / L2-2/T1)。
|
|
|
+ *
|
|
|
+ * <p>与 {@link #getLowSideJudgmentPatch()} 同源:Spring 运行时优先返回已加载模块
|
|
|
+ * (DB 查询源 + classpath 种子兜底后的 {@code sectionMap});当模块未加载时
|
|
|
+ * (如契约测试裸实例化、无 Spring 容器、{@code objectMapper} 未注入),
|
|
|
+ * 从 classpath 种子 {@code 统一知识库.json} 自举读取,保证「独立可查询子键」契约成立。
|
|
|
+ *
|
|
|
+ * @return 补丁块完整内容(含 判读铁律/四机制/报告口径 等全部子节);种子缺失/解析失败时返回 null
|
|
|
+ */
|
|
|
+ public Map<String, Object> queryLowSidePatch() {
|
|
|
+ Map<String, Object> block = sectionMap.get(MODULE_LOW_SIDE_PATCH);
|
|
|
+ if (block != null) {
|
|
|
+ return block;
|
|
|
+ }
|
|
|
+ return loadLowSidePatchFromSeed();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从 classpath 种子自举读取低侧判读补丁块(契约裸实例化回退路径)。
|
|
|
+ * 优先取 {@code 谷禾2026新版扩展知识.条件致病菌低侧判读补充(人工)} 子键;
|
|
|
+ * 兼容顶层独立模块键 {@code 条件致病菌低侧判读补充(人工)}。
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private Map<String, Object> loadLowSidePatchFromSeed() {
|
|
|
+ ObjectMapper mapper = objectMapper != null ? objectMapper : new ObjectMapper();
|
|
|
+ try (InputStream is = getClass().getResourceAsStream(SEED_CLASSPATH)) {
|
|
|
+ if (is == null) {
|
|
|
+ log.warn("种子文件不存在,无法读取低侧判读补丁块: {}", SEED_CLASSPATH);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Map<String, Object> root = mapper.readValue(is, new TypeReference<Map<String, Object>>() {});
|
|
|
+ Object ext = root.get(MODULE_GUHE2026_EXT);
|
|
|
+ if (ext instanceof Map) {
|
|
|
+ Object patch = ((Map<String, Object>) ext).get(MODULE_LOW_SIDE_PATCH);
|
|
|
+ if (patch instanceof Map) {
|
|
|
+ return (Map<String, Object>) patch;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Object top = root.get(MODULE_LOW_SIDE_PATCH);
|
|
|
+ if (top instanceof Map) {
|
|
|
+ return (Map<String, Object>) top;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("读取低侧判读补丁块失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取全部模块摘要(键 + 条目数)
|
|
|
*/
|