.ai/workflow-records/feature-dave-591153.yml | 32 + api/admin-rpc-api/pom.xml | 2 +- api/admin-server/pom.xml | 4 - .../admin/common/AdminRocketMqGroupConstants.java | 32 - .../admin/config/AliyunRocketMQConsumerConfig.java | 65 - .../controller/KnowledgeMaterialController.java | 39 + .../english/EnglishSegmentController.java | 26 +- .../jojo/cc/admin/model/req/UploadSuccessReq.java | 2 +- .../model/req/english/EnglishPhraseSaveReq.java | 14 +- .../model/req/english/EnglishWordSaveReq.java | 8 +- .../KnowledgeMaterialContentBatchUpdateReq.java | 37 + .../KnowledgeMaterialContentExistsReq.java | 30 + .../cc/admin/model/vo/english/EnglishPhraseVo.java | 2 +- .../cc/admin/model/vo/english/EnglishWordVo.java | 11 +- .../model/vo/restful/course/ComboCourseVo.java | 7 +- .../java/cn/jojo/cc/admin/task/MqRetryTask.java | 28 - .../LessonJsonRefreshConsumerHandlerTest.java | 244 ---- .../KnowledgeMaterialControllerTest.java | 94 ++ .../consumer/AudioAdjustSpeedConsumerListener.java | 2 +- .../cc/worker}/consumer/CommonDelayListener.java | 4 +- .../cc/worker}/consumer/CommonNormalListener.java | 4 +- .../consumer/config/AdminMqConsumerConfig.java | 114 ++ .../constant/AdminRocketMqGroupConstants.java | 30 + .../ArtGalleryJsonRefreshConsumerHandler.java | 4 +- .../consumer/handler/AudioLrcCompleteListener.java | 6 +- ...chQuestionCollectionPublishConsumerHandler.java | 4 +- .../handler/DataSyncToEsConsumerHandler.java | 4 +- .../DelayClearGameResourceCacheListener.java | 4 +- .../handler/DelayClearLessonCacheListener.java | 4 +- .../GenerateComponentDataConsumerHandler.java | 4 +- .../handler/LessonContentAlertDelayListener.java | 4 +- .../handler/LessonJsonRefreshConsumerHandler.java | 4 +- .../QuestionJsonRefreshConsumerHandler.java | 4 +- .../ReadToolJsonRefreshConsumerHandler.java | 4 +- .../handler/ResourceMetadataConsumerHandler.java | 4 +- .../ResourcePackTaskCreationEventListener.java | 4 +- .../ResourceZstTaskCreationEventListener.java | 4 +- .../handler/SyncFlowTemplateIdConsumerHandler.java | 4 +- .../consumer/handler/TagImportConsumerHandler.java | 4 +- .../handler/TagTreePublishConsumerHandler.java | 4 +- .../consumer/handler/UploadSuccessHandler.java | 6 +- .../consumer/handler/VodCompleteListener.java | 6 +- .../cc/worker/consumer/model/UploadSuccessReq.java | 22 + .../SegmentPublishRecalcConsumerListener.java | 73 + .../SegmentSyncComputeConsumerListener.java | 102 ++ .../task/EnglishAudioBackfillJobHandler.java | 70 + .../task/FlushAudioCompressQuestionJson.java | 2 +- .../task/FlushImageCompressQuestionJson.java | 2 +- .../cc/worker/task/FlushLessonTitleSwapTask.java | 442 ++++++ .../task/FlushQuestionVideoMidJobHandler.java | 4 +- .../cc/worker/task/PracticeQuestionFlushTask.java | 2 +- .../worker/task/ScanVideoResourceJobHandler.java | 676 +++++++++ .../task/SegmentAutoFillRetryJobHandler.java | 9 +- .../AudioAdjustSpeedConsumerListenerTest.java | 194 +++ .../worker/consumer/CommonDelayListenerTest.java | 106 ++ .../worker/consumer/CommonNormalListenerTest.java | 105 ++ .../consumer/config/AdminMqConsumerConfigTest.java | 136 ++ .../ArtGalleryJsonRefreshConsumerHandlerTest.java | 88 ++ .../handler/AudioLrcCompleteListenerTest.java | 4 +- ...estionCollectionPublishConsumerHandlerTest.java | 188 +++ .../handler/DataSyncToEsConsumerHandlerTest.java | 2 +- .../DelayClearGameResourceCacheListenerTest.java | 90 ++ .../handler/DelayClearLessonCacheListenerTest.java | 71 + .../GenerateComponentDataConsumerHandlerTest.java | 79 ++ .../LessonContentAlertDelayListenerTest.java | 2 +- .../LessonJsonRefreshConsumerHandlerTest.java | 715 ++++++++++ .../QuestionJsonRefreshConsumerHandlerTest.java | 126 ++ .../ReadToolJsonRefreshConsumerHandlerTest.java | 115 ++ .../ResourceMetadataConsumerHandlerTest.java | 97 ++ .../ResourcePackTaskCreationEventListenerTest.java | 2 +- .../ResourceZstTaskCreationEventListenerTest.java | 2 +- .../SyncFlowTemplateIdConsumerHandlerTest.java | 96 ++ .../handler/TagImportConsumerHandlerTest.java | 222 +++ .../handler/TagTreePublishConsumerHandlerTest.java | 169 +++ .../consumer/handler/UploadSuccessHandlerTest.java | 4 +- .../consumer/handler/VodCompleteListenerTest.java | 171 +++ .../SegmentPublishRecalcConsumerListenerTest.java | 96 ++ .../SegmentSyncComputeConsumerListenerTest.java | 163 +++ .../task/EnglishAudioBackfillJobHandlerTest.java | 90 ++ .../worker/task/EnglishBatchPublishTaskTest.java | 200 +++ .../worker/task/EnglishPhraseImportTaskTest.java | 106 ++ .../cc/worker/task/EnglishWordImportTaskTest.java | 93 ++ .../worker/task/FlushLessonTitleSwapTaskTest.java | 393 ++++++ .../task/FlushQuestionVideoMidJobHandlerTest.java | 12 +- .../task/ScanVideoResourceJobHandlerTest.java | 597 ++++++++ .../task/SegmentAutoFillRetryJobHandlerTest.java | 2 + .../impl/EnglishDictLibraryServiceImpl.java | 129 +- .../impl/EnglishDictLibraryServiceImplTest.java | 201 ++- .../impl/EnglishDictLibraryServiceRoutingTest.java | 8 +- api/rpc-api/pom.xml | 2 +- .../request/english/EnglishDictListByIdsReq.java | 40 +- .../cc/api/service/EnglishDictLibraryService.java | 5 +- .../common/dto/english/EnglishDictDetailDto.java | 4 +- .../cc/common/dto/english/EnglishPhraseDto.java | 14 +- .../dto/english/EnglishPhraseVariantDto.java | 39 + .../cc/common/dto/english/EnglishSegmentDto.java | 19 +- .../dto/question/library/StandardQuestionDto.java | 10 +- .../cache/english/EnglishPhraseCacheService.java | 56 +- .../english/EnglishPhraseIndexCacheService.java | 248 +++- .../java/cn/jojo/cc/biz/config/GameCodeConfig.java | 2 +- .../bo/english/EnglishAudioBackfillResultBo.java | 47 + .../biz/model/bo/english/EnglishPhraseCacheBo.java | 50 +- .../EnglishSegmentPublishRecalcMessage.java | 22 + .../EnglishSegmentRecalculationMessage.java | 2 +- .../english/EnglishSegmentSyncComputeMessage.java | 32 + .../biz/model/bo/english/EnglishWordDetailBo.java | 5 +- .../biz/model/bo/english/PhraseIndexSnapshot.java | 7 +- .../cc/biz/model/bo/english/PhraseVariantKey.java | 60 - .../bo/question/library/QuestionPublishBo.java | 12 - .../cn/jojo/cc/biz/rediscache/RedissonHelper.java | 10 + .../dict/EnglishAudioBackfillBizService.java | 19 + .../dict/EnglishDictAudioResourceService.java | 3 +- .../dict/EnglishDictAudioResourceServiceImpl.java | 13 +- .../english/dict/EnglishDictChangeListener.java | 20 +- .../dict/EnglishDictImportBizServiceImpl.java | 30 +- .../dict/EnglishDictPublishProServiceHelper.java | 8 + .../english/dict/EnglishDictWriteLockService.java | 10 +- .../english/dict/EnglishDictWriteTxService.java | 65 +- .../english/dict/EnglishPhraseBizServiceImpl.java | 33 +- .../english/dict/EnglishPublishBizServiceImpl.java | 7 +- .../english/dict/EnglishWordBizServiceImpl.java | 44 +- .../dict/SegmentAutoFillBizServiceImpl.java | 97 +- .../impl/EnglishAudioBackfillBizServiceImpl.java | 361 +++++ .../segment/DefaultSegmentTextExtractor.java | 66 +- .../english/segment/QuestionSegmentBizService.java | 10 + .../segment/QuestionSegmentBizServiceImpl.java | 107 +- .../segment/QuestionSegmentSaveHookService.java | 69 +- .../english/segment/SegmentMatchIdResolver.java | 45 +- .../english/segment/SegmentRefreshBizService.java | 12 + .../segment/SegmentRefreshBizServiceImpl.java | 78 +- .../biz/service/english/segment/SegmentResult.java | 9 - .../english/word/EnglishAudioBizService.java | 11 +- .../english/word/EnglishAudioBizServiceImpl.java | 15 +- .../service/impl/ComboCourseBizServiceImpl.java | 40 + ...ameResourceReleaseSheetQuestionTaskService.java | 2 +- .../knowledge/KnowledgeMaterialBizServiceImpl.java | 255 ++++ .../question/library/QuestionBizServiceImpl.java | 132 +- .../knowledge/KnowledgeMaterialBizService.java | 32 + .../biz/service/question/QuestionBizService.java | 10 + .../service/synch/impl/SynchBizServiceImpl.java | 13 - .../english/EnglishPhraseCacheServiceTest.java | 86 +- .../EnglishPhraseIndexCacheServiceTest.java | 242 ++++ .../cache/english/EnglishWordCacheServiceTest.java | 415 +++++- .../english/EnglishWordTextCacheServiceTest.java | 196 +++ .../EnglishDictAudioResourceServiceImplTest.java | 135 ++ .../dict/EnglishDictImportBizServiceImplTest.java | 460 ++++++ .../dict/EnglishDictWriteLockServiceTest.java | 218 +++ .../dict/EnglishDictWriteTxServiceTest.java | 689 ++++++++- .../english/dict/EnglishImportFileReaderTest.java | 226 +++ .../english/dict/EnglishPublishBizServiceTest.java | 184 ++- .../english/dict/EnglishWordBizServiceTest.java | 14 +- .../dict/SegmentAutoFillBizServiceTest.java | 73 +- .../EnglishAudioBackfillBizServiceImplTest.java | 370 +++++ .../segment/DefaultSegmentTextExtractorTest.java | 41 +- .../segment/EnglishDictChangeListenerTest.java | 2 +- .../segment/QuestionSegmentBizServiceTest.java | 163 ++- .../segment/QuestionSegmentSaveHookTest.java | 120 +- .../segment/SegmentRefreshBizServiceTest.java | 114 +- .../word/EnglishAudioBizServiceImplTest.java | 29 +- .../impl/ComboCourseBizServiceImplTest.java | 198 +++ .../service/impl/QuestionBizServiceImplTest.java | 16 + .../KnowledgeMaterialBizServiceImplTest.java | 653 +++++++++ .../library/QuestionBizServiceImplTest.java | 20 + .../library/QuestionPublishSegmentTest.java | 42 +- .../service/impl/CourseImportBizServiceTest.java | 4 + .../cc/biz/common/config/EnglishDictConfig.java | 74 +- .../resources/i18n/messages/error_local.properties | 6 + .../i18n/messages/error_local_zh_CN.properties | 5 + .../i18n/messages/error_local_zh_TW.properties | 1 + .../biz/common/config/EnglishDictConfigTest.java | 13 +- common/pom.xml | 2 +- .../cc/common/enums/CcWorkerClusterTagEnum.java | 10 + .../common/enums/GameCommonResourceTypeEnum.java | 14 +- .../jojo/cc/common/enums/GameResourceTypeEnum.java | 18 + .../java/cn/jojo/cc/common/enums/RedisKeyEnum.java | 23 + .../jojo/cc/common/enums/RpcPartOfSpeechEnum.java | 1 + .../cc/common/enums/english/PartOfSpeechEnum.java | 25 +- .../cc/common/enums/english/SegmentStatusEnum.java | 7 +- .../java/cn/jojo/cc/common/utils/EnglishWords.java | 46 +- .../i18n/messages/cc_error_local.properties | 3 +- .../i18n/messages/cc_error_local_zh_CN.properties | 3 +- .../i18n/messages/cc_error_local_zh_TW.properties | 3 +- .../cn/jojo/cc/common/utils/EnglishWordsTest.java | 43 +- docs/sql/2026-07-08-knowledge-material-v3.sql | 13 +- docs/sql/2026-10-21-english-dict-segment.sql | 20 +- .../2026-10-30-question-segment-content-type.sql | 42 + docs/sql/2026-11-03-english-dict-audio-task.sql | 49 + ...0-21-591153-knowledge-batch-edit-lesson-step.md | 1485 ++++++++++++++++++++ .../2026-10-21-issue595043-english-dict-library.md | 8 +- .../00-execution-contract.md | 3 +- .../00-interface-map.md | 20 +- .../00-review-gates.md | 18 +- .../01-foundation-contracts.md | 54 +- .../02-external-audio.md | 8 +- .../03-matching-cache.md | 29 +- .../04-segment-engine.md | 48 +- .../05-dictionary-management.md | 30 +- .../06-dictionary-rpc.md | 6 +- .../07-import-jobs.md | 54 +- .../08-save-autofill.md | 63 +- .../09-full-refresh.md | 12 +- .../10-question-delivery.md | 20 +- .../11-release-acceptance.md | 24 +- .../handoffs/05.md | 1 + .../handoffs/07.md | 2 +- .../handoffs/08.md | 1 + .../manifest.json | 81 +- .../progress.md | 20 +- .../reference.md | 76 +- ...1-knowledge-material-publish-refactor-design.md | 2 +- ...026-10-13-game-resource-dd-zzx-hybrid-design.md | 217 +++ ...1153-knowledge-batch-edit-lesson-step-design.md | 201 +++ ...0-21-issue595043-english-dict-segment-design.md | 375 ++++- .../591158-admin-consumer-migration-to-worker.md | 252 ++++ .../jojo/cc/adaptor/english/BaiduDictClient.java | 13 +- .../jojo/cc/adaptor/english/InternalTtsClient.java | 35 +- .../jojo/cc/adaptor/english/dto/TtsTaskStatus.java | 47 + .../english/impl/InternalTtsClientImpl.java | 65 +- .../adaptor/english/InternalTtsClientImplTest.java | 62 +- .../java/cn/jojo/cc/core/bo/ComboCourseBo.java | 3 + .../cc/core/bo/english/UnmatchedWordCountBo.java | 26 - .../cc/core/bo/knowledge/KnowledgeFieldPairBo.java | 25 + .../cn/jojo/cc/core/dao/BusinessResourceDao.java | 15 + .../main/java/cn/jojo/cc/core/dao/LessonDao.java | 13 + .../main/java/cn/jojo/cc/core/dao/ResourceDao.java | 15 + .../cc/core/dao/english/QuestionSegmentDao.java | 31 + .../dao/english/QuestionSegmentUnmatchedDao.java | 85 -- .../dao/knowledge/KnowledgeLessonContentDao.java | 29 + .../cc/core/domain/english/EnglishPhraseDo.java | 13 + .../domain/english/EnglishPhraseVariantDo.java | 13 + .../jojo/cc/core/domain/english/EnglishWordDo.java | 13 + .../domain/english/QuestionSegmentUnmatchedDo.java | 38 - .../core/service/BusinessResourceCoreService.java | 12 + .../cn/jojo/cc/core/service/LessonCoreService.java | 10 + .../jojo/cc/core/service/ResourceCoreService.java | 12 + .../service/english/EnglishPhraseCoreService.java | 25 + .../english/EnglishPhraseVariantCoreService.java | 28 + .../service/english/EnglishWordCoreService.java | 26 + .../english/QuestionSegmentCoreService.java | 10 + .../QuestionSegmentUnmatchedCoreService.java | 35 - .../BusinessResourceCoreServiceImplMapper.java | 10 + .../service/impl/LessonCoreServiceImplMapper.java | 5 + .../impl/ResourceCoreServiceImplMapper.java | 10 + .../impl/english/EnglishPhraseCoreServiceImpl.java | 90 +- .../EnglishPhraseVariantCoreServiceImpl.java | 68 + .../impl/english/EnglishWordCoreServiceImpl.java | 99 +- .../english/QuestionSegmentCoreServiceImpl.java | 36 +- .../QuestionSegmentUnmatchedCoreServiceImpl.java | 153 -- ...nowledgeLessonContentCoreServiceImplMapper.java | 18 + .../KnowledgeLessonContentCoreService.java | 22 + .../resources/mapper/BusinessResourceMapper.xml | 18 + .../resources/mapper/KnowledgeLessonContentDao.xml | 44 + .../src/main/resources/mapper/LessonMapper.xml | 8 + .../src/main/resources/mapper/ResourceMapper.xml | 18 + .../core/dao/english/EnglishDaoAnnotationTest.java | 3 - .../english/EnglishPhraseConflictQueryTest.java | 14 + .../english/EnglishPhraseCoreServiceTest.java | 468 ++++++ .../EnglishPhraseVariantCoreServiceTest.java | 228 +++ .../english/EnglishWordCoreServiceTest.java | 402 +++++- .../EnglishWordTranslationCoreServiceTest.java | 198 +++ .../english/QuestionSegmentCoreServiceTest.java | 372 ++++- .../QuestionSegmentUnmatchedCoreServiceTest.java | 140 -- ...essonContentCoreServiceImplMapperBatchTest.java | 105 ++ pom.xml | 2 +- 264 files changed, 18483 insertions(+), 2481 deletions(-)