Initial commit: obsidian to gitea
This commit is contained in:
85
study/courses/pm/report.figs/.$use-case.drawio.bkp
Normal file
85
study/courses/pm/report.figs/.$use-case.drawio.bkp
Normal file
@@ -0,0 +1,85 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.8 Chrome/140.0.7339.240 Electron/38.4.0 Safari/537.36" version="28.2.8">
|
||||
<diagram name="Page-1" id="page-1">
|
||||
<mxGraphModel dx="784" dy="671" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="6" value="配置岗位需求" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="120" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7" value="配置试题策略" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="180" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9" value="在线答题" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="360" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="10" value="查看成绩与统计" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="240" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="11" value="提交试题反馈" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="300" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="12" value="题库管理与题目淘汰" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="420" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="13" value="企业接入与运营配置" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="490" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="14" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="6" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="15" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="7" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="16" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="17" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="18" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="9" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="19" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="20" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="21" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-27" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="410" y="490" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="22" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-27" target="13" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="410" y="490" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-22" value="招聘企业 HR" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;strokeColor=#BD7000;fontColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="210" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-23" value="应聘者" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="295" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-27" value="平台管理员" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="450" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
43
study/courses/pm/report.figs/activity.mmd
Normal file
43
study/courses/pm/report.figs/activity.mmd
Normal file
@@ -0,0 +1,43 @@
|
||||
flowchart TD
|
||||
%% ======== 样式定义 ========
|
||||
classDef roleHR fill:#fff7e6,stroke:#fa8c16,stroke-width:1px;
|
||||
classDef roleCandidate fill:#e6fffb,stroke:#13c2c2,stroke-width:1px;
|
||||
classDef roleSystem fill:#f0f5ff,stroke:#2f54eb,stroke-width:1px;
|
||||
|
||||
%% ======== 开始与结束 ========
|
||||
Start([开始])
|
||||
End([结束])
|
||||
|
||||
%% ======== HR 泳道 ========
|
||||
subgraph HRLane[招聘企业 HR]
|
||||
HR1[填写岗位需求<br/>与能力要求]:::roleHR
|
||||
HR2[配置试题策略]:::roleHR
|
||||
HR3[查看考试统计报表]:::roleHR
|
||||
HR4[评价试题质量与效果]:::roleHR
|
||||
end
|
||||
|
||||
%% ======== 平台后端 泳道 ========
|
||||
subgraph SystemLane[平台后端]
|
||||
S1[解析岗位并抽取技能标签]:::roleSystem
|
||||
S2[生成试卷模板]:::roleSystem
|
||||
S3[为候选人实例化试卷]:::roleSystem
|
||||
S4[记录作答过程与答案]:::roleSystem
|
||||
S5[自动评分并生成结果]:::roleSystem
|
||||
S6[更新题目统计指标]:::roleSystem
|
||||
S7[判定题目是否进入淘汰池]:::roleSystem
|
||||
end
|
||||
|
||||
%% ======== 应聘者 泳道 ========
|
||||
subgraph CandLane[应聘者 Candidate]
|
||||
C1[注册 / 登录]:::roleCandidate
|
||||
C2[选择岗位并领取试卷]:::roleCandidate
|
||||
C3[在线作答]:::roleCandidate
|
||||
C4[查看成绩与解析]:::roleCandidate
|
||||
C5[填写试题反馈]:::roleCandidate
|
||||
end
|
||||
|
||||
%% ======== 活动流转 ========
|
||||
Start --> HR1 --> S1 --> S2 --> HR2 --> S3
|
||||
S3 --> C1 --> C2 --> C3 --> S4 --> S5 --> C4 --> C5 --> S6
|
||||
S6 --> HR3 --> HR4 --> S6
|
||||
S6 --> S7 --> End
|
||||
BIN
study/courses/pm/report.figs/activity.png
Normal file
BIN
study/courses/pm/report.figs/activity.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 286 KiB |
114
study/courses/pm/report.figs/class.mmd
Normal file
114
study/courses/pm/report.figs/class.mmd
Normal file
@@ -0,0 +1,114 @@
|
||||
classDiagram
|
||||
class User {
|
||||
+int id
|
||||
+string name
|
||||
+string email
|
||||
+string role // HR, CANDIDATE, ADMIN
|
||||
+datetime createdAt
|
||||
}
|
||||
|
||||
class Company {
|
||||
+int id
|
||||
+string name
|
||||
+string industry
|
||||
+string size
|
||||
}
|
||||
|
||||
class CandidateProfile {
|
||||
+int id
|
||||
+int userId
|
||||
+string degree
|
||||
+int yearsExperience
|
||||
+string skillTags
|
||||
+string resumeUrl
|
||||
}
|
||||
|
||||
class JobPosition {
|
||||
+int id
|
||||
+int companyId
|
||||
+string title
|
||||
+string level
|
||||
+string requiredSkills
|
||||
+string description
|
||||
+string examPolicyId
|
||||
}
|
||||
|
||||
class ExamPolicy {
|
||||
+string id
|
||||
+int totalQuestions
|
||||
+float easyRatio
|
||||
+float mediumRatio
|
||||
+float hardRatio
|
||||
+string typeRatio // JSON: 单选/多选/编程 等比例
|
||||
}
|
||||
|
||||
class Question {
|
||||
+int id
|
||||
+string content
|
||||
+string type
|
||||
+string skillTag
|
||||
+int difficulty
|
||||
+string source // 企业题/通用题
|
||||
+bool isActive
|
||||
}
|
||||
|
||||
class QuestionStats {
|
||||
+int questionId
|
||||
+int usedCount
|
||||
+float avgScore
|
||||
+float correctRate
|
||||
+float discrimination
|
||||
+float feedbackScore
|
||||
+datetime lastUsedAt
|
||||
}
|
||||
|
||||
class ExamTemplate {
|
||||
+int id
|
||||
+int jobId
|
||||
+string policyId
|
||||
+string questionSlots // JSON: 题目占位信息
|
||||
}
|
||||
|
||||
class ExamSession {
|
||||
+int id
|
||||
+int candidateId
|
||||
+int jobId
|
||||
+int templateId
|
||||
+datetime startTime
|
||||
+datetime submitTime
|
||||
+float totalScore
|
||||
+string status // ONGOING / DONE
|
||||
}
|
||||
|
||||
class Answer {
|
||||
+int id
|
||||
+int sessionId
|
||||
+int questionId
|
||||
+string content
|
||||
+float score
|
||||
+float timeTaken
|
||||
}
|
||||
|
||||
class QuestionFeedback {
|
||||
+int id
|
||||
+int questionId
|
||||
+int fromUserId
|
||||
+int sessionId
|
||||
+int rating // 1~5
|
||||
+string comment
|
||||
+datetime createdAt
|
||||
}
|
||||
|
||||
Company "1" o-- "0..*" User : employs
|
||||
User "1" o-- "0..1" CandidateProfile : has
|
||||
Company "1" o-- "0..*" JobPosition : posts
|
||||
JobPosition "1" o-- "0..*" ExamTemplate : uses
|
||||
ExamPolicy "1" o-- "0..*" ExamTemplate : governs
|
||||
|
||||
Question "1" o-- "1" QuestionStats : has
|
||||
ExamTemplate "1" o-- "0..*" ExamSession : instantiates
|
||||
CandidateProfile "1" o-- "0..*" ExamSession : takes
|
||||
ExamSession "1" o-- "0..*" Answer : contains
|
||||
Question "1" o-- "0..*" Answer : answeredIn
|
||||
Question "1" o-- "0..*" QuestionFeedback : receives
|
||||
User "1" o-- "0..*" QuestionFeedback : writes
|
||||
BIN
study/courses/pm/report.figs/class.png
Normal file
BIN
study/courses/pm/report.figs/class.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 370 KiB |
8
study/courses/pm/report.figs/convert.sh
Executable file
8
study/courses/pm/report.figs/convert.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
for f in *.mmd; do
|
||||
base=$(basename "$f" .mmd)
|
||||
echo "Converting $f → figs/${base}.png"
|
||||
mmdc -i "$f" -o "${base}.png" -s 3
|
||||
done
|
||||
|
||||
113
study/courses/pm/report.figs/er.mmd
Normal file
113
study/courses/pm/report.figs/er.mmd
Normal file
@@ -0,0 +1,113 @@
|
||||
erDiagram
|
||||
USER {
|
||||
int id
|
||||
int company_id
|
||||
string name
|
||||
string email
|
||||
string role
|
||||
}
|
||||
|
||||
COMPANY {
|
||||
int id
|
||||
string name
|
||||
string industry
|
||||
string size
|
||||
}
|
||||
|
||||
CANDIDATE_PROFILE {
|
||||
int id
|
||||
int user_id
|
||||
string degree
|
||||
int years_experience
|
||||
string skill_tags
|
||||
string resume_url
|
||||
}
|
||||
|
||||
JOB_POSITION {
|
||||
int id
|
||||
int company_id
|
||||
string title
|
||||
string level
|
||||
string required_skills
|
||||
string description
|
||||
string exam_policy_id
|
||||
}
|
||||
|
||||
EXAM_POLICY {
|
||||
string id
|
||||
int total_questions
|
||||
float easy_ratio
|
||||
float medium_ratio
|
||||
float hard_ratio
|
||||
string type_ratio
|
||||
}
|
||||
|
||||
QUESTION {
|
||||
int id
|
||||
string content
|
||||
string type
|
||||
string skill_tag
|
||||
int difficulty
|
||||
string source
|
||||
bool is_active
|
||||
}
|
||||
|
||||
QUESTION_STATS {
|
||||
int question_id
|
||||
int used_count
|
||||
float avg_score
|
||||
float correct_rate
|
||||
float discrimination
|
||||
float feedback_score
|
||||
datetime last_used_at
|
||||
}
|
||||
|
||||
EXAM_TEMPLATE {
|
||||
int id
|
||||
int job_id
|
||||
string policy_id
|
||||
string question_slots
|
||||
}
|
||||
|
||||
EXAM_SESSION {
|
||||
int id
|
||||
int candidate_id
|
||||
int job_id
|
||||
int template_id
|
||||
datetime start_time
|
||||
datetime submit_time
|
||||
float total_score
|
||||
string status
|
||||
}
|
||||
|
||||
ANSWER {
|
||||
int id
|
||||
int session_id
|
||||
int question_id
|
||||
string content
|
||||
float score
|
||||
float time_taken
|
||||
}
|
||||
|
||||
QUESTION_FEEDBACK {
|
||||
int id
|
||||
int question_id
|
||||
int from_user_id
|
||||
int session_id
|
||||
int rating
|
||||
string comment
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
COMPANY ||--o{ USER : has
|
||||
USER ||--o{ CANDIDATE_PROFILE : has
|
||||
COMPANY ||--o{ JOB_POSITION : posts
|
||||
EXAM_POLICY ||--o{ JOB_POSITION : configures
|
||||
JOB_POSITION ||--o{ EXAM_TEMPLATE : uses
|
||||
EXAM_TEMPLATE ||--o{ EXAM_SESSION : instantiates
|
||||
USER ||--o{ EXAM_SESSION : takes
|
||||
EXAM_SESSION ||--o{ ANSWER : contains
|
||||
QUESTION ||--o{ ANSWER : answered_in
|
||||
QUESTION ||--|| QUESTION_STATS : stats
|
||||
QUESTION ||--o{ QUESTION_FEEDBACK : receives
|
||||
USER ||--o{ QUESTION_FEEDBACK : writes
|
||||
BIN
study/courses/pm/report.figs/er.png
Normal file
BIN
study/courses/pm/report.figs/er.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 401 KiB |
31
study/courses/pm/report.figs/sequence.mmd
Normal file
31
study/courses/pm/report.figs/sequence.mmd
Normal file
@@ -0,0 +1,31 @@
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
actor HR as 招聘企业HR
|
||||
participant Web as HR Web前端
|
||||
participant ExamSvc as 考试服务
|
||||
participant QSvc as 试题生成服务
|
||||
participant Cand as 应聘者客户端
|
||||
participant Score as 评分服务
|
||||
participant DB as 数据库
|
||||
|
||||
HR ->> Web: 配置岗位与试题策略
|
||||
Web ->> QSvc: 创建/更新试卷模板
|
||||
QSvc ->> DB: 读取题库与统计数据
|
||||
QSvc -->> Web: 返回模板ID
|
||||
|
||||
HR ->> Web: 发布在线考试
|
||||
|
||||
Cand ->> Cand: 注册 / 登录
|
||||
Cand ->> ExamSvc: 请求领取试卷(jobId, candidateId)
|
||||
ExamSvc ->> QSvc: 实例化个性化试卷(templateId, profile)
|
||||
QSvc -->> ExamSvc: 返回题目列表
|
||||
ExamSvc -->> Cand: 下发试卷内容
|
||||
|
||||
Cand ->> ExamSvc: 提交全部答案
|
||||
ExamSvc ->> Score: 发送作答数据
|
||||
Score ->> DB: 读取标准答案与评分规则
|
||||
Score -->> ExamSvc: 返回评分结果
|
||||
ExamSvc ->> DB: 保存成绩与答案明细
|
||||
|
||||
Cand -->> ExamSvc: 查询成绩与解析
|
||||
ExamSvc -->> Cand: 返回成绩、解析与评价入口
|
||||
BIN
study/courses/pm/report.figs/sequence.png
Normal file
BIN
study/courses/pm/report.figs/sequence.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 195 KiB |
91
study/courses/pm/report.figs/struct.drawio
Normal file
91
study/courses/pm/report.figs/struct.drawio
Normal file
@@ -0,0 +1,91 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.8 Chrome/140.0.7339.240 Electron/38.4.0 Safari/537.36" version="28.2.8">
|
||||
<diagram name="Page-1" id="KaNmNEmE_Qx5MvW_SbqB">
|
||||
<mxGraphModel dx="1009" dy="863" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-61" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#b0e3e6;strokeColor=#0e8088;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="140" width="680" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-57" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="250" width="680" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-56" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fad9d5;strokeColor=#ae4132;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="570" width="680" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-55" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="360" width="680" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-1" value="客户端层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="295" y="175" width="20" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-2" value="接入层&nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="285" width="10" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-3" value="应用服务层&nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="442" width="30" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-4" value="数据层" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="295" y="617.5" width="20" height="35" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-5" value="HR APP 前端<br>Vue / React" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6fffb;strokeColor=#13c2c2;strokeWidth=2;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="165" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-6" value="应聘者 APP<br>Candidate App" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6fffb;strokeColor=#13c2c2;strokeWidth=2;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="165" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-7" value="API Gateway / ALB
HTTPS 终止 + 负载均衡" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff7e6;strokeColor=#fa8c16;strokeWidth=2;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="275" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-8" value="Auth Service
认证授权" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="360" y="380" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-10" value="Question Service
题库管理" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="380" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="40E4A47yQaY0a98WVuZL-11" target="40E4A47yQaY0a98WVuZL-10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-11" value="Exam Service
考试流程管理" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="380" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-12" value="Scoring Service
自动评分" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="490" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-13" value="ML / Recommend
智能选题与评估" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="490" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-15" value="关系型数据库<br>MySQL / PostgreSQL" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff1f0;strokeColor=#f5222d;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="600" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-16" value="Redis 缓存" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff1f0;strokeColor=#f5222d;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="600" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-17" value="S3 对象存储<br>题目附件" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff1f0;strokeColor=#f5222d;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="600" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-18" value="日志 / 分析存储" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff1f0;strokeColor=#f5222d;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="600" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;" edge="1" parent="1" source="40E4A47yQaY0a98WVuZL-11" target="40E4A47yQaY0a98WVuZL-12">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;" edge="1" parent="1" source="40E4A47yQaY0a98WVuZL-10" target="40E4A47yQaY0a98WVuZL-13">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-14" value="Admin Console
运营后台" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="380" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-9" value="Job & Company
岗位与企业管理" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f0f5ff;strokeColor=#2f54eb;strokeWidth=2;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="380" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="40E4A47yQaY0a98WVuZL-62" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="330" y="700" as="sourcePoint" />
|
||||
<mxPoint x="330" y="140" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
60
study/courses/pm/report.figs/struct.mmd
Normal file
60
study/courses/pm/report.figs/struct.mmd
Normal file
@@ -0,0 +1,60 @@
|
||||
flowchart LR
|
||||
%% ======== 样式定义 ========
|
||||
classDef client fill:#e6fffb,stroke:#13c2c2,stroke-width:1px;
|
||||
classDef gateway fill:#fff7e6,stroke:#fa8c16,stroke-width:1px;
|
||||
classDef service fill:#f0f5ff,stroke:#2f54eb,stroke-width:1px;
|
||||
classDef data fill:#fff1f0,stroke:#f5222d,stroke-width:1px;
|
||||
|
||||
%% ======== 客户端层 ========
|
||||
subgraph Clients[客户端层]
|
||||
HRWeb[HR Web 前端<br/>Vue / React]:::client
|
||||
CandApp[应聘者 Web / APP]:::client
|
||||
end
|
||||
|
||||
%% ======== 接入层 ========
|
||||
subgraph Gateway[接入层]
|
||||
Nginx[Nginx 反向代理<br/>HTTPS 终止 + 负载均衡]:::gateway
|
||||
end
|
||||
|
||||
%% ======== 应用服务层 ========
|
||||
subgraph Services[应用服务层]
|
||||
AuthSvc[Auth Service<br/>认证授权]:::service
|
||||
JobSvc[Job & Company Service<br/>岗位与企业管理]:::service
|
||||
QSvc[Question Service<br/>题库管理]:::service
|
||||
ExamSvc[Exam Service<br/>考试流程管理]:::service
|
||||
ScoreSvc[Scoring Service<br/>自动评分]:::service
|
||||
MLSvc[ML / Recommend Service<br/>智能选题与评估]:::service
|
||||
AdminSvc[Admin Console<br/>运营后台]:::service
|
||||
end
|
||||
|
||||
%% ======== 数据层 ========
|
||||
subgraph DataLayer[数据层]
|
||||
DB[(关系型数据库<br/>MySQL / PostgreSQL)]:::data
|
||||
Cache[(Redis 缓存)]:::data
|
||||
ObjStore[(对象存储<br/>题目附件)]:::data
|
||||
LogStore[(日志 / 分析存储)]:::data
|
||||
end
|
||||
|
||||
%% ======== 连接关系 ========
|
||||
HRWeb --> Nginx
|
||||
CandApp --> Nginx
|
||||
|
||||
Nginx --> AuthSvc
|
||||
Nginx --> JobSvc
|
||||
Nginx --> QSvc
|
||||
Nginx --> ExamSvc
|
||||
Nginx --> AdminSvc
|
||||
|
||||
ExamSvc --> ScoreSvc
|
||||
ExamSvc --> QSvc
|
||||
QSvc --> MLSvc
|
||||
|
||||
AuthSvc --> DB
|
||||
JobSvc --> DB
|
||||
QSvc --> DB
|
||||
ExamSvc --> DB
|
||||
ScoreSvc --> DB
|
||||
|
||||
Services --> Cache
|
||||
Services --> ObjStore
|
||||
Services --> LogStore
|
||||
BIN
study/courses/pm/report.figs/struct.png
Normal file
BIN
study/courses/pm/report.figs/struct.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 173 KiB |
85
study/courses/pm/report.figs/use-case.drawio
Normal file
85
study/courses/pm/report.figs/use-case.drawio
Normal file
@@ -0,0 +1,85 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.8 Chrome/140.0.7339.240 Electron/38.4.0 Safari/537.36" version="28.2.8">
|
||||
<diagram name="Page-1" id="page-1">
|
||||
<mxGraphModel dx="706" dy="604" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="6" value="配置岗位需求" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="120" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7" value="配置试题策略" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="180" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9" value="在线答题" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="360" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="10" value="查看成绩与统计" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="240" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="11" value="提交试题反馈" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="300" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="12" value="题库管理与题目淘汰" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="430" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="13" value="企业接入与运营配置" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;fontColor=#232F3E;fontSize=12;strokeColor=#3399FF;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="490" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="14" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="6" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="15" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="7" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="16" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="17" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-22" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="170" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="18" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="9" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="19" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="20" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-23" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="650" y="180" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="21" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-27" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="410" y="490" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="22" style="endArrow=none;html=1;rounded=0;strokeColor=#232F3E;strokeWidth=2;exitX=0.5;exitY=0.5;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="dYsEw_TpROWio0KKOCtD-27" target="13" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="410" y="490" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-22" value="招聘企业 HR" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;strokeColor=#BD7000;fontColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="130" y="210" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-23" value="应聘者" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="295" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dYsEw_TpROWio0KKOCtD-27" value="平台管理员" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="450" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
47
study/courses/pm/report.figs/use-case.mmd
Normal file
47
study/courses/pm/report.figs/use-case.mmd
Normal file
@@ -0,0 +1,47 @@
|
||||
graph LR
|
||||
%% ======== 样式定义 ========
|
||||
classDef actor fill:#fff7e6,stroke:#fa8c16,stroke-width:1px;
|
||||
classDef system fill:#f0f5ff,stroke:#2f54eb,stroke-width:1px;
|
||||
classDef usecase fill:#ffffff,stroke:#595959,stroke-width:1px,rx:20,ry:20;
|
||||
|
||||
%% ======== 系统边界 ========
|
||||
System[招聘试题定制平台]:::system
|
||||
|
||||
%% ======== 参与者(Actors) ========
|
||||
HR(招聘企业 HR):::actor
|
||||
Candidate(应聘者):::actor
|
||||
Admin(平台管理员):::actor
|
||||
|
||||
%% ======== 用例(Use Cases) ========
|
||||
UC_ConfigJob(配置岗位需求):::usecase
|
||||
UC_ConfigPolicy(配置试题策略):::usecase
|
||||
UC_GenerateExam(自动生成试卷):::usecase
|
||||
UC_TakeExam(在线答题):::usecase
|
||||
UC_ViewResult(查看成绩与统计):::usecase
|
||||
UC_Feedback(提交试题反馈):::usecase
|
||||
UC_ManageBank(题库管理与题目淘汰):::usecase
|
||||
UC_ManageTenant(企业接入与运营配置):::usecase
|
||||
|
||||
%% ======== 系统与用例关系 ========
|
||||
System --- UC_ConfigJob
|
||||
System --- UC_ConfigPolicy
|
||||
System --- UC_GenerateExam
|
||||
System --- UC_TakeExam
|
||||
System --- UC_ViewResult
|
||||
System --- UC_Feedback
|
||||
System --- UC_ManageBank
|
||||
System --- UC_ManageTenant
|
||||
|
||||
%% ======== Actor 与 Use Case 关系 ========
|
||||
HR --- UC_ConfigJob
|
||||
HR --- UC_ConfigPolicy
|
||||
HR --- UC_ViewResult
|
||||
HR --- UC_Feedback
|
||||
|
||||
Candidate --- UC_TakeExam
|
||||
Candidate --- UC_ViewResult
|
||||
Candidate --- UC_Feedback
|
||||
|
||||
Admin --- UC_ManageBank
|
||||
Admin --- UC_ManageTenant
|
||||
|
||||
BIN
study/courses/pm/report.figs/use-case.png
Normal file
BIN
study/courses/pm/report.figs/use-case.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 162 KiB |
Reference in New Issue
Block a user