graph LR
A[levelTestingEntraceInfo]
B(m_web_level_testing_entrance)
A-->B
C((GetLevelTestingStatistic))
D((GetLevelTestingMeta))
E((GetPlanMeta))
F((GetUserLevelPlanLesson))
G((MCheckLessonFinish))
B--1.1-->C
B--1.2-->D
B--1.3-->E
B--1.4.1-->F
B--1.4.2-->G
H[handler:user_level_testing.GetLevelTestingStatistic]
I[dal:user_level_testing.GetLevelTestingStatistic]
C-->H
H-->I
J[handler:level_testing_meta_v2_handler.GetLevelTestingMeta]
K[logic:level_testing_meta_logic.GetLevelTestingMeta]
L[dal:user_level_testing.GetTestingChanceLeft]
M[level_testing_progress_manager.GetProgressRecord]
N[evel_testing_progress_manager.InitProgressRecord]
O>rpc.GetUserLevelId]
P((MGetUser))
D-->J
J-->K
K--1-->L
K--2-->M
M-->N
N-->O
O-->P
Q[handler:plan_meta.GetPlanMeta]
R[dal:user_plan.GetUserPlan]
S{user_plan}
T[dal:study_plan.GetLastPlan]
U{study_plan}
E-->Q
Q--1-->P
Q--2-->R
R--1-->S
R--2-->T
T-->U
V[handler:get_user_level_plan_lesson.GetUserLevelPlanLesson]
X((MGetVipUserInfo))
Y[dal:user_plan_lesson.GetCachedUserPlanLesson]
Z[dal:user_plan_lesson.GetUserFinishLesson]
AA{user_plan_lesson}
AB[user_plan_lesson.mergeUserFinishAndInProgressLesson]
AC((MGetLesson))
AD((MGetResetLesson))
AE[dal:user_plan_lesson.getLatestPlanLesson]
AF((GetLevelUnitLesson))
F-->V
V--1-->P
V--2-->X
V--3-->Y
Y--1-->Z
Z--1-->AA
Z--2-->AB
Z--3-->AC
Z--4-->AD
Y--2-->AE
AE-->AF
AG[commitInitProficiency]
AH(m_web_commit_init_proficiency)
AI((CommitInitProficiency))
AJ[handler:level_test_question_v2_handler. CommitInitProficiency]
AK[logic:level_test_question_v2_logic.CommitInitProficiency]
AG-->AH
AH-->AI
AI-->AJ
AJ-->AK
AL[answerlevelTestingQuestionV2]
AM(m_web_answer_level_testing_question_v2)
AN((AnswerLevelTestQuestionV2))
AO[handler:level_test_question_v2_handler.AnswerLevelTestQuestionV2]
AP[logic:level_test_question_v2_logic.AnswerLevelTestQuestionV2]
AQ[logic:level_test_question_v2_logic.getExerciseMetaFromProgress]
AR((GetExercise))
AS[level_testing_progress_manager.JudgeQuestionAnswer]
AT[level_testing_progress_manager.UpdateProgressRecord]
AU[level_testing_progress_manager.getNextQuestionLevel]
AV[level_test_question_v2_logic.getQuestionByIndex]
AW[level_test_question_v2_logic.assignNextQuestionInCurrentRound]
AX[level_test_question_v2_logic.getRandomSkillTagsWithoutOral]
AY((GetTestingQuestionBySkillTags))
AZ{exercise}
BA[level_test_question_v2_logic.FinishLevelTesting]
BB[level_testing_report_manager.GenerateLevelTestingReport]
BC[dal:user_level_testing.SaveLevelTestingRecordV2]
BD{user_level_testing_record}
BE[logic:change_user_level.ChangeUserLevel]
BF((SetUserLevel))
BG((CreateStudyPlan))
BH[dal:user_level_testing.UpdateUserLevelStatus]
BI((GetTotalStudyDuration))
BJ[level_test_question_v2_logic.calculateProgressRate]
d[level_testing_progress_manager.GetProgressRecord]
k((GetPlanMeta))
l((MGetVipUserInfo))
AL-->AM
AM-->AN
AN-->AO
AO-->AP
AP-.1.->d
AP--2-->AQ
AP--3-->AR
AP--4-->AS
AP--5-->AT
AT-->AU
AP--6-->AV
AV--1-->AR
AV--2-->AW
AW--1-->AX
AW--2-->AY
AY-->AZ
AR-->AZ
AP--7-->BA
BA--1-->BB
BB-->BC
BC-->BD
BA--2-->BE
BE--1.1-->BF
BE-.1.2.1.->k
BE-.1.2.2.->l
BE--2-->BG
BA--3-->BH
BA--4-->BI
AP--8-->BJ
BO[levelTestingQuestionV2]
a(m_web_level_testing_question_v2)
BP((LevelTestingQuestionV2))
BQ[handler:level_test_question_v2_handler.LevelTestingQuestionV2]
BR[logic:evel_test_question_v2_logic.GetLevelTestQuestionV2]
BS[dal:user_level_testing.HasChanceToTest]
e[level_testing_progress_manager.InitProgressRecord]
f[level_testing_progress_manager.GetProgressRecord]
g[level_test_question_v2_logic.getQuestionByIndex]
BO-->a
a-->BP
BP-->BQ
BQ-->BR
BR--1-->BS
BR-.2.->e
BR-.3.->f
BR-.4.->g
BT[confirmTestingResultV2]
b(m_web_confirm_testing_result_v2)
BU((ConfirmTestingResultV2))
BV[handler:level_testing_meta_v2_handler.ConfirmTestingResultV2]
BW[logic:level_testing_meta_logic.ConfirmTestingResultV2]
h[level_testing_progress_manager.GetProgressRecord]
i[level_test_question_v2_logic.FinishLevelTesting]
BT-->b
b-->BU
BU-->BV
BV-->BW
BW-.1.->h
BW-.2.->i
BX[levelTestingReport]
c(m_web_level_testing_report)
BY((LevelTestingReport))
BZ[handler:user_level_testng.LevelTestingReport]
CA[dal:user_level_testing.LevelTestingReport]
CB[CheckUserCampExist]
j((GetPlanMeta))
BX-->c
c-->BY
BY--1-->BZ
BZ-->CA
CA-->BD
BY-.2.->j
BY--3-->CB
CC[commitTestingFeedback]
CD(m_web_commit_testing_feedback)
CE((CommitTestingFeedback))
CF[handler:user_level_testing.CommitTestingFeedback]
CG[dal:user_level_testing.CommitTestingFeedback]
CH{level_testing_feedback}
CC-->CD
CD-->CE
CE-->CF
CF-->CG
CG-->CH
CJ[levelTestingHistory]
CK(m_web_level_testing_history)
CL((GetTestingHistoryList))
CM[handler:user_level_testing.GetTestingHistoryList]
CN[dal:user_level_testing.GetCurrentLevelHistory]
CO[dal:user_level_testing.GetTestingHistoryList]
CJ-->CK
CK-->CL
CL-->CM
CM--1-->CN
CM--2-->CO
CN-->BD
CO-->BD