先更新1版记录下
This commit is contained in:
@@ -1,77 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:41:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="ctx-er" name="ER图">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="00 组织与权限上下文 - ER图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="450" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="统一隔离键:adcode / tenant_id / tenant_path / dept_id / dept_path" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="720" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="tb_sys_tenant<br>PK tenant_id<br>FK parent_tenant_id -> tb_sys_tenant.tenant_id<br>tenant_name, tenant_type, status<br>adcode, tenant_path, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="120" width="280" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="tb_sys_dept<br>PK dept_id<br>FK parent_dept_id -> tb_sys_dept.dept_id<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>dept_name, dept_type<br>adcode, tenant_path, dept_path, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="360" y="120" width="300" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="tb_sys_user<br>PK user_id, UK username<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>FK dept_id -> tb_sys_dept.dept_id<br>display_name, password_hash, status<br>adcode, tenant_path, dept_path, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="700" y="120" width="320" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="tb_sys_role<br>PK role_id, UK role_code<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>role_name<br>dept_id, dept_path, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="700" y="320" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="tb_sys_permission<br>PK permission_id, UK permission_code<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>permission_name<br>dept_id, dept_path, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1030" y="320" width="320" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="rel_user_role<br>PK (user_id, role_id)<br>FK user_id -> tb_sys_user.user_id<br>FK role_id -> tb_sys_role.role_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1030" y="120" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="rel_role_permission<br>PK (role_id, permission_id)<br>FK role_id -> tb_sys_role.role_id<br>FK permission_id -> tb_sys_permission.permission_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1360" y="120" width="320" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="tb_auth_refresh_token<br>PK token_id<br>FK user_id -> tb_sys_user.user_id<br>refresh_token, expire_at, revoked<br>tenant_id, dept_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="330" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="tb_auth_login_audit<br>PK audit_id<br>FK user_id -> tb_sys_user.user_id<br>username, login_ip, login_status<br>tenant_id, dept_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="360" y="330" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="设计方法与原因<br>1) DDD上下文先行:权限域作为业务域前置依赖<br>2) RBAC最小闭环:用户-角色-权限拆分降低耦合<br>3) 多租户统一隔离键:保证后续业务表可水平扩展<br>4) 认证审计分离:令牌高频写与审计查询分流" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1360" y="320" width="320" height="170" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" parent="1" source="11" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="101" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" parent="1" source="12" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="102" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" parent="1" source="12" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="103" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#9673a6;" parent="1" source="13" target="10" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="104" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" parent="1" source="15" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="105" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" parent="1" source="15" target="13" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="106" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" parent="1" source="16" target="13" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="107" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" parent="1" source="16" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="108" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" parent="1" source="17" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="109" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" parent="1" source="18" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="ctx-er-v2" name="ER图">
|
||||
<mxGraphModel dx="1312" dy="773" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="00 组织与权限上下文 - ER图(含班级模型)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="620" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="全局技术栈对齐:业务主数据落 PostgreSQL;AI知识检索能力由 Milvus + NebulaGraph/Neo4j 承担;同步调度统一采用 REST/JAR(本模块仅维护组织权限)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1400" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="upms.tb_sys_tenant<br>PK tenant_id<br>parent_tenant_id, tenant_name, tenant_type<br>adcode, tenant_path, status" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="90" width="280" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="upms.tb_sys_dept<br>PK dept_id<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>parent_dept_id, dept_name, dept_type<br>adcode, tenant_path, dept_path" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="360" y="90" width="320" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="upms.tb_sys_user<br>PK user_id, UK username<br>FK tenant_id -> tb_sys_tenant.tenant_id<br>FK dept_id -> tb_sys_dept.dept_id<br>display_name, status, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="730" y="90" width="340" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="upms.tb_sys_role<br>PK role_id, UK role_code<br>tenant_id, role_name, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="1110" y="90" width="280" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="upms.tb_sys_menu<br>PK route_id<br>parent_route_id, route_path, component_key<br>permission_code, hidden, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="1430" y="90" width="320" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="upms.tb_sys_role_menu<br>PK (role_id, route_id)<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1430" y="260" width="300" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="auth.tb_auth_refresh_token<br>PK token_id<br>FK user_id -> tb_sys_user.user_id<br>refresh_token, expire_at, revoked" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="290" width="320" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="auth.tb_auth_login_audit<br>PK audit_id<br>FK user_id -> tb_sys_user.user_id<br>username, login_ip, login_status" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="290" width="320" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="upms.tb_school_class<br>PK class_id<br>FK dept_id -> tb_sys_dept.dept_id<br>class_name, grade_code, status<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="760" y="290" width="340" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="upms.tb_school_class_member<br>PK (class_id, user_id)<br>FK class_id -> tb_school_class.class_id<br>FK user_id -> tb_sys_user.user_id<br>member_role, member_status, joined_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1140" y="450" width="350" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="upms.tb_school_class_course_rel<br>PK (class_id, course_id)<br>FK class_id -> tb_school_class.class_id<br>relation_status, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1530" y="390" width="320" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="30" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=1;exitY=0.35;entryX=0;entryY=0.35;" parent="1" source="10" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="31" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=1;exitY=0;entryX=0;entryY=0;" parent="1" source="10" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="700" y="70"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="32" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=0.6;exitY=1;entryX=0.4;entryY=0;" parent="1" source="13" target="15" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="33" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=0.4;exitY=1;entryX=0.6;entryY=0;" parent="1" source="14" target="15" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="34" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=0;exitY=0.7;entryX=1;entryY=0.35;" parent="1" source="12" target="16" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="35" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=0;exitY=0.85;entryX=1;entryY=0.45;" parent="1" source="12" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="36" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=1;exitY=0.8;entryX=0;entryY=0.4;" parent="1" source="11" target="18" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="37" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=1;exitY=0.6;entryX=0;entryY=0.4;" parent="1" source="18" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="38" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;exitX=1;exitY=0.85;entryX=0;entryY=0.2;" parent="1" source="18" target="20" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
<mxCell id="2" value="00 组织与权限上下文 - 对象类数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="520" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="本模块边界说明:仅承载组织/权限与认证;AI 图谱与向量同步任务由 ai 模块统一调度(REST/JAR),目标存储为 Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1200" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="120" width="120" height="70" as="geometry"/>
|
||||
</mxCell>
|
||||
@@ -38,7 +41,7 @@
|
||||
<mxCell id="41" value="Entity<br>TenantDeptAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="820" y="210" width="200" height="70" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="42" value="Entity<br>RolePermissionAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxCell id="42" value="Entity<br>RoleMenuAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="820" y="310" width="200" height="70" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="43" value="Entity<br>AuthTokenStore" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
@@ -50,7 +53,7 @@
|
||||
<mxCell id="51" value="Redis(Session/Token)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1090" y="320" width="220" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) BCE分层明确交互职责<br>2) 鉴权与查询控制器分离,便于独立扩展<br>3) 权限判定集中到Policy服务,降低重复逻辑<br>4) Token热数据落Redis,用户组织主数据落PG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxCell id="60" value="设计方法与原因<br>1) BCE分层明确交互职责<br>2) 鉴权与查询控制器分离,便于独立扩展<br>3) 菜单授权判定集中到Policy服务,降低重复逻辑<br>4) Token热数据落Redis,用户组织主数据落PG<br>5) AI同步调度配置通过权限体系统一管控" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1360" y="190" width="360" height="180" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="登录/路由请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
@@ -61,7 +64,7 @@
|
||||
<mxCell id="105" value="权限判定" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="31" target="32" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="用户读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="30" target="40" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="组织读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="31" target="41" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="角色权限读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="32" target="42" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="角色菜单读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="32" target="42" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="109" value="Token签发/撤销" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="30" target="43" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="110" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="40" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="111" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="41" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
@@ -1,64 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:42:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="course-er" name="ER图">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="01 课程学习 - ER图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="360" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="课程主数据 + 学习过程数据分层;所有业务主表均携带 tenant_id/adcode/dept_path" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="860" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="cl_course<br>PK course_id<br>title, subject_code, grade_code<br>difficulty_level, status<br>tenant_id, adcode, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="120" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="cl_course_chapter<br>PK chapter_id<br>FK course_id -> cl_course.course_id<br>chapter_no, chapter_title<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="330" y="120" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="cl_course_lesson<br>PK lesson_id<br>FK chapter_id -> cl_course_chapter.chapter_id<br>lesson_no, lesson_title, duration_sec<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="620" y="120" width="270" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="cl_knowledge_point<br>PK kp_id<br>kp_code, kp_name, subject_code, grade_code<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="120" width="260" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="cl_course_knowledge_rel<br>PK (course_id, kp_id)<br>FK course_id -> cl_course.course_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1230" y="120" width="280" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="cl_course_resource<br>PK resource_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>resource_type(pdf/video/doc), resource_url<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="620" y="290" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="cl_course_tag<br>PK tag_id<br>tag_name, tag_type<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="300" width="230" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="cl_course_tag_rel<br>PK (course_id, tag_id)<br>FK course_id -> cl_course.course_id<br>FK tag_id -> cl_course_tag.tag_id<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="300" y="300" width="270" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="cl_learning_session<br>PK session_id<br>FK user_id -> tb_sys_user.user_id<br>FK course_id -> cl_course.course_id<br>status(STARTED/PAUSED/COMPLETED)<br>started_at, ended_at, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="290" width="300" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="cl_learning_progress<br>PK progress_id<br>FK session_id -> cl_learning_session.session_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>progress_pct, last_position_sec<br>mastery_level, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1260" y="300" width="320" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="cl_learning_event<br>PK event_id<br>FK session_id -> cl_learning_session.session_id<br>event_type(start/pause/seek/finish)<br>event_time, payload_json, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="460" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="设计方法与原因<br>1) 聚合根:Course / LearningSession<br>2) 状态机:Session状态驱动进度写入<br>3) 标签与知识点解耦,支持多维检索<br>4) 事件明细单表追加,兼顾审计与回放" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="470" width="840" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="11" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="12" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="102" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="15" target="12" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="103" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="14" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="104" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="14" target="13" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="105" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="16" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="18" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="109" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="12" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="110" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="20" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="course-er" name="ER图">
|
||||
<mxGraphModel dx="1312" dy="773" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="01 课程学习 - ER图(含知识点掌握与图谱/向量同步关联)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="360" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="课程主数据 + 学习过程数据分层;业务主库为 PostgreSQL,知识检索能力由 Milvus + NebulaGraph/Neo4j 承担" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1100" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="cl_course<br>PK course_id<br>title, subject_code, grade_code<br>difficulty_level, status<br>tenant_id, adcode, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="130" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="cl_course_lesson<br>PK lesson_id<br>FK chapter_id -> cl_course_chapter.chapter_id<br>lesson_no, lesson_title, duration_sec<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="650" y="300" width="270" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="cl_knowledge_point<br>PK kp_id<br>kp_code, kp_name, subject_code, grade_code<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="1030" y="10" width="260" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="cl_course_knowledge_rel<br>PK (course_id, kp_id)<br>FK course_id -> cl_course.course_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1680" y="190" width="280" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="cl_course_resource<br>PK resource_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>resource_type(pdf/video/doc), resource_url<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="640" y="560" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="cl_course_tag<br>PK tag_id<br>tag_name, tag_type<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="420" width="230" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="cl_course_tag_rel<br>PK (course_id, tag_id)<br>FK course_id -> cl_course.course_id<br>FK tag_id -> cl_course_tag.tag_id<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="330" y="410" width="270" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="cl_learning_session<br>PK session_id<br>FK user_id -> tb_sys_user.user_id<br>FK course_id -> cl_course.course_id<br>status(STARTED/PAUSED/COMPLETED)<br>started_at, ended_at, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="450" width="300" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="cl_learning_progress<br>PK progress_id<br>FK session_id -> cl_learning_session.session_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>progress_pct, last_position_sec<br>mastery_level, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1880" y="295" width="320" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="cl_learning_event<br>PK event_id<br>FK session_id -> cl_learning_session.session_id<br>event_type(start/pause/seek/finish)<br>event_time, payload_json, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="750" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="设计方法与原因<br>1) 聚合根:Course / LearningSession<br>2) 状态机:Session状态驱动进度写入<br>3) 标签与知识点解耦,支持多维检索<br>4) 事件明细单表追加,兼顾审计与回放<br>5) 知识点/学习画像变化可通过 ai.tb_ai_knowledge_sync_task 异步同步" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="10" y="850" width="840" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" value="外部同步依赖(ai)<br>ai.tb_ai_knowledge_file<br>ai.tb_ai_knowledge_sync_task<br>ai.tb_ai_graph_entity / ai.tb_ai_graph_relation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="760" width="330" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="23" value="cl_kp_prerequisite_rel<br>PK (kp_id, pre_kp_id)<br>FK kp_id -> cl_knowledge_point.kp_id<br>FK pre_kp_id -> cl_knowledge_point.kp_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="150" width="340" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="24" value="cl_kp_material_rel<br>PK (kp_id, resource_id)<br>FK kp_id -> cl_knowledge_point.kp_id<br>FK resource_id -> cl_course_resource.resource_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1350" y="565" width="360" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="25" value="cl_student_kp_mastery<br>PK mastery_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>student_id, mastery_level, mastery_score<br>last_practiced_at, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="420" width="360" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="102" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="12" target="15" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="103" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="104" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="105" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="106" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="16" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="107" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="18" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="108" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="18" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="109" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="12" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="110" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="18" target="20" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="112" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="23" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="113" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="24" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="114" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="15" target="24" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="115" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="25" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="116" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="19" target="25" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="cl_course_chapter<br>PK chapter_id<br>FK course_id -> cl_course.course_id<br>chapter_no, chapter_title<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="340" y="240" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
<mxCell id="2" value="01 课程学习 - 对象类数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="460" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="知识点/学习进度相关事件可入 ai 同步任务表,由调度器以 REST/JAR 模式驱动向 Milvus + NebulaGraph/Neo4j 同步" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1300" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="130" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="Actor<br>教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="240" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="12" value="Actor<br>机构管理员" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="40" y="350" width="120" height="70" as="geometry"/></mxCell>
|
||||
@@ -20,9 +23,12 @@
|
||||
<mxCell id="41" value="Entity<br>KnowledgeIndexAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="210" width="220" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="42" value="Entity<br>LearningSessionAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="310" width="230" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="43" value="Entity<br>LearningProgressAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="410" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="44" value="Entity<br>AiSyncTaskAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="510" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(course/learning)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="170" width="240" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="51" value="Redis(学习进度热点缓存)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="320" width="240" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) CQRS:课程目录读取与学习进度写入分离<br>2) 会话聚合驱动事件化进度更新<br>3) 热点进度走Redis,减轻主库读压<br>4) 课程实体与知识点索引分离,支持后续多策略检索" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxCell id="52" value="PostgreSQL(ai sync task/config)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="470" width="260" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="53" value="Milvus + NebulaGraph/Neo4j" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="620" width="260" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) CQRS:课程目录读取与学习进度写入分离<br>2) 会话聚合驱动事件化进度更新<br>3) 热点进度走Redis,减轻主库读压<br>4) 课程实体与知识点索引分离,支持后续多策略检索<br>5) 同步调度支持 JAR 本地执行与 REST 远程触发" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1360" y="170" width="360" height="190" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="浏览课程/课时" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
@@ -40,6 +46,9 @@
|
||||
<mxCell id="112" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="42" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="113" value="持久化/缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="114" value="热点缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="51" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="115" value="同步任务入队" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="32" target="44" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="116" value="落库" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="44" target="52" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="117" value="REST/JAR调度执行" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="44" target="53" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
@@ -1,38 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:43:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="homework-er" name="ER图">
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-15T07:43:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="homework-er-v2" name="ER图">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="02 习题与作业 - ER图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="400" height="30" as="geometry"/>
|
||||
<mxCell id="2" value="02 习题与作业 - ER图(question单schema:10_create + 20_init)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="520" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="hw_question_bank<br>PK bank_id<br>bank_name, subject_code, grade_code<br>status, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="110" width="240" height="120" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="hw_question_item<br>PK question_id<br>FK bank_id -> hw_question_bank.bank_id<br>question_type, stem, difficulty<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="310" y="110" width="270" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="12" value="hw_question_version<br>PK version_id<br>FK question_id -> hw_question_item.question_id<br>version_no, answer_key, analysis<br>is_current, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="610" y="110" width="280" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="13" value="hw_question_kp_rel<br>PK (question_id, kp_id)<br>FK question_id -> hw_question_item.question_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="920" y="110" width="280" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="14" value="hw_paper<br>PK paper_id<br>paper_name, subject_code, total_score<br>tenant_id, created_by, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="40" y="290" width="240" height="120" as="geometry"/></mxCell>
|
||||
<mxCell id="15" value="hw_paper_question<br>PK (paper_id, question_id)<br>FK paper_id -> hw_paper.paper_id<br>FK question_id -> hw_question_item.question_id<br>question_order, score, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="310" y="290" width="300" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="16" value="hw_assignment<br>PK assignment_id<br>FK paper_id -> hw_paper.paper_id<br>title, publish_time, deadline<br>status(DRAFT/PUBLISHED/CLOSED)<br>tenant_id, created_by" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="640" y="290" width="300" height="150" as="geometry"/></mxCell>
|
||||
<mxCell id="17" value="hw_assignment_target<br>PK target_id<br>FK assignment_id -> hw_assignment.assignment_id<br>target_type(class/student)<br>target_ref_id, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="970" y="290" width="280" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="18" value="hw_submission<br>PK submission_id<br>FK assignment_id -> hw_assignment.assignment_id<br>FK student_id -> tb_sys_user.user_id<br>submit_time, used_seconds<br>status(SUBMITTED/RESUBMITTED)<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="1280" y="290" width="330" height="150" as="geometry"/></mxCell>
|
||||
<mxCell id="19" value="hw_submission_answer<br>PK answer_id<br>FK submission_id -> hw_submission.submission_id<br>FK question_id -> hw_question_item.question_id<br>answer_content, answer_type, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="1280" y="470" width="330" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="20" value="hw_submission_attachment<br>PK attachment_id<br>FK submission_id -> hw_submission.submission_id<br>file_type, object_key, file_hash<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="920" y="470" width="330" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="21" value="设计方法与原因<br>1) 题目版本化:保障历史作业可追溯<br>2) 试卷与作业分离:一份试卷可多次发布<br>3) 发布对象独立表:支持按班级/学员精细投放<br>4) 提交主表+答案明细:便于后续批改并行处理" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="470" width="840" height="130" as="geometry"/>
|
||||
<mxCell id="3" value="说明:question 目录仅保留 2 个 SQL 文件(10_create_question_tables.sql / 20_init_question_seed.sql)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1100" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="11" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="12" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="102" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="13" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="103" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="15" target="14" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="104" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="15" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="105" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="16" target="14" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="16" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="18" target="16" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="109" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="110" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="20" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="10" value="question.hw_question_bank<br>PK bank_id<br>bank_name, subject_code, grade_code, status<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="90" width="270" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="question.hw_question_item<br>PK question_id<br>FK bank_id -> hw_question_bank.bank_id<br>question_type, stem, stem_json, difficulty<br>answer_payload, analysis, scoring_rule_json<br>question_status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="350" y="80" width="380" height="170" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="question.hw_question_kp_rel<br>PK (question_id, kp_id)<br>FK question_id -> hw_question_item.question_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>relation_type, confidence, graph_relation_id, source_table/source_pk<br>tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="780" y="90" width="320" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="外部同步依赖(ai)<br>ai.tb_ai_knowledge_file<br>ai.tb_ai_knowledge_sync_task<br>ai.tb_ai_graph_entity / ai.tb_ai_graph_relation<br>Target: Milvus + NebulaGraph/Neo4j" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="890" width="370" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="question.hw_paper<br>PK paper_id<br>paper_name, subject_code, total_score<br>grading_policy_json<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="300" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="question.hw_paper_question<br>PK (paper_id, question_id)<br>question_order, score, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="320" width="310" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="question.hw_assignment<br>PK assignment_id<br>FK paper_id -> hw_paper.paper_id<br>title, publish_time, deadline, status<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="740" y="300" width="340" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="question.hw_assignment_target<br>PK target_id<br>FK assignment_id -> hw_assignment.assignment_id<br>target_type, target_ref_id, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1130" y="300" width="320" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="question.hw_submission<br>PK submission_id<br>FK assignment_id -> hw_assignment.assignment_id<br>FK student_id -> tb_sys_user.user_id<br>submit_time, used_seconds, status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="740" y="500" width="360" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="question.hw_submission_answer<br>PK answer_id<br>FK submission_id -> hw_submission.submission_id<br>FK question_id -> hw_question_item.question_id<br>answer_type, answer_payload<br>file_id, file_type, tenant_id<br>UK (submission_id, question_id)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="1140" y="500" width="390" height="170" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="upms.tb_sys_file<br>PK file_id<br>media_type, object_key, file_hash<br>uploaded_by, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1140" y="730" width="320" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="30" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="31" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="12" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="32" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="14" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="33" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="14" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="34" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="15" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="35" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="15" target="16" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="36" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="15" target="17" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="37" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="17" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="38" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="19" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
@@ -5,24 +5,30 @@
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="02 习题与作业 - 对象类数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxCell id="2" value="02 习题与作业 - 对象类数据流图(question单schema)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="500" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="question 仅 10/20 两个 SQL;提交成功后除 MQ 事件外,同步写入 ai 任务表,通过 REST/JAR 调度同步到 Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1400" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Actor<br>教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="150" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="300" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="20" value="Boundary<br>TeacherHomeworkBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="130" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="21" value="Boundary<br>StudentHomeworkBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="280" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="20" value="Boundary<br>TeacherQuestionBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="130" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="21" value="Boundary<br>StudentQuestionBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="280" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="30" value="Control<br>QuestionBankService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="90" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="31" value="Control<br>AssignmentPublishService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="200" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="32" value="Control<br>HomeworkQueryService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="310" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="32" value="Control<br>QuestionQueryService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="310" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="33" value="Control<br>SubmissionService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="420" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="40" value="Entity<br>QuestionBankAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="810" y="90" width="220" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="41" value="Entity<br>AssignmentAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="810" y="200" width="220" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="42" value="Entity<br>AssignmentTargetAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="810" y="300" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="43" value="Entity<br>SubmissionAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="810" y="410" width="220" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(question/homework)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="170" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="44" value="Entity<br>AiSyncTaskAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="810" y="520" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(question)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="170" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="51" value="ObjectStorage(附件/图片/PDF)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="320" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="52" value="MQ(SubmissionCreatedEvent)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="450" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="53" value="PostgreSQL(ai sync task/config)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="580" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="54" value="Milvus + NebulaGraph/Neo4j" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="710" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) 发布链路与作答链路拆分,降低接口复杂度<br>2) 提交成功后发事件,解耦后续批改流程<br>3) 附件文件与答案结构分存,便于扩展多题型<br>4) 题库聚合与作业聚合分离,支持独立演进" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1380" y="200" width="330" height="190" as="geometry"/>
|
||||
</mxCell>
|
||||
@@ -41,6 +47,9 @@
|
||||
<mxCell id="112" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="113" value="附件存储" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="51" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="114" value="异步事件" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="52" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="115" value="同步任务入队" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="33" target="44" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="116" value="落库" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="44" target="53" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="117" value="REST/JAR调度执行" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="44" target="54" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
@@ -1,35 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:44:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="grading-er" name="ER图">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="03 批改与反馈 - ER图(不含AI实现细节)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="560" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="gd_grading_task<br>PK grading_task_id<br>FK submission_id -> hw_submission.submission_id<br>status(PENDING/RUNNING/WAIT_REVIEW/DONE)<br>trigger_source, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="120" width="330" height="140" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="gd_grading_rule_set<br>PK rule_set_id<br>rule_version, subject_code, objective_policy<br>subjective_policy(manual_first)<br>tenant_id, enabled" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="400" y="120" width="320" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="12" value="gd_objective_score<br>PK objective_score_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>FK answer_id -> hw_submission_answer.answer_id<br>score, matched_rule, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="750" y="120" width="340" height="140" as="geometry"/></mxCell>
|
||||
<mxCell id="13" value="gd_subjective_review<br>PK review_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>FK answer_id -> hw_submission_answer.answer_id<br>reviewer_id, review_score, status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="1120" y="120" width="350" height="140" as="geometry"/></mxCell>
|
||||
<mxCell id="14" value="gd_score_summary<br>PK summary_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>total_score, grade_level(A/B/C)<br>surpass_ratio, used_seconds, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="40" y="300" width="330" height="140" as="geometry"/></mxCell>
|
||||
<mxCell id="15" value="gd_error_tag<br>PK error_tag_id<br>tag_code, tag_name<br>category(审题/计算/概念)<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="400" y="300" width="300" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="16" value="gd_answer_error_rel<br>PK (answer_id, error_tag_id)<br>FK answer_id -> hw_submission_answer.answer_id<br>FK error_tag_id -> gd_error_tag.error_tag_id<br>confidence, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="730" y="300" width="330" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="17" value="gd_wrong_question<br>PK wrong_question_id<br>FK student_id -> tb_sys_user.user_id<br>FK question_id -> hw_question_item.question_id<br>source_submission_id, mastery_status<br>review_count, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="1090" y="300" width="350" height="150" as="geometry"/></mxCell>
|
||||
<mxCell id="18" value="gd_review_plan<br>PK review_plan_id<br>FK wrong_question_id -> gd_wrong_question.wrong_question_id<br>plan_date, plan_stage(E1/E2/E3)<br>status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="490" width="330" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="19" value="gd_teacher_comment<br>PK comment_id<br>FK review_id -> gd_subjective_review.review_id<br>comment_type(text/voice), content_ref<br>reviewer_id, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="400" y="490" width="340" height="130" as="geometry"/></mxCell>
|
||||
<mxCell id="20" value="设计方法与原因<br>1) 批改任务聚合承接状态机,保证流程一致性<br>2) 客观分与主观复核拆表,支持并行与补录<br>3) 错因标签与错题沉淀解耦,便于策略演进<br>4) 仅保留 GradingEnginePort 抽象,不绑定AI实现" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="780" y="500" width="660" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="12" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="102" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="13" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="103" value="1:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="14" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="104" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="16" target="15" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="105" value="衍生" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="14" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="18" target="17" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="13" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="grading-er-v2" name="ER图">
|
||||
<mxGraphModel dx="1312" dy="773" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="03 批改与反馈 - ER图(question单schema,含知识点分析与AI同步)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="560" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="说明:批改与反馈表统一在 question/10_create_question_tables.sql 中定义" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="900" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="question.gd_grading_task<br>PK grading_task_id<br>FK submission_id -> hw_submission.submission_id<br>paper_id, task_status, trigger_source<br>tenant_id, created_at, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="25" y="110" width="330" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="question.gd_answer_grade<br>PK answer_grade_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>FK answer_id -> hw_submission_answer.answer_id<br>grade_mode, grade_status, score, grader_id<br>evidence_json, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="420" y="90" width="360" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="question.gd_score_summary<br>PK summary_id<br>UK grading_task_id -> gd_grading_task.grading_task_id<br>total_score, grade_level, surpass_ratio, used_seconds<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="830" y="90" width="340" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="question.gd_error_tag<br>PK error_tag_id<br>tag_code, tag_name, category<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="300" width="300" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="question.gd_answer_error_rel<br>PK (answer_id, error_tag_id)<br>FK answer_id -> hw_submission_answer.answer_id<br>FK error_tag_id -> gd_error_tag.error_tag_id<br>confidence, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="390" y="300" width="350" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="question.gd_wrong_question<br>PK wrong_question_id<br>student_id, question_id, source_submission_id<br>mastery_status, review_count<br>tenant_id, created_at, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="790" y="290" width="350" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="question.gd_review_plan<br>PK review_plan_id<br>FK wrong_question_id -> gd_wrong_question.wrong_question_id<br>plan_date, plan_stage, plan_status<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1190" y="290" width="340" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="question.gd_teacher_comment<br>PK comment_id<br>FK answer_grade_id -> gd_answer_grade.answer_grade_id<br>reviewer_id, comment_type, content_ref<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="420" y="480" width="350" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="question.gd_explanation_submission<br>PK explanation_id<br>student_id, wrong_question_id, source_answer_id<br>audio_file_id, transcript_text, submission_status<br>tenant_id, created_at, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="500" width="340" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="question.gd_explanation_assessment<br>PK assessment_id<br>UK explanation_id -> gd_explanation_submission.explanation_id<br>evaluator_type, total_score, pass_status<br>improvement_suggestion, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="830" y="500" width="360" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="question.gd_explanation_dimension_score<br>PK dimension_score_id<br>FK assessment_id -> gd_explanation_assessment.assessment_id<br>dimension_code, dimension_name<br>score, weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1240" y="500" width="340" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="23" value="question.gd_answer_kp_analysis<br>PK analysis_id<br>FK answer_id -> hw_submission_answer.answer_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>correctness, mastery_score, confidence<br>evidence_json, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="1240" y="90" width="360" height="160" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="upms.tb_sys_message<br>PK message_id<br>message_type, biz_type, content_object_id<br>web_jump_url, tenant_id, send_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="710" width="330" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" value="upms.tb_sys_message_recipient<br>PK (message_id, recipient_user_id)<br>FK message_id -> tb_sys_message.message_id<br>read_status, read_at, clicked_at<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="430" y="710" width="360" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="24" value="外部同步依赖(ai)<br>ai.tb_ai_knowledge_file<br>ai.tb_ai_knowledge_sync_task<br>ai.tb_ai_graph_entity / ai.tb_ai_graph_relation<br>Target: Milvus + NebulaGraph/Neo4j" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="820" y="710" width="360" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="30" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="31" value="1:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="32" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="33" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="12" target="15" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="34" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="15" target="16" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="35" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="36" value="1:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="18" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="37" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="19" target="20" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="38" value="触发通知" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="21" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="39" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="21" target="22" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="40" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="23" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -5,27 +5,36 @@
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="03 批改与反馈 - 对象类数据流图(规则批改 + 教师复核)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxCell id="2" value="03 批改与反馈 - 对象类数据流图(question单schema)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="700" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="批改结果会触发知识点分析同步任务;调度器支持 REST/JAR 两种模式(JAR 本地执行 + REST 远程触发),目标为 Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1400" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="150" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="Actor<br>教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="300" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="20" value="Boundary<br>StudentResultBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="140" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="21" value="Boundary<br>TeacherReviewBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="290" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="22" value="Boundary<br>MessageInboxBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="230" y="640" width="220" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="30" value="Control<br>GradingDispatcher" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="80" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="31" value="Control<br>ObjectiveScoringService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="190" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="32" value="Control<br>ReviewWorkflowService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="300" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="33" value="Control<br>WrongBookService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="410" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="34" value="Control<br>ReviewPlannerService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="520" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="36" value="Control<br>SiteMessageService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="520" y="640" width="220" height="80" as="geometry"/></mxCell>
|
||||
<mxCell id="35" value="Port<br>GradingEnginePort<br>(当前规则实现 RuleBasedEngine)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="80" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="40" value="Entity<br>GradingTaskAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="210" width="230" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="41" value="Entity<br>ObjectiveScoreAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="310" width="230" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="42" value="Entity<br>SubjectiveReviewAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="410" width="250" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="43" value="Entity<br>WrongQuestionAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="510" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(grading/wrongbook)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="230" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="44" value="Entity<br>SiteMessageAggregate<br>message_id, biz_type<br>content_object_id, web_jump_url" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="780" y="640" width="270" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(question + ai sync task)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="230" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="51" value="Redis(结果缓存/待复核队列)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="370" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="52" value="MQ(GradingCompletedEvent)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="510" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) 批改调度、判分、复核、错题沉淀分控制器,职责清晰<br>2) 通过 Port 抽象引擎实现,后续可无缝接入AI或外部服务<br>3) 结果完成后事件化通知,支撑复习计划与消息触达<br>4) 主流程先保障规则可用,再逐步增强智能能力" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxCell id="53" value="PostgreSQL(upms.site_message / recipient)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="650" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="54" value="Redis(未读计数缓存)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="770" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="55" value="Milvus + NebulaGraph/Neo4j" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="890" width="250" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) 批改调度、判分、复核、错题沉淀分控制器,职责清晰<br>2) 通过 Port 抽象引擎实现,后续可无缝接入AI或外部服务<br>3) 主观题待审阅由站内信服务落库(含content_object_id和web_jump_url)<br>4) 教师通过收件箱点击跳转到对应审阅页,链路可追踪可回执" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1380" y="230" width="330" height="220" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="查看批改结果" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
@@ -46,6 +55,16 @@
|
||||
<mxCell id="115" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="116" value="待复核缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="42" target="51" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="117" value="完成事件" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="34" target="52" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="118" value="查看站内信" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="11" target="22" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="119" value="待审阅通知触发" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="32" target="36" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="120" value="复习提醒通知触发" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="34" target="36" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="121" value="生成站内信" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="36" target="44" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="122" value="消息落库" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="44" target="53" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="123" value="未读计数缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="44" target="54" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="124" value="已读/点击回执" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="22" target="36" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="125" value="点击消息跳转审阅页" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="22" target="21" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="126" value="返回跳转参数(messageId/objectId/url)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="36" target="22" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="127" value="同步任务执行" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="34" target="55" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
259
docs/architecture/完整业务流程图.drawio
Normal file
259
docs/architecture/完整业务流程图.drawio
Normal file
@@ -0,0 +1,259 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="full-business-flow-v3" name="完整业务流程图">
|
||||
<mxGraphModel dx="2300" dy="1500" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="5600" pageHeight="2300" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="AI智能学习系统完整业务流程图(教学业务主线 + 学习闭环 + 管理审计)
版本:模块上色 + 数据实体标注(schema.table)+ 图谱/向量同步链路(Milvus + NebulaGraph/Neo4j)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=20;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="20" width="1500" height="46" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="90" value="模块色卡(与 SQL schema 对齐)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="2550" y="20" width="300" height="34" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="91" value="course" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="2550" y="62" width="92" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="92" value="homework" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="2650" y="62" width="92" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="93" value="grading" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="2750" y="62" width="92" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="94" value="ai" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="2850" y="62" width="92" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="95" value="recommendation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="2950" y="62" width="120" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="96" value="achievement" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="3080" y="62" width="110" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="97" value="upms/运营" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="3200" y="62" width="110" height="28" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="教师主线" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="110" width="5400" height="220" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="学生主线" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="360" width="5400" height="260" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="AI/系统主线" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="660" width="5400" height="620" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="管理运营主线" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="1320" width="5400" height="300" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="开始" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="70" y="470" width="110" height="64" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="30" value="教师创建课程
course.cl_course" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="200" y="170" width="220" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="31" value="课程绑定知识点
course.cl_course_knowledge_rel
course.cl_knowledge_point" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="450" y="160" width="250" height="96" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="32" value="组卷生成 Paper
question.hw_paper
question.hw_paper_question" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="730" y="160" width="250" height="96" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="33" value="发布作业到班级
question.hw_assignment
question.hw_assignment_target" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1010" y="160" width="250" height="96" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="40" value="学生接收作业
upms.tb_school_class_member
question.hw_assignment_target" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1180" y="440" width="250" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="41" value="学生答题并提交(文本/图片/音频)
question.hw_submission
question.hw_submission_answer / upms.tb_sys_file" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1460" y="430" width="320" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="50" value="创建批改任务
question.gd_grading_task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1780" y="760" width="240" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="51" value="AI-OCR 解析
ai.tb_ai_knowledge_file / ai.tb_ai_knowledge_sync_task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2050" y="760" width="210" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="52" value="AI-LLM 批改与错因标签
question.gd_answer_grade
question.gd_answer_error_rel / question.gd_error_tag
ai.tb_ai_knowledge_sync_task + ai.tb_ai_graph_entity + ai.tb_ai_graph_relation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2290" y="744" width="330" height="108" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="53" value="主观题待复核?
question.gd_answer_grade.grade_mode" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2660" y="736" width="220" height="122" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="54" value="教师复核/点评
question.gd_teacher_comment" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2860" y="170" width="220" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="55" value="成绩汇总(总分/等级)
question.gd_score_summary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2920" y="760" width="240" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="56" value="错题沉淀入错题本
question.gd_wrong_question" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3190" y="760" width="240" height="76" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="57" value="错题状态流转(待学习/复习中/已掌握)
question.gd_wrong_question
question.gd_review_plan + ai.tb_ai_knowledge_sync_task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3460" y="744" width="280" height="108" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="60" value="AI生成举一反三变式题
ai.tb_ai_knowledge_sync_task
recommendation.rc_recommendation_item" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3190" y="430" width="280" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="61" value="学生变式题练习
question.hw_submission
question.hw_submission_answer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3500" y="440" width="250" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="62" value="是否掌握?
question.gd_wrong_question.mastery_status" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3780" y="428" width="200" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="63" value="生成艾宾浩斯复习计划
question.gd_review_plan" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="4010" y="432" width="240" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="64" value="到点提醒与复习反馈
upms.tb_sys_message
recommendation.rc_learning_loop_event" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="4250" y="900" width="260" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="65" value="推荐召回与排序
recommendation.rc_recommendation_task
recommendation.rc_recommendation_item" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="4250" y="1000" width="260" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="66" value="推送微课/专项训练/同类错题
recommendation.rc_recommendation_item" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="4250" y="1110" width="260" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="67" value="学生反馈(曝光/点击/完成)
recommendation.rc_recommendation_feedback" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="4250" y="1210" width="260" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="68" value="费曼讲解任务触发
recommendation.rc_learning_loop_event" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2920" y="430" width="240" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="69" value="学生语音讲解提交
question.gd_explanation_submission
upms.tb_sys_file" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2920" y="540" width="240" height="92" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="70" value="AI语音评测(ASR/表达评分/建议)
question.gd_explanation_assessment
question.gd_explanation_dimension_score
ai.tb_ai_knowledge_sync_task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3190" y="540" width="300" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="71" value="画像与闭环引擎
recommendation.rc_student_profile_snapshot
recommendation.rc_student_profile_feature
recommendation.rc_learning_loop_case / rc_learning_loop_event" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3400" y="980" width="330" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="72" value="规则模板/事件字典/阶段映射
achievement.ac_achievement_event_dict
achievement.ac_achievement_metric_def
achievement.ac_achievement_rule_template
recommendation.rc_loop_stage_achievement_map / rc_loop_metric_map" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;" parent="1" vertex="1">
|
||||
<mxGeometry x="3400" y="1120" width="330" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="73" value="成就计算与发放(激励数据=成就数据)
achievement.ac_user_achievement
achievement.ac_user_achievement_progress" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3770" y="980" width="310" height="104" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="74" value="成长轨迹/指标更新
achievement.ac_user_achievement_daily_fact
recommendation.rc_learning_loop_effect_daily" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3770" y="1100" width="310" height="104" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="80" value="机构学情与运营看板
question.gd_score_summary
recommendation.rc_recommendation_effect_daily
achievement.ac_user_achievement_daily_fact" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="2860" y="1390" width="300" height="116" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="81" value="质量监控与异常预警
question.gd_grading_task
recommendation.rc_learning_loop_effect_daily" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3200" y="1400" width="300" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="82" value="审计追溯与报表导出
ai.tb_ai_knowledge_file / ai.tb_ai_knowledge_sync_task
upms.tb_sys_message
recommendation.rc_learning_loop_event" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3540" y="1390" width="320" height="116" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="83" value="结束
(进入下一轮学习循环)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="3890" y="1400" width="280" height="96" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="20" target="30" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="101" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="30" target="31" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="102" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="31" target="32" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="103" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="32" target="33" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="104" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="33" target="40" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="105" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="40" target="41" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="106" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="41" target="50" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="107" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="50" target="51" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="108" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="51" target="52" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="109" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="52" target="53" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="110" value="是" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="53" target="54" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="111" value="否" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="53" target="55" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="112" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="54" target="55" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="113" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="55" target="56" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="114" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="56" target="57" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="115" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="56" target="60" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="116" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="60" target="61" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="117" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="61" target="62" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="118" value="否,继续练" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;dashed=1;" parent="1" source="62" target="60" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="119" value="是" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="62" target="63" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="120" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="63" target="64" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="121" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="64" target="65" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="122" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="65" target="66" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="123" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="66" target="67" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="124" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="57" target="68" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="125" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="68" target="69" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="126" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="69" target="70" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="127" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="67" target="71" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="128" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="70" target="71" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="129" value="配置读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="72" target="71" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="130" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="71" target="73" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="131" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="73" target="74" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="132" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="74" target="80" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="133" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="80" target="81" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="134" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="81" target="82" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="135" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;" parent="1" source="82" target="83" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -1,158 +1,130 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T09:05:00.000Z" agent="Codex GPT-5" version="24.7.17">
|
||||
<diagram id="multi-role-flow" name="数据流图(多角色)">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-15T07:55:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="multi-role-flow-ai" name="数据流图(多角色)">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="1300" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="2" value="多角色数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="20" width="220" height="30" as="geometry" />
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="多角色数据流图(AI逻辑完整版)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="20" width="420" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="入口:微信小程序 / React 后台,处理链路:Java 分布式服务 -> Python AI 服务 -> Redis / PostgreSQL" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="52" width="860" height="22" as="geometry" />
|
||||
<mxCell id="3" value="入口:微信小程序/React 后台;主链路:Java服务编排 -> Python AI子服务(OCR/LLM/ASR) -> PostgreSQL/Redis/对象存储/Milvus/NebulaGraph(Neo4j);同步调度支持 REST/JAR" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="52" width="1250" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="10" value="学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=15;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="140" width="160" height="70" as="geometry" />
|
||||
<mxGeometry x="60" y="120" width="150" height="65" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=15;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="350" width="160" height="70" as="geometry" />
|
||||
<mxGeometry x="60" y="250" width="150" height="65" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="机构管理员" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=15;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="560" width="160" height="70" as="geometry" />
|
||||
<mxGeometry x="60" y="380" width="150" height="65" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="P1 接入与身份认证<br>微信小程序 / React -> Java Gateway" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="80" width="290" height="80" as="geometry" />
|
||||
|
||||
<mxCell id="20" value="P1 接入与鉴权
Gateway + Auth + RBAC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="90" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="P2 作业 / 资料管理<br>Java 作业服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="205" width="290" height="80" as="geometry" />
|
||||
<mxCell id="21" value="P2 作业/资料管理
布置、上传、提交、附件引用" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="200" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" value="P3 AI批改与错因分析<br>Java 编排服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="330" width="290" height="80" as="geometry" />
|
||||
<mxCell id="22" value="P3 批改编排服务
触发AI子流程、汇总得分/错因" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="310" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="23" value="P4 错题本 / 复习计划<br>Java 复习服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="455" width="290" height="80" as="geometry" />
|
||||
<mxCell id="23" value="P4 错题本与复习计划
错题沉淀、复习节点评估" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="420" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="24" value="P5 推荐与消息推送<br>Java 推荐服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="580" width="290" height="80" as="geometry" />
|
||||
<mxCell id="24" value="P5 推荐与消息触达
推荐任务、反馈回流、站内信" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="530" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="25" value="P6 Python AI处理服务<br>OCR / 批改 / 语音评测" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="250" width="300" height="80" as="geometry" />
|
||||
<mxCell id="25" value="P6 讲解评估与教学干预
语音讲解评估、教师点评、学情回传" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="640" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="26" value="P7 讲解评估 / 教学干预 / 运营监控<br>Java 教学与运营服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="470" width="330" height="90" as="geometry" />
|
||||
<mxCell id="26" value="P7 画像与学习闭环引擎
画像快照、阶段事件、成就触发映射" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="750" width="260" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="30" value="D1 PostgreSQL 用户 / 班级库<br>支持分库分表 / 分区" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="70" width="260" height="75" as="geometry" />
|
||||
|
||||
<mxCell id="40" value="AI-1 OCR解析服务
图片增强 / 版面解析 / 文本结构化" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="220" width="300" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="31" value="D2 PostgreSQL 作业 / 批改库<br>支持分库分表 / 分区" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="190" width="260" height="75" as="geometry" />
|
||||
<mxCell id="41" value="AI-2 LLM批改服务
客观判分 / 主观评估 / 错因标签" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="320" width="300" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="32" value="D3 PostgreSQL 错题 / 复习库<br>支持分区归档" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="310" width="260" height="75" as="geometry" />
|
||||
<mxCell id="42" value="AI-3 讲解评测服务
ASR转写 / 表达评分 / 改进建议" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="640" width="300" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="33" value="D4 知识库 / 题库 / 对象存储" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="430" width="260" height="75" as="geometry" />
|
||||
<mxCell id="43" value="AI-4 推荐策略服务
召回 / 排序 / 反馈学习" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="540" width="300" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="34" value="D5 Redis Cluster<br>会话、缓存、热数据、推荐结果" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="550" width="260" height="75" as="geometry" />
|
||||
<mxCell id="44" value="AI-5 模型与任务管理
model_config / task_log / retrieval_log
sync_scheduler_config / sync_dispatch_log" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="760" width="300" height="78" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="35" value="D6 日志 / 审计 / BI" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="670" width="260" height="75" as="geometry" />
|
||||
|
||||
<mxCell id="60" value="D1 PostgreSQL 用户/组织/班级库
upms/auth" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="90" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="40" value="登录 / 绑定" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="10" target="20">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="61" value="D2 PostgreSQL question题目/作业库
question.hw_*" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="200" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="41" value="登录 / 班级关系" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="11" target="20">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="62" value="D3 PostgreSQL question批改/错题/讲解库
question.gd_*" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="310" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="42" value="高权限登录" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" edge="1" parent="1" source="12" target="20">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="63" value="D4 PostgreSQL 推荐/画像/闭环库
recommendation" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="420" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="43" value="用户 / 班级 / 权限" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="20" target="30">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="64" value="D5 PostgreSQL 成就库
achievement(激励=成就)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="530" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="44" value="会话 / Token" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="20" target="34">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="65" value="D6 Redis缓存层
会话/推荐缓存/未读计数" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="640" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="45" value="发布作业 / 资料" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="11" target="21">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="66" value="D7 对象存储
文件/课件/音频/附件" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="750" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="46" value="上传作业 / 答题" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="10" target="21">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="67" value="D8 Milvus + NebulaGraph/Neo4j
向量检索 / 知识图谱 / 同步任务结果" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="860" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="47" value="作业 / 资料 / 提交" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="21" target="31">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="48" value="文件 / 课件" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="21" target="33">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="49" value="批改请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="21" target="22">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="50" value="调用 Python AI" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="22" target="25">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="51" value="解析结果 / 错因 / 评分" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="25" target="22">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="52" value="知识点 / 题库匹配" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="25" target="33">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="53" value="批改结果" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="22" target="31">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="54" value="错题 / 薄弱项" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="22" target="23">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="55" value="批改结果 / 错因" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="22" target="10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="56" value="复核任务 / 学情" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="22" target="11">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="57" value="错题 / 复习节点" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="23" target="32">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="58" value="画像 / 复习信号" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="23" target="24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="59" value="错题本 / 复习计划" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="23" target="10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="60" value="微课 / 变式题召回" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="24" target="33">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="61" value="缓存推荐结果" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="24" target="34">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="62" value="推荐内容 / 提醒" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="24" target="10">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="63" value="语音讲解提交" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="10" target="26">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="64" value="点评 / 评分 / 学情查询" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="11" target="26">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="65" value="机构监控 / 审核" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" edge="1" parent="1" source="12" target="26">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="66" value="讲解评估调用" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="26" target="25">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67" value="讲解记录 / 教学数据" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="26" target="31">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="68" value="报表 / 审计" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="26" target="35">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="69" value="班级学情 / 教学建议" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="26" target="11">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="70" value="机构看板 / 质量报表" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" edge="1" parent="1" source="26" target="12">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="68" value="D9 站内信与审计BI
message / logs / reports" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#f8f9fa;strokeColor=#666666;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="970" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="80" value="登录/绑定" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="10" target="20"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="81" value="教学管理" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="11" target="20"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="82" value="运营管控" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" edge="1" parent="1" source="12" target="20"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="83" value="作业/资料请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="20" target="21"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="84" value="批改触发" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="21" target="22"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="85" value="错题沉淀" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="22" target="23"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="86" value="推荐触达" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="23" target="24"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="87" value="讲解评估" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="24" target="25"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="88" value="画像闭环" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="25" target="26"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="89" value="OCR请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="22" target="40"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="90" value="LLM批改请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="22" target="41"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="91" value="语音评测请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="25" target="42"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="92" value="推荐排序请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="24" target="43"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="93" value="任务记录/模型路由" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="40" target="44"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="94" value="任务记录/模型路由" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="41" target="44"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="95" value="任务记录/模型路由" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="42" target="44"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="96" value="任务记录/模型路由" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#d6b656;" edge="1" parent="1" source="43" target="44"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="100" value="用户/权限" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="20" target="60"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="101" value="作业/提交" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="21" target="61"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="102" value="批改/错题/讲解" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="22" target="62"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="103" value="错题/复习计划" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="23" target="62"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="104" value="推荐任务/反馈/画像" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="24" target="63"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="105" value="成就进度/发放" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="26" target="64"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="缓存读写" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="24" target="65"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="文件/知识资产" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="40" target="66"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="检索/图谱" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="43" target="66"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="109" value="消息/审计报表" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="24" target="68"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="110" value="AI日志/任务" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="44" target="68"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="114" value="同步调度(REST/JAR)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;dashed=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="44" target="67"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="111" value="结果回传" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#82b366;" edge="1" parent="1" source="22" target="10"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="112" value="待复核/教学建议" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#6c8ebf;" edge="1" parent="1" source="25" target="11"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="113" value="质量看板" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;endFill=1;strokeColor=#b85450;" edge="1" parent="1" source="26" target="12"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
</mxfile>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<mxCell id="2" value="AI智能学习系统系统架构" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="20" width="420" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="技术栈:微信小程序 + React + Java + Python(AI处理供 Java 调用) + Redis + PostgreSQL" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxCell id="3" value="技术栈:微信小程序 + React + Java + Python(AI处理供 Java 调用) + Redis + PostgreSQL + Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="52" width="760" height="22" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="角色与前端接入层" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=16;fontStyle=1;align=left;spacingLeft=12;verticalAlign=top;" parent="1" vertex="1">
|
||||
@@ -40,7 +40,7 @@
|
||||
<mxCell id="34" value="错题 / 复习 / 推荐服务<br>错题本、艾宾浩斯计划、推荐触达" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;" parent="1" vertex="1">
|
||||
<mxGeometry x="690" y="280" width="220" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="35" value="知识库与机构运营服务<br>知识库审核、运营看板、质量监控、报表导出" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=14;" parent="1" vertex="1">
|
||||
<mxCell id="35" value="知识库与机构运营服务<br>知识图谱/向量库管理、运营看板、质量监控、报表导出" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=14;" parent="1" vertex="1">
|
||||
<mxGeometry x="940" y="280" width="220" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="36" value="分布式治理能力<br>服务注册发现 / 配置中心 / 链路追踪 / 灰度发布" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=14;" parent="1" vertex="1">
|
||||
@@ -79,10 +79,10 @@
|
||||
<mxCell id="63" value="对象存储<br>图片 / PDF / 音频 / 课件 / 讲解录音" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="1100" y="650" width="200" height="85" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="64" value="MQ / 任务调度<br>异步批改、推荐推送、报表任务" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxCell id="64" value="MQ / 任务调度<br>异步批改、推荐推送、图谱/向量同步(REST/JAR)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="1340" y="650" width="200" height="85" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="65" value="日志 / 审计 / BI<br>操作日志、链路日志、运营分析" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxCell id="65" value="Milvus + NebulaGraph/Neo4j<br>向量检索、知识图谱、混合检索日志" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="1580" y="650" width="160" height="85" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="70" value="外部能力" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=16;fontStyle=1;align=left;spacingLeft=12;verticalAlign=top;" parent="1" vertex="1">
|
||||
@@ -210,7 +210,7 @@
|
||||
<mxCell id="2" value="AI智能学习系统代码架构" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="20" width="420" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="前端:微信小程序 + React,后端:Java 分布式服务,AI:Python 服务,数据:Redis + PostgreSQL" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxCell id="3" value="前端:微信小程序 + React,后端:Java 分布式服务,AI:Python 服务,数据:Redis + PostgreSQL + Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="30" y="52" width="780" height="22" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="前端应用层" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fa;strokeColor=#b7c3d0;fontSize=16;fontStyle=1;align=left;spacingLeft=12;verticalAlign=top;" parent="1" vertex="1">
|
||||
|
||||
Reference in New Issue
Block a user