This commit is contained in:
zlwu committed 2026-08-12 10:02:31 +08:00
1 parent 8aab018558
commit 1b2896c877
70 files changed
+7753 -3306

No files matched your search

+24 -1
View File
@@ -88,6 +88,26 @@ def _user_menu_ids(db: Session, user_id: str) -> Set[str]:
return {str(r[0]).strip() for r in rows if r and r[0]}
def _mobile_menu_icon(path: str) -> str:
"""按路由匹配移动端宫格图标(与 mobile-h5 van-icon 字形名对齐)。"""
p = (path or "").lower()
if "oa/start" in p:
return "approve"
if "form-sink" in p:
return "orders-o"
return "apps-o"
def _mobile_menu_icon_colors(path: str) -> dict:
"""宫格图标底色/图形色(可按入口自定义,不强制品牌绿)。"""
p = (path or "").lower()
if "oa/start" in p:
return {"iconBg": "#ffe4e6", "iconFg": "#e11d48"}
if "form-sink" in p:
return {"iconBg": "#eef2f1", "iconFg": "#3d524a"}
return {"iconBg": "#eef2f1", "iconFg": "#3d524a"}
@router.get("/menus")
async def list_my_mobile_menus(request: Request, db: Session = Depends(get_db)):
try:
@@ -116,12 +136,15 @@ async def list_my_mobile_menus(request: Request, db: Session = Depends(get_db)):
continue
if allowed_ids is not None and m.id not in allowed_ids:
continue
colors = _mobile_menu_icon_colors(path)
items.append(
{
"id": m.id,
"title": m.menu_name,
"path": path if path.startswith("/") else f"/{path}",
"icon": "edit",
"icon": _mobile_menu_icon(path),
"iconBg": colors["iconBg"],
"iconFg": colors["iconFg"],
"perms": (m.perms or "").strip() or None,
}
)
File diff suppressed because it is too large. Load diff
+471 -6
View File
@@ -47,21 +47,21 @@
"label": "_mask_secret()",
"file_type": "code",
"source_file": "main.py",
"source_location": "L151"
"source_location": "L152"
},
{
"id": "app_main_root",
"label": "root()",
"file_type": "code",
"source_file": "main.py",
"source_location": "L173"
"source_location": "L174"
},
{
"id": "app_main_health_check",
"label": "health_check()",
"file_type": "code",
"source_file": "main.py",
"source_location": "L178"
"source_location": "L179"
},
{
"id": "app_main_rationale_93",
@@ -25592,6 +25592,83 @@
"source_file": "api/production_material.py",
"source_location": "L1318"
},
{
"id": "api_mini_menu_py",
"label": "mini_menu.py",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L1"
},
{
"id": "api_mini_menu_current_user",
"label": "_current_user()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L19"
},
{
"id": "api_mini_menu_find_mobile_root",
"label": "_find_mobile_root()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L27"
},
{
"id": "api_mini_menu_collect_descendants",
"label": "_collect_descendants()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L45"
},
{
"id": "api_mini_menu_user_menu_ids",
"label": "_user_menu_ids()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L74"
},
{
"id": "api_mini_menu_mobile_menu_icon",
"label": "_mobile_menu_icon()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L91"
},
{
"id": "api_mini_menu_mobile_menu_icon_colors",
"label": "_mobile_menu_icon_colors()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L101"
},
{
"id": "api_mini_menu_list_my_mobile_menus",
"label": "list_my_mobile_menus()",
"file_type": "code",
"source_file": "api/mini_menu.py",
"source_location": "L112"
},
{
"id": "api_mini_menu_rationale_1",
"label": "\u5c0f\u7a0b\u5e8f\u83dc\u5355\uff1a\u5f53\u524d\u7528\u6237\u5728\u300c\u79fb\u52a8\u7aef\u83dc\u5355\u300d\u6811\u4e0b\u6709\u6743\u9650\u7684\u5165\u53e3\u3002",
"file_type": "rationale",
"source_file": "api/mini_menu.py",
"source_location": "L1"
},
{
"id": "api_mini_menu_rationale_92",
"label": "\u6309\u8def\u7531\u5339\u914d\u79fb\u52a8\u7aef\u5bab\u683c\u56fe\u6807\uff08\u4e0e mobile-h5 van-icon \u5b57\u5f62\u540d\u5bf9\u9f50\uff09\u3002",
"file_type": "rationale",
"source_file": "api/mini_menu.py",
"source_location": "L92"
},
{
"id": "api_mini_menu_rationale_102",
"label": "\u5bab\u683c\u56fe\u6807\u5e95\u8272/\u56fe\u5f62\u8272\uff08\u53ef\u6309\u5165\u53e3\u81ea\u5b9a\u4e49\uff0c\u4e0d\u5f3a\u5236\u54c1\u724c\u7eff\uff09\u3002",
"file_type": "rationale",
"source_file": "api/mini_menu.py",
"source_location": "L102"
},
{
"id": "api_qc_py",
"label": "qc.py",
@@ -37289,7 +37366,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "main.py",
"source_location": "L151",
"source_location": "L152",
"weight": 1.0
},
{
@@ -37298,7 +37375,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "main.py",
"source_location": "L173",
"source_location": "L174",
"weight": 1.0
},
{
@@ -37307,7 +37384,7 @@
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "main.py",
"source_location": "L178",
"source_location": "L179",
"weight": 1.0
},
{
@@ -103406,6 +103483,231 @@
"source_location": "L1318",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "typing",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L4",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "fastapi",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L6",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "sqlalchemy_orm",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L7",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_core_auth",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L9",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_core_config",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L10",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_core_database",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L11",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_core_response",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L12",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_models_models",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "app_services_web_auth_roles",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L14",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_current_user",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L19",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_find_mobile_root",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L27",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_collect_descendants",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L45",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_user_menu_ids",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L74",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_mobile_menu_icon",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L91",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_mobile_menu_icon_colors",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L101",
"weight": 1.0
},
{
"source": "api_mini_menu_py",
"target": "api_mini_menu_list_my_mobile_menus",
"relation": "contains",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L112",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_current_user",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L114",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_find_mobile_root",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L122",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_collect_descendants",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L126",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_user_menu_ids",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L128",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_mobile_menu_icon_colors",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L139",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "api_mini_menu_mobile_menu_icon",
"relation": "calls",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L145",
"weight": 1.0
},
{
"source": "api_mini_menu_rationale_1",
"target": "api_mini_menu_py",
"relation": "rationale_for",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L1",
"weight": 1.0
},
{
"source": "api_mini_menu_rationale_92",
"target": "api_mini_menu_mobile_menu_icon",
"relation": "rationale_for",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L92",
"weight": 1.0
},
{
"source": "api_mini_menu_rationale_102",
"target": "api_mini_menu_mobile_menu_icon_colors",
"relation": "rationale_for",
"confidence": "EXTRACTED",
"source_file": "api/mini_menu.py",
"source_location": "L102",
"weight": 1.0
},
{
"source": "api_qc_py",
"target": "typing",
@@ -109211,6 +109513,15 @@
"source_location": "L37",
"weight": 1.0
},
{
"source": "api_init_py",
"target": "app_api_mini_menu",
"relation": "imports_from",
"confidence": "EXTRACTED",
"source_file": "api/__init__.py",
"source_location": "L38",
"weight": 1.0
},
{
"source": "api_init_rationale_1",
"target": "api_init_py",
@@ -233429,6 +233740,60 @@
"source_location": "L20",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_1",
"target": "models_models_sysmenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_92",
"target": "models_models_sysmenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_102",
"target": "models_models_sysmenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_1",
"target": "models_models_sysrolemenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_92",
"target": "models_models_sysrolemenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_mini_menu_rationale_102",
"target": "models_models_sysrolemenu",
"relation": "uses",
"confidence": "INFERRED",
"source_file": "api/mini_menu.py",
"source_location": "L13",
"weight": 0.8
},
{
"source": "api_qc_thirdpartycompanybody",
"target": "schemas_qc_work_order_qcworkordercreatebody",
@@ -290140,6 +290505,106 @@
"source_location": "L1335",
"weight": 1.0
},
{
"source": "api_mini_menu_current_user",
"target": "crud_base_crudbase_get",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L20",
"weight": 1.0
},
{
"source": "api_mini_menu_current_user",
"target": "valueerror",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L22",
"weight": 1.0
},
{
"source": "api_mini_menu_current_user",
"target": "core_auth_get_current_user_by_token",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L24",
"weight": 1.0
},
{
"source": "api_mini_menu_user_menu_ids",
"target": "services_web_auth_roles_get_effective_role_ids",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L75",
"weight": 1.0
},
{
"source": "api_mini_menu_user_menu_ids",
"target": "str",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L88",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "core_response_error_response",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L116",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "str",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L118",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "crud_base_crudbase_get",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L118",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "core_response_success_response",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L124",
"weight": 1.0
},
{
"source": "api_mini_menu_list_my_mobile_menus",
"target": "services_web_auth_roles_resolve_web_role_for_user",
"relation": "calls",
"confidence": "INFERRED",
"confidence_score": 0.8,
"source_file": "api/mini_menu.py",
"source_location": "L127",
"weight": 1.0
},
{
"source": "api_qc_list_qc_third_party_companies",
"target": "api_clinical_payment_get_tenant_no",
+51 -51
View File
@@ -1,11 +1,11 @@
# Graph Report - app (2026-08-11)
## Corpus Check
- Large corpus: 249 files · ~302,805 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
- Large corpus: 250 files · ~303,240 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
## Summary
- 5227 nodes · 28634 edges · 43 communities detected
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 19594 edges (avg confidence: 0.6)
- 5238 nodes · 28666 edges · 43 communities detected
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 19610 edges (avg confidence: 0.6)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
@@ -54,8 +54,8 @@
- [[_COMMUNITY_Community 44|Community 44]]
## God Nodes (most connected - your core abstractions)
1. `success_response()` - 735 edges
2. `error_response()` - 608 edges
1. `success_response()` - 736 edges
2. `error_response()` - 609 edges
3. `SysUser` - 598 edges
4. `BizQcTaskResult` - 346 edges
5. `BizProductionMaterial` - 329 edges
@@ -70,90 +70,90 @@
core/api_request_log_middleware.py → models/models.py
- `get_menu_list()` --calls--> `success_response()` [INFERRED]
api/menu.py → core/response.py
- `中试服务交付管理 API(交付信息、交付物料、交付方式)` --uses--> `SysUser` [INFERRED]
api/pilot_delivery.py → models/models.py
- `微信小程序登录业务:openid + 手机号一致性校验。` --uses--> `SysUser` [INFERRED]
services/wechat_login_service.py → models/models.py
- `根据 openid + 本次授权手机号解析可登录员工。 Returns: (user, error_message, error_co` --uses--> `SysUser` [INFERRED]
services/wechat_login_service.py → models/models.py
- `保留匹配节点及其全部上级,供关键词检索后仍能正确组树。` --uses--> `SysDept` [INFERRED]
crud/dept.py → models/models.py
## Communities
### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (991): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+983 more)
Nodes (1001): attachment_download_url(), create_dept(), create_dict_data(), create_dict_type(), create_express_company(), create_item_unit(), create_menu(), create_post() (+993 more)
### Community 1 - "Community 1"
Cohesion: 0.01
Nodes (728): generate_uuid(), allocate_next_biz_no(), _format_biz_no(), _prefix_for(), 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, _apply_cell_product_status_change(), create_cell_product() (+720 more)
Nodes (706): generate_uuid(), allocate_next_biz_no(), _format_biz_no(), _prefix_for(), 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, create_cell_product(), create_cell_sample_type() (+698 more)
### Community 2 - "Community 2"
Cohesion: 0.01
Nodes (637): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+629 more)
Nodes (584): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, ExpressCompanyCreateBody (+576 more)
### Community 3 - "Community 3"
Cohesion: 0.06
Nodes (457): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody (+449 more)
Cohesion: 0.07
Nodes (410): 环境检测 — 检测项维护 + 登记管理 API, 保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格), 小程序菜单:当前用户在「移动端菜单」树下有权限的入口。, 宫格图标底色/图形色(可按入口自定义,不强制品牌绿)。, 按路由匹配移动端宫格图标(与 mobile-h5 van-icon 字形名对齐)。, ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody (+402 more)
### Community 4 - "Community 4"
Cohesion: 0.02
Nodes (281): _normalize_date_bound(), _persist_protocol_sub_resources(), _body_to_payload(), _get_current_user_id(), get_production_reception_by_sample_code(), get_production_reception_detail(), _get_tenant_no(), post_production_reception() (+273 more)
Cohesion: 0.06
Nodes (328): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+320 more)
### Community 5 - "Community 5"
Cohesion: 0.07
Nodes (309): CellSampleTypeCreateBody, CellSampleTypeUpdateBody, CollectionRegionCreateBody, CollectionRegionUpdateBody, CustomerCreateBody, CustomerUpdateBody, HospitalCreateBody, HospitalUpdateBody (+301 more)
Cohesion: 0.02
Nodes (270): _normalize_date_bound(), _persist_protocol_sub_resources(), list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), format_date() (+262 more)
### Community 6 - "Community 6"
Cohesion: 0.02
Nodes (244): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+236 more)
Nodes (270): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时统一排序规则,避免 Illegal mix of collations。, 跨表字符串等值比较(JOIN / WHERE)时统一为 utf8mb4_unicode_ci。, 将列显式设为 utf8mb4_unicode_ci。, unicode_ci(), build_void_type_label_map(), format_protocol_status_label() (+262 more)
### Community 7 - "Community 7"
Cohesion: 0.02
Nodes (212): 截止日期:仅日期时扩到当天 23:59:59。, 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), _copied_app_name(), copy_app(), create_app(), _create_version() (+204 more)
Nodes (234): 截止日期:仅日期时扩到当天 23:59:59。, 发起前预览审批链(条件齐后解析最终路径与审批人)。, 兼容旧 GET:无 formData,含条件分支时多为待确定占位。, _app_to_dict(), _copied_app_name(), copy_app(), create_app(), _create_version() (+226 more)
### Community 8 - "Community 8"
Cohesion: 0.02
Nodes (195): list_ethnics_for_select(), apply_data_scope(), _get_child_dept_ids(), get_user_dept_id(), _resolve_user_role_scopes(), ApiRequestLogCRUD, delete(), get_multi_with_filters() (+187 more)
Nodes (142): get_designer_data(), _error_json(), lifespan(), 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+134 more)
### Community 9 - "Community 9"
Cohesion: 0.02
Nodes (144): get_designer_data(), _error_json(), lifespan(), 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, sqlalchemy_exception_handler(), unhandled_exception_handler(), BaseHTTPMiddleware (+136 more)
Cohesion: 0.03
Nodes (129): get_next_cell_product_code(), _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _apply_cell_product_status_change(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), build_split_product_codes() (+121 more)
### Community 10 - "Community 10"
Cohesion: 0.02
Nodes (130): 小程序鉴权:微信登录 / 绑定 openid。, 微信授权登录:须授权手机号;openid 已绑定也须与账号 phone_no 一致。, 密码登录后绑定当前微信 openid(需 Bearer)。, _resolve_user_id(), wechat_bind(), wechat_login(), _build_current_user_payload(), cn_holiday_range() (+122 more)
Cohesion: 0.03
Nodes (110): 小程序鉴权:微信登录 / 绑定 openid。, 微信授权登录:须授权手机号;openid 已绑定也须与账号 phone_no 一致。, 密码登录后绑定当前微信 openid(需 Bearer)。, _resolve_user_id(), wechat_bind(), wechat_login(), _collect_descendants(), _current_user() (+102 more)
### Community 11 - "Community 11"
Cohesion: 0.04
Nodes (93): _fmt_dt(), get_handover_by_schedule(), get_outbound_handover(), get_outbound_handover_view(), _handover_row_to_dict(), _handover_view_dict(), _parse_handover_time(), 供输注计划 detail 聚合的交接只读信息。 (+85 more)
Nodes (104): _body_to_payload(), _get_current_user_id(), get_production_reception_by_sample_code(), get_production_reception_detail(), _get_tenant_no(), post_production_reception(), put_production_reception(), _resolve_reception_id() (+96 more)
### Community 12 - "Community 12"
Cohesion: 0.06
Nodes (71): add_task_step(), _aggregate_production_tab_step_field(), assert_step_assignee_for_write(), assert_task_assignee(), assert_task_step_assignee_or_legacy(), _batch_load_step_sub_tables(), _clone_route_to_task(), _clone_step_consumables() (+63 more)
Cohesion: 0.05
Nodes (113): AccessLogCreateBody, AccessLogUpdateBody, CleanRoomCreateBody, CleanRoomUpdateBody, ExhibitionAppointmentCreateBody, ExhibitionAppointmentUpdateBody, list_storage_slot_stats(), OccupancyCreateBody (+105 more)
### Community 13 - "Community 13"
Cohesion: 0.06
Nodes (66): aggregate_slot_stats_by_facility(), _apply_slot_select_base_filters(), _apply_slot_select_query_filters(), batch_create_facilities(), batch_create_slots(), _build_node_path_cache(), _build_slot_keyword_sql_filters(), collect_descendant_ids() (+58 more)
Cohesion: 0.04
Nodes (102): _filter_material_type(), _amount_for_row(), _batch_map(), _deduct_step_usage_legacy_batch(), _display_remark(), _fmt_date_val(), list_available_requisitions_for_prep(), list_linked_step_usages() (+94 more)
### Community 14 - "Community 14"
Cohesion: 0.09
Nodes (41): _ancestor_link_from_cell_product_input(), _ancestor_sample_chain_link(), _build_ancestor_chain(), _build_descendant_chain(), _build_facility_path_label(), build_split_product_codes(), create_cell_products_by_quantity(), delete_cell_product() (+33 more)
Cohesion: 0.45
Nodes (71): BatchStockInBody, BatchStockInItem, BatchStockOutBody, BatchStockOutItem, ConsumableCreateBody, ConsumablePackCreateBody, ConsumablePackUpdateBody, ConsumableUpdateBody (+63 more)
### Community 15 - "Community 15"
Cohesion: 0.09
Nodes (50): complete_application(), create_basic_experiment_sale_schedules(), create_infusion_plan(), create_schedule(), _create_schedule_products(), _format_yyyy_mm_dd(), _generate_application_no(), get_application() (+42 more)
### Community 16 - "Community 16"
Cohesion: 0.12
Nodes (11): get_wechat_pay_client(), get_wechat_pay_v2(), 微信支付工具模块 支持微信支付 V3 API 文档参考: https://pay.weixin.qq.com/docs/v3/apis/index.ht, 统一下单接口 (V3) Args: out_trade_no: 商户订单号 total, 申请退款 Args: out_trade_no: 商户订单号 total_amount, 小程序调起支付的二次签名参数(与公众号 JSAPI 规则一致), 统一下单 (V2 API) Args: out_trade_no: 商户订单号 tot, 生成签名 V3 (SHA256 with RSA) (+3 more)
### Community 16 - "Community 16"
### Community 17 - "Community 17"
Cohesion: 0.14
Nodes (11): apply_formulas_and_linkages(), eval_formula(), _extract_rules(), preprocess_formula(), OA 表单公式与数据联动(禁止任意 eval), 按 schema 中字段 props.formula / props.linkage 回填 form_data。 linkage 示例: { "when, 将 {field} 转为合法标识符引用 field。, _SafeEval (+3 more)
### Community 17 - "Community 17"
Cohesion: 0.19
Nodes (21): apply_overtime_kit_hours(), _build_rest_day_segments(), _build_workday_windows(), calc_overtime_hours(), _day_at_minutes(), _day_start_ms(), _extract_rules(), _format_ymd() (+13 more)
### Community 18 - "Community 18"
Cohesion: 0.17
Nodes (19): get_by_schedule(), get_method(), _get_tenant_no(), list_by_application(), list_materials(), 中试服务交付管理 API(交付信息、交付物料、交付方式), soft_delete(), create_delivery() (+11 more)
Nodes (19): batch_create_checkups(), create_checkup(), delete_actual_item(), delete_reserve_item(), get_checkup_by_application(), get_checkup_by_id(), list_actual_items(), list_checkups_paginated() (+11 more)
### Community 19 - "Community 19"
Cohesion: 0.21
@@ -164,12 +164,12 @@ Cohesion: 0.2
Nodes (19): _code_exists(), create_material(), _dec(), _fmt_dt(), get_material(), get_material_entity(), get_my_usages(), _is_enabled_status() (+11 more)
### Community 21 - "Community 21"
Cohesion: 0.27
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
Cohesion: 0.18
Nodes (18): company_code_exists(), create_company(), get_company(), list_companies(), list_company_options(), _row_to_dict(), soft_delete_company(), update_company() (+10 more)
### Community 22 - "Community 22"
Cohesion: 0.23
Nodes (12): Config, ProductBase, ProductCategoryBase, ProductCategoryCreate, ProductCategoryResponse, ProductCreate, ProductResponse, ProductUnitBase (+4 more)
Cohesion: 0.27
Nodes (12): create_equipment(), _dec(), equipment_code_exists(), equipment_is_referenced(), get_equipment(), list_equipments(), _norm_status(), _parse_date() (+4 more)
### Community 23 - "Community 23"
Cohesion: 0.24
@@ -284,17 +284,17 @@ Nodes (1): 发送催单通知给配送员 Args: del
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `SysUser` connect `Community 2` to `Community 1`, `Community 3`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 18`, `Community 23`, `Community 24`?**
_High betweenness centrality (0.109) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 1` to `Community 0`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 19`, `Community 20`, `Community 21`, `Community 23`, `Community 24`, `Community 25`?**
_High betweenness centrality (0.043) - this node is a cross-community bridge._
- **Why does `success_response()` connect `Community 0` to `Community 32`, `Community 2`, `Community 4`, `Community 8`, `Community 9`, `Community 10`, `Community 18`?**
- **Why does `SysUser` connect `Community 2` to `Community 0`, `Community 1`, `Community 3`, `Community 4`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 12`, `Community 13`, `Community 14`, `Community 23`, `Community 24`?**
_High betweenness centrality (0.114) - this node is a cross-community bridge._
- **Why does `generate_uuid()` connect `Community 1` to `Community 0`, `Community 4`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 19`, `Community 20`, `Community 21`, `Community 22`, `Community 23`, `Community 24`, `Community 25`?**
_High betweenness centrality (0.042) - this node is a cross-community bridge._
- **Are the 877 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 877 INFERRED edges - model-reasoned connections that need verification._
- **Are the 734 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 734 INFERRED edges - model-reasoned connections that need verification._
- **Are the 607 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 607 INFERRED edges - model-reasoned connections that need verification._
- **Why does `success_response()` connect `Community 0` to `Community 32`, `Community 2`, `Community 5`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`?**
_High betweenness centrality (0.040) - this node is a cross-community bridge._
- **Are the 879 inferred relationships involving `str` (e.g. with `unhandled_exception_handler()` and `get_current_user_by_token()`) actually correct?**
_`str` has 879 INFERRED edges - model-reasoned connections that need verification._
- **Are the 735 inferred relationships involving `success_response()` (e.g. with `list_storage_release_reviews()` and `get_storage_release_review_detail()`) actually correct?**
_`success_response()` has 735 INFERRED edges - model-reasoned connections that need verification._
- **Are the 608 inferred relationships involving `error_response()` (e.g. with `_json_error_response()` and `list_storage_release_reviews()`) actually correct?**
_`error_response()` has 608 INFERRED edges - model-reasoned connections that need verification._
- **Are the 596 inferred relationships involving `SysUser` (e.g. with `数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3` and `从 SysUser 读取用户的 dept_id。`) actually correct?**
_`SysUser` has 596 INFERRED edges - model-reasoned connections that need verification._
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -1,6 +1,6 @@
{
"/Users/wuzilong/work/00code/zkxw/backend/app/__init__.py": 1778578257.989357,
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1786374025.1465516,
"/Users/wuzilong/work/00code/zkxw/backend/app/main.py": 1786426758.368078,
"/Users/wuzilong/work/00code/zkxw/backend/app/tasks/__init__.py": 1778579841.437791,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py": 1786415793.4635684,
"/Users/wuzilong/work/00code/zkxw/backend/app/core/api_crypto.py": 1778578258.039314,
@@ -184,6 +184,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1786374022.5691514,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/material.py": 1782894693.6582327,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/production_material.py": 1782404982.2474263,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/mini_menu.py": 1786438411.2164767,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1785207187.402777,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/market.py": 1781522283.6823432,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_production_reception.py": 1782718998.90251,
@@ -192,7 +193,7 @@
"/Users/wuzilong/work/00code/zkxw/backend/app/api/basic_info.py": 1782709076.3968658,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_confirm.py": 1779657043.1389203,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_infusion_schedule_mgmt.py": 1779940938.18027,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1786350194.7209065,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/__init__.py": 1786426755.6367717,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/storage_entry_sms_notification.py": 1780325524.9170487,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_application.py": 1781079904.0516074,
"/Users/wuzilong/work/00code/zkxw/backend/app/api/pre_transit_sample.py": 1782204426.7965167,