MCPcopy Create free account

hub / github.com/Pandlagon/IELTS-Studio / functions

Functions952 in github.com/Pandlagon/IELTS-Studio

↓ 2 callersMethodaiCallFailed
把 provider 调用相关异常脱敏后转为业务异常, 避免把原始 response body / API Key 透传给前端。 不 log ex.getMessage(),因为里面可能含 provider body。
backend/src/main/java/com/ieltsstudio/service/ClozeService.java:265
↓ 2 callersMethodanswersMatch
(String userAnswer, String correctAnswer)
backend/src/main/java/com/ieltsstudio/service/ExamService.java:441
↓ 2 callersMethodapplyProviderConfig
(UserAiSettings entity, AiProviderConfigRequest req, AiTaskType taskType)
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:159
↓ 2 callersMethodbuildAuthResult
构建认证响应(Token + 用户信息) <p>登录和注册共用此方法,避免重复代码。
backend/src/main/java/com/ieltsstudio/service/AuthService.java:106
↓ 2 callersMethodbuildFallbackQuestions
Build fallback questions from Step1 skeleton when Step2 fails for a group. These will have text but no answer/explanation (user can still see the ques
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:724
↓ 2 callersMethodbuiltinCreds
()
backend/src/test/java/com/ieltsstudio/service/ClozeServiceProviderTest.java:70
↓ 2 callersMethodcallVisionProvider
统一 Vision Provider 调用:{@link AiSettingsService} 已解析好 {@link AiCredentials}, 这里只负责 {@link AiUsageGuard} 用量守卫 + {@link OpenAiCompatibleClient} 发请求 + JSO
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:544
↓ 2 callersMethodcheckInMemoryRateLimit
单机内存限流(Redis 降级路径)。 <p>返回 {@code true} 表示放行;{@code false} 表示触发限流。 不直接写流水、不抛异常,由 {@link #checkUserRateLimit} 统一处理。</p>
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:270
↓ 2 callersMethodclamp
(int v, int min, int max)
backend/src/main/java/com/ieltsstudio/ai/service/AdminAiUsageStatsService.java:161
↓ 2 callersMethodcosineSimilarity
(Map<String, Double> v1, Map<String, Double> v2)
backend/src/main/java/com/ieltsstudio/util/TfIdfUtil.java:78
↓ 2 callersMethodcountAdminOperationLogs
统计符合筛选条件的审计日志总数。 <p>筛选参数与 {@link #selectAdminOperationLogs} 一致。</p>
backend/src/main/java/com/ieltsstudio/mapper/AdminOperationLogMapper.java:72
↓ 2 callersMethodcountByUserIdAndDate
(Long userId, LocalDate date)
backend/src/main/java/com/ieltsstudio/mapper/StudyCheckinMapper.java:20
↓ 2 callersMethodcurrentPeriod
当前自然周:周一 00:00:00 到下周一 00:00:00(基于服务器默认时区)
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:331
↓ 2 callersMethoddetectMimeType
(String filename)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:1012
↓ 2 callersFunctiondetectWritingTaskMeta
(text, rawOptions = {})
frontend/src/stores/exam.js:84
↓ 2 callersMethodenableUser
启用用户(deleted = 0)。不改变其 role。 @param currentAdminId 当前操作的管理员 ID(保留以保持签名一致,本方法不使用) @param targetUserId 目标用户 ID @return 更新后的用户 DTO @throws RuntimeExce
backend/src/main/java/com/ieltsstudio/service/AdminUserService.java:210
↓ 2 callersMethodenforceVisualDataSummary
Ensure Task 1 passages contain a [Visual Data Summary] block. If missing, try to synthesize it from detected chartTitle/chartType lines and data point
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:810
↓ 2 callersMethodevictWordCaches
(Long userId, Long bookId)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:255
↓ 2 callersMethodexistsForUser
(Long userId, Long bookId)
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:78
↓ 2 callersMethodextractOptionDescriptions
Scan raw text for option list patterns like: A There is a complicated combination... B The rainforests are being destroyed... Returns a map of l
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1112
↓ 2 callersMethodfakeExam
()
backend/src/test/java/com/ieltsstudio/service/AsyncParseServiceVisionUserIdPropagationTest.java:68
↓ 2 callersMethodfakeParsed
构造一个简单的精准解析返回(单 section、1 道 fill 题,避免触发 commitSection 内部 retry)。
backend/src/test/java/com/ieltsstudio/service/AsyncParseServiceVisionUserIdPropagationTest.java:54
↓ 2 callersMethodfindByEmail
(String email)
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:18
↓ 2 callersMethodfindByUserIdAndBookId
(@Param("userId") Long userId, @Param("bookId") String bookId)
backend/src/main/java/com/ieltsstudio/mapper/WordStudyStateMapper.java:12
↓ 2 callersMethodfindIdByBookIdAndWord
(Long bookId, String word)
backend/src/main/java/com/ieltsstudio/mapper/WordEntryMapper.java:22
↓ 2 callersMethodfixInlineStringOptions
Post-processing: detect inline string options like "A cost B falling C technology ..." and convert them into JSON objects.
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1002
↓ 2 callersMethodfixLetterOnlyMcqOptions
Post-processing: detect questions with letter-only options (e.g. ["A","B","C",...]) and attempt to extract full option descriptions from the raw input
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1046
↓ 2 callersMethodfixLocatorText
Validate each question's locatorText against passages + raw input text. If locatorText is not found verbatim, attempt fuzzy correction by searching fo
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1538
↓ 2 callersMethodfixMissingHeadingQuestions
Detect heading matching questions (MCQ with "Paragraph X" text and roman numeral options) and auto-generate missing paragraph questions when the AI on
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1328
↓ 2 callersMethodfixRangeOptions
Detect MCQ questions whose options is a range string like "i-vii" or "A-F" and replace with properly extracted heading/option objects from raw text.
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:1170
↓ 2 callersFunctiongetAccuracy
(state)
frontend/src/stores/word.js:56
↓ 2 callersFunctiongetBandScore
(correct, total)
frontend/src/stores/exam.js:580
↓ 2 callersMethodgetPromptForExamType
(String examType, boolean isMultiPage)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:477
↓ 2 callersMethodgetSigningKey
根据配置的密钥字符串构建 HMAC-SHA 签名密钥
backend/src/main/java/com/ieltsstudio/util/JwtUtil.java:38
↓ 2 callersMethodgetStats
(Long userId)
backend/src/main/java/com/ieltsstudio/service/StudyCheckinService.java:41
↓ 2 callersMethodgrantCredits
给当前周期增加 creditsTotal。 <ul> <li>无 quota 行:创建(creditsTotal=100+credits, creditsUsed=0)。</li> <li>已存在:creditsTotal += credits,不修改 creditsUsed。</li> <
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:120
↓ 2 callersMethodhasField
(Class<?> clazz, String fieldName)
backend/src/test/java/com/ieltsstudio/service/AdminUserServiceTest.java:307
↓ 2 callersMethodisDuplicate
(Long bookId, String key, Set<String> existing, Set<String> seenInBatch)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:219
↓ 2 callersFunctionisMockToken
* 判断当前 Token 是否为本地 Mock Token * Mock Token 以 'mock_token_' 开头,仅用于无后端时的开发调试
frontend/src/api/auth.js:9
↓ 2 callersMethodlistLogs
分页查询审计日志。page / pageSize 自动 clamp(page≥1,pageSize∈[1,100])。 <p>所有筛选参数可为 null(不过滤)。结果按 {@code created_at DESC, id DESC} 排序。</p>
backend/src/main/java/com/ieltsstudio/service/AdminAuditLogService.java:187
↓ 2 callersMethodlistProviderPresets
列出按任务类型分组的 Provider 预设(含 OPENAI_COMPATIBLE 自定义模板)。 @return {@code {"text": [...], "vision": [...]}}
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:114
↓ 2 callersMethodloadExistingWords
(Long bookId)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:202
↓ 2 callersFunctionloadTesseract
()
frontend/src/utils/pdfExtract.js:15
↓ 2 callersMethodmarkError
(Long examId)
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:1457
↓ 2 callersMethodmaskKeyLike
屏蔽字符串中疑似 API Key / Bearer token 的片段。 保留前 3 位 + {@code },避免完整 token 进入日志。
backend/src/main/java/com/ieltsstudio/ai/util/AiLogSanitizer.java:114
↓ 2 callersFunctionnextWord
()
frontend/src/stores/word.js:659
↓ 2 callersMethodnormalize
(String s)
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:1331
↓ 2 callersFunctionnormalizeAnswer
(answer)
frontend/src/stores/exam.js:572
↓ 2 callersMethodnormalizeAnswer
(String answer)
backend/src/main/java/com/ieltsstudio/service/ExamService.java:445
↓ 2 callersMethodnormalizePassageText
(String input)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:932
↓ 2 callersMethodnormalizePassages
(Map<String, Object> node)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:631
↓ 2 callersMethodnormalizeQuestions
(Map<String, Object> node)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:872
↓ 2 callersMethodopenAiResponseJson
构造 OpenAI-compatible 响应:{"choices":[{"message":{"content":"<content>"}}]}
backend/src/test/java/com/ieltsstudio/ai/client/OpenAiCompatibleClientLocalServerTest.java:91
↓ 2 callersMethodparseAndSaveImages
(Long userId, Long examId, List<byte[]> imageBytes, List<String> filenames,
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:372
↓ 2 callersMethodparseMultiPageImages
(Long userId, AiCredentials credentials, List<String> da
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:510
↓ 2 callersFunctionparseOptionsString
* Parse options from a multi-line string format: "A: text\nB: text\n..." * or "A text\nB text\n..." (used when AI returns options as plain text).
frontend/src/stores/exam.js:48
↓ 2 callersMethodparseSingleImage
(Long userId, AiCredentials credentials, String dataUrl, Str
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:496
↓ 2 callersMethodparseVisualBlock
(String block, int passageIndex)
backend/src/main/java/com/ieltsstudio/service/VisualBlockConverter.java:65
↓ 2 callersMethodpick
读取旧 encrypted (encrypted=true) 或 masked (encrypted=false)
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:217
↓ 2 callersMethodpieChart
(String title, String suffix, String unit, List<Datum> data, i
backend/src/main/java/com/ieltsstudio/service/VisualBlockConverter.java:305
↓ 2 callersMethodproviderName
仅返回 provider 枚举名或 null,避免在 usage record 中暴露 baseUrl / model / API Key
backend/src/main/java/com/ieltsstudio/service/ClozeService.java:271
↓ 2 callersMethodrecent
查询最近 N 条 AI usage records,按 createdAt 倒序。 <p>权限:{@link AdminPermission#ADMIN_AI_USAGE_VIEW}</p> @param limit 返回数量,默认 50,范围 {@code [1, 100]},越界自动 cla
backend/src/main/java/com/ieltsstudio/controller/AdminAiUsageController.java:71
↓ 2 callersMethodrecord
( AuthUser actor, AdminOperationAction action, String resourceType,
backend/src/main/java/com/ieltsstudio/service/AdminAuditLogService.java:145
↓ 2 callersMethodrequireAdmin
防御性 ADMIN 校验 + 精细权限校验(Phase 8C)。
backend/src/main/java/com/ieltsstudio/controller/AdminAiUsageController.java:82
↓ 2 callersMethodrequireApiKey
校验 API Key 已配置。异常消息<b>不</b>包含 key 本身或任何 key 片段。
backend/src/main/java/com/ieltsstudio/ai/service/AiSettingsService.java:224
↓ 2 callersMethodrequirePreset
(AiProviderType type)
backend/src/main/java/com/ieltsstudio/ai/service/AiSettingsService.java:213
↓ 2 callersMethodresetUsed
重置当前周期 creditsUsed=0。 <ul> <li>无 quota 行:创建默认 quota 行(creditsTotal=100, creditsUsed=0)。</li> <li>已存在:creditsUsed=0。</li> </ul>
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:141
↓ 2 callersMethodresolveBuiltin
(Long userId, AiTaskType taskType)
backend/src/main/java/com/ieltsstudio/ai/service/AiSettingsService.java:153
↓ 2 callersFunctionsetMode
(mode)
frontend/src/stores/theme.js:32
↓ 2 callersMethodtableExists
(String tableName)
backend/src/main/java/com/ieltsstudio/config/DatabaseMigrationRunner.java:86
↓ 2 callersMethodtoConfigResponse
(UserAiSettings entity, AiTaskType taskType)
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:262
↓ 2 callersMethodtoResponse
(UserAiSettings entity)
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:254
↓ 2 callersMethoduserCreds
()
backend/src/test/java/com/ieltsstudio/service/AiParseServiceWordGenerationProviderTest.java:60
↓ 2 callersMethoduserMultimodal
构造 user 多模态消息(content 为 List/Map 结构)
backend/src/main/java/com/ieltsstudio/ai/model/AiChatMessage.java:51
↓ 2 callersMethodwarmDedupeSet
(Long bookId, Set<String> existing)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:214
↓ 2 callersMethodworkflowStep1B
Workflow Step 1B: Identify question groups structure only (focused, short prompt).
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:813
↓ 2 callersMethodworkflowStep2
Workflow Step 2: Given passage and one question group, generate answers and explanations.
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:848
↓ 1 callersFunction_loadBookSettings
(bookId)
frontend/src/stores/word.js:144
↓ 1 callersFunction_pollBookStatus
(bookId)
frontend/src/stores/word.js:402
↓ 1 callersFunction_pollEntriesAfterAdd
(bookId, durationMs = 60000, intervalMs = 5000)
frontend/src/stores/word.js:450
↓ 1 callersMethodaddWordToDefaultBook
Add a word by data (used for builtin/client-side words that have no DB entry).
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:162
↓ 1 callersMethodaiCallFailed
Vision 调用失败时构造脱敏异常。不输出 ex.getMessage()(可能含 provider body), 不返回原始 body / Key / Authorization 给调用方。
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:598
↓ 1 callersFunctionanswersMatch
(userAnswer, correctAnswer)
frontend/src/stores/exam.js:568
↓ 1 callersMethodappendBlockTag
(String text, String type)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:783
↓ 1 callersFunctionapplyTheme
(dark)
frontend/src/stores/theme.js:9
↓ 1 callersMethodassessDifficulty
Assess exam difficulty on a 1-5 scale based on question types, count, and passage complexity. Returns a Chinese label: 入门(1), 简单(2), 中等(3), 较难(4), 困难(
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:1468
↓ 1 callersMethodbuildDailyTrend
(List<AiUsageRecord> records, LocalDate from, LocalDa
backend/src/main/java/com/ieltsstudio/ai/service/AdminAiUsageStatsService.java:122
↓ 1 callersMethodbuildDefault
(Long userId)
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:140
↓ 1 callersMethodbuildKey
构造 Redis key。 <p>Key 仅包含 userId / feature / epochMinute,禁止拼接 API Key、provider、 baseUrl、model、prompt 等任何敏感或可变信息。</p>
backend/src/main/java/com/ieltsstudio/ai/service/AiRedisRateLimiter.java:68
↓ 1 callersMethodbuildQuestion
(Map<String, Object> block, Map<Integer, String> answerKey)
backend/src/main/java/com/ieltsstudio/service/FileParseService.java:207
↓ 1 callersMethodbuildRequestBody
(AiCredentials credentials, AiChatRequest request)
backend/src/main/java/com/ieltsstudio/ai/client/OpenAiCompatibleClient.java:140
↓ 1 callersMethodbuiltinCreds
()
backend/src/test/java/com/ieltsstudio/service/AiParseServiceWordGenerationProviderTest.java:72
↓ 1 callersMethodbuiltinCreds
()
backend/src/test/java/com/ieltsstudio/service/AiParseServiceTextProviderTest.java:69
↓ 1 callersMethodcalculateBand
根据正确题数与总题数计算雅思 Band 分 <p>换算标准参考雅思官方评分表(阅读部分): <pre> 正确率 ≥ 92.5% → Band 9.0 正确率 ≥ 87.5% → Band 8.5 ... 正确率 &lt; 32.5% → Band 4.0 </pre>
backend/src/main/java/com/ieltsstudio/service/ExamService.java:425
↓ 1 callersMethodchartExists
(List<Map<String, Object>> charts, Map<String, Object> candidate)
backend/src/main/java/com/ieltsstudio/service/VisualBlockConverter.java:241
↓ 1 callersMethodcheckBuiltin
预扣 credits:原子更新,credits_total - credits_used >= cost 才成功
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:173
↓ 1 callersMethodcheckUserRateLimit
(Long userId, AiFeature feature, String provider)
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:244
↓ 1 callersMethodclassifyUnit
(String yAxis, List<Datum> data)
backend/src/main/java/com/ieltsstudio/service/VisualBlockConverter.java:337
↓ 1 callersMethodcoercePassageBlock
(Object block)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:735
↓ 1 callersMethodcopyToDefaultBook
Copy a word entry from any book into the user's default 生词本.
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:130
← previousnext →201–300 of 952, ranked by callers